1、精确路径匹配模式:请求路径必须与<url-pattern>标签中的值完全相同才可被Servlet处理。(可以匹配多个)
2、通配符路径模式:
- 该模式中的路径由两部分组成:精确路径部分和通配符部分。请求路径中只有携带了<url-pattern>值中的指定的精确路径部分才可被当前的Servlet处理。(通配符使用*符号来表示)
- /*与/都是全路径模式,但是它们还是有不同的。/*是真正的全路径模式,可以拦截所有请求,无论是动态资源请求,还是静态资源请求,均会被拦截;/只会拦截静态资源请求,对于动态资源是不会进行拦截的。(直接把相应文件发送到客户端的文件都是静态资源;如果不同的用户可以得到不同的回答,是动态资源,一般是指数据库资源。)
3、后缀名模式:
- 如上所示,如果<url-pattern>值为“.do”,则会拦截所有请求路径与.do结尾的相关用户请求。(需要注意的是,为<url-pattern>设置值时,带斜杠的通配符模式和后缀名模式不能够同时使用,例如,不能使用/*.do,/***/*.do等形式,否则,服务器将无法正常启动。)
- 附录:<url-pattern>中的匹配原则问题:
a、优先后缀匹配原则:例如SomeServlet的<url-pattern>为*.do,OtherServlet的<url-pattern>为/xxx/*。若用户请求的URL为http://localhost:8080/oa/xxx/abc.do,此时服务器发现SomeServlet的*.do和OtherServlet的/xxx/*都可以与用户提交的请求/xxx/abc.do相匹配。那么服务器会按照“路径优先匹配后缀”的原则选择OtherServlet。
b、精确路径优先匹配原则:例如SomeServlet的<url-pattern>为/some,OtherServlet的<url-pattern>为/*。若用户提交的请求URL为http://localhost:8080/oa/some,此时服务器发现SomeServlet的/some和OtherServlet的为/*,那么服务器会按照“精确路径优先”的原则学则SomeServlet。
c、最长路径优先匹配原则:
- 例如SomeServlet的<url-pattern>为/some/*,OtherServlet的<url-pattern>为/some/other/*。若用户提交的请求URL为http://localhost:8080/oa/some/other,此时服务器发现SomeServlet的/some/*与OtherServletDE/some/other/*都可以与用户提交请求的/some/other相匹配。那么服务器会按照“最长路径优先匹配”的原则选择OtherServlet。