Servlet/Filter中的<url-pattern>
2016-09-03 14:34
375 查看
url-pattern匹配规则
匹配规则有三种:
精确匹配 —— 如/foo.htm,只会匹配foo.htm这个URL
路径匹配 —— 如/foo/*,会匹配以foo为前缀的URL
后缀匹配 —— 如*.htm,会匹配所有以.htm为后缀的URL
<url-pattern>的其他写法,如/foo/ ,/*.htm ,*/foo 都是不对的。
Servlet的匹配规则在prg.apache.tomcat.util.http.mapper.Mapper.internalMapWrapper中定义。
对Servlet的匹配来说,如果同时定义了多个<url-pattern>,那么到底匹配哪个Servlet?这个匹配顺序是:
首先精确匹配,如定义了两个Servlet,Servlet1为/foo.htm,Servlet2是/*,请求URL为http://localhost/foo.htm,那么只有Servlet1匹配成功;
如果精确匹配不成功,那么会使用第二个原则“最长路径匹配”,如Servlet1为/foo/*,Servlet2为/*,这时请求的URL为http://localhost/foo/foo.htm,那么Servlet1匹配成功;
最后根据后缀进行匹配;
但是一次请求只会成功匹配到一个Servlet;
注:
对于如下设置:
[html] view
plain copy
<servlet-mapping>
... ...
<url-pattern>/<.url-pattern>
</servlet-mapping>
"/" 的设置将会将当前指定的 servlet 设为web应用的默认servlet,原来web容器的默认servlet将被覆盖。
参见: web容器的默认servlet 和 spring dispatcherservlet 设置 一节
Filter的匹配规则定义在AppplicationFilterFactory,matchFiltersURL方法中定义。
Filter的匹配原则和Servlet有些不同,只要匹配成功,这些Filter都会在请求链上被调用。
匹配规则有三种:
精确匹配 —— 如/foo.htm,只会匹配foo.htm这个URL
路径匹配 —— 如/foo/*,会匹配以foo为前缀的URL
后缀匹配 —— 如*.htm,会匹配所有以.htm为后缀的URL
<url-pattern>的其他写法,如/foo/ ,/*.htm ,*/foo 都是不对的。
Servlet的匹配原则
Servlet的匹配规则在prg.apache.tomcat.util.http.mapper.Mapper.internalMapWrapper中定义。对Servlet的匹配来说,如果同时定义了多个<url-pattern>,那么到底匹配哪个Servlet?这个匹配顺序是:
首先精确匹配,如定义了两个Servlet,Servlet1为/foo.htm,Servlet2是/*,请求URL为http://localhost/foo.htm,那么只有Servlet1匹配成功;
如果精确匹配不成功,那么会使用第二个原则“最长路径匹配”,如Servlet1为/foo/*,Servlet2为/*,这时请求的URL为http://localhost/foo/foo.htm,那么Servlet1匹配成功;
最后根据后缀进行匹配;
但是一次请求只会成功匹配到一个Servlet;
注:
对于如下设置:
[html] view
plain copy
<servlet-mapping>
... ...
<url-pattern>/<.url-pattern>
</servlet-mapping>
"/" 的设置将会将当前指定的 servlet 设为web应用的默认servlet,原来web容器的默认servlet将被覆盖。
参见: web容器的默认servlet 和 spring dispatcherservlet 设置 一节
Filter的匹配原则
Filter的匹配规则定义在AppplicationFilterFactory,matchFiltersURL方法中定义。Filter的匹配原则和Servlet有些不同,只要匹配成功,这些Filter都会在请求链上被调用。
相关文章推荐
- 【Java.Web】Servlet/Filter中的 <url-pattern>
- 【Java.Web】Servlet/Filter中的 <url-pattern>
- servlet的<url-pattern>
- Invalid <url-pattern> /*.action in filter mapping错误以及(Servlet和Filter的url匹配url-p)
- 关于<Servlet-mapping>中的<url-pattern>的说明
- Servlet中的<url-pattern>问题
- Filter mapping must specify either a <url-pattern> or a <servlet-name>问题的处理
- Java.Web:Servlet/Filter中的 <url-pattern>
- Servlet和Filter的url匹配以及url-pattern详解 及 filter 循环问题的解决
- Invalid <url-pattern> [xxx] in servlet mapping
- filter配置多个url-pattern和排除个别servlet
- Listener、Filter以及Servlet中的url-pattern
- web.xml中同一servlet/filter配置多个url-pattern
- servlet: filter的<dispatcher>FORWARD</dispatcher>
- web.xml 非法<url-pattern>配置
- Servlet和Filter的url匹配以及url-pattern详解
- Servlet和Filter的url匹配以及url-pattern详解(转)
- <url-pattern>/</url-pattern>和<url-pattern>/*</url-pattern>区别
- <url-pattern>中的 *.action *.do /*
- servlet与filter的url-pattern设置方式及映射规则