servlet执行步骤:
当我们访问 http://localhost/MyServlet/HelloServlet 时
http:// --- http协议
1)本地hosts文件查询域名和ip的映射
2)找不到,联网到运营商的DNS服务起器找域名和ip的映射</br>
8080 --- 端口
tomcat :80 (默认是8080,已改)
MyServlet :站点下的web应用名称
HelloServlet : 资源名称。
接着:
1)在MyServlet项目应用下的web.xml文件中查找是否存在匹配的url-pattern(也就是上面的“HelloServlet”)
2)匹配到对应的url-pattern之后,取出当前映射信息中的servlet-name的名称,然后在web.xml内部名称中搜索是否存在一个相同名称的servlet-name的servlet配置信息。
3)找到对应的servlet配置信息之后,取出当前配置信息的servlet-class类名
4)调用映射类的方法并返回信息到浏览器
映射:
匹配:
精准匹配:
url-pattern | 浏览器访问 |
---|---|
/hello | http://localhost:8080/day09/hello |
/itcast/hello | http://localhost:8080/day09/itcast/hello |
模糊:
url-pattern | 浏览器访问 |
---|---|
/* | http://localhost:8080/day09/任意路径 |
/itcast/* | http://localhost:8080/day09/itcast/任意路径 |
*.后缀名(.html .任意) | http://localhost:8080/day09/任意路径.后缀名 |
注意:
1)要么以斜杠开头,要么*号开头
非法的url-pattern: /itcast/*.html
2)当多个url-pattern同时被匹配的情况下
精准匹配>模糊匹配
同级匹配下越接近的优先级越高(如/itcast/* > /*)
模糊匹配下*.后缀名优先级越低
如:
随便一个路径可以匹配/*但不能匹配/HelloServlet,所以显示"second"
若是指定一个路径,虽然二者都可以匹配到,但是精准匹配优先级更高,所以显示“first”
缺省路径:
一个路径在tomcat服务器的执行过程:
1)搜索myFirstServlet下面的web.xml文件信息。搜索是否存在匹配的<url-pattern>
2)匹配到对应的url-pattern,执行对应的Servlet程序。
3)如果没有匹配的url-pattern,就把这个请求交给tomcat服务器的DefaultServlet处理。
4)DefaultServlet会在myFirstServlet的根目录下搜索是否存在一个名称叫hello.html的文件。
5)如果找到此文件, 那么DefaultServlet读取该文件内容返回给用户。
6)如果找不到此文件, 那么就给用户返回一个404状态码+404错误页面。
结论: 先找动态网页,再找静态网页。