这个问题。。。整整折磨了我两天。。。
终于把它搞明白了!
在我的web.xml下,如果代码是:
Ch1Servlet demo.Ch1Servlet Ch1Servlet /Ch1Servlet
上面的配置信息,其中
其中
当浏览器发起一个url请求后,该请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如url是http://localhost:8080/demo/Ch1Servlet,其应用上下文是demo,容器会将http://10.43.11.143/demo去掉,剩下的Ch1Servlet部分拿来做servlet的映射匹配。这个映射匹配过程是有优先顺序的(具体的优先顺序规则后面介绍),而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了。
精确匹配:
MyServlet /kata/detail.html /demo.html /table
当在浏览器中输入如下几种url时,都会被匹配到该servlet
http://10.43.11.143/myapp/kata/detail.htmlhttp://10.43.11.143/myapp/demo.html
http://10.43.11.143/myapp/table
注意:
http://10.43.11.143/myapp/table/ 是非法的url,不会被当作http://10.43.11.143/myapp/table识别
另外上述url后面可以跟任意的查询条件,都会被匹配,如
http://10.43.11.143/myapp/table?hello 这个请求就会被匹配到MyServlet。
扩展名匹配:
MyServlet *.jsp
则任何扩展名为jsp(文件名和路径任意)的url请求都会匹配,比如下面的url都会被匹配
http://10.43.11.143/myapp/demo.jsphttp://10.43.11.143/myapp/test.jsp