servlet的匹配问题

阅读更多

这个问题。。。整整折磨了我两天。。。

 

终于把它搞明白了!

 

在我的web.xml下,如果代码是:




    
        Ch1Servlet
        demo.Ch1Servlet
    

    
        Ch1Servlet
        /Ch1Servlet
    

上面的配置信息,其中标签首先配置声明一个servlet,包括servlet的名字和对应的Java类名。

其中标签声明了与该servlet相应的匹配规则,每个标签代表1个匹配规则。

 

当浏览器发起一个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.html
http://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.jsp
http://10.43.11.143/myapp/test.jsp
 
 
路径匹配

    MyServlet
    /kata/*

则请求的ulr只要前面(myapp之后)的路径是/kata,而后面的路径可以任意。比如下面的url都会被匹配。
http://10.43.11.143/myapp/kata/demo.html
http://10.43.11.143/myapp/kata/test.jsp
http://10.43.11.143/myapp/kata/test/detail.html

http://10.43.11.143/myapp/kata/action

http://10.43.11.143/myapp/kata/action/

注意:路径和扩展名匹配无法同时设置,比如下面的三个都是非法的,如果设置,启动tomcat服务器会报错。

/kata/*.jsp

/*.jsp

he*.jsp

 

另外注意:/aa/*/bb
这个是精确匹配,url必须是 /aa/*/bb,这里的*不是通配的含义

 

 

任意url匹配:

如果配置成如下两种的任意一种

/

/*

则所有的url都可以被匹配上。其中/*是路径匹配,只是路径就是/。

 

转载自:https://www.cnblogs.com/51kata/p/5152400.html

你可能感兴趣的:(Servlet)