【Java.Web】Servlet/Filter中的 <url-pattern>
2014-09-27 22:59
776 查看
在web.xml中<servlet-mapping>和<filter-mapping>都有<url-pattern>配置项,它们的作用都是匹配一次请求是否会执行这个Servlet或Filter。
url-pattern配置验证
在web.xml加载时,会首先检查<url-pattern>配置是否符合规则,这个检查是在StandardContext的validateURLPattern方法中检查的;如果检查不成功,Context容器启动会失败,并且报java.lang.IllegalArgumentException:Invalid<url-pattern> ... ... in Servlet mapping错误。
url-pattern匹配规则
匹配规则有三种:
精确匹配 —— 如/foo.htm,只会匹配foo.htm这个URL
路径匹配 —— 如/foo/*,会匹配以foo为前缀的URL
后缀匹配 —— 如*.htm,会匹配所有以.htm为后缀的URL
<url-pattern>的其他写法,如/foo/ ,/*.htm ,*/foo 都是不对的。
对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;
注:
对于如下设置:
"/" 的设置将会将当前指定的 servlet 设为web应用的默认servlet,原来web容器的默认servlet将被覆盖。
参见: web容器的默认servlet 和 spring dispatcherservlet 设置
一节
Filter的匹配原则和Servlet有些不同,只要匹配成功,这些Filter都会在请求链上被调用。
url-pattern配置验证
在web.xml加载时,会首先检查<url-pattern>配置是否符合规则,这个检查是在StandardContext的validateURLPattern方法中检查的;如果检查不成功,Context容器启动会失败,并且报java.lang.IllegalArgumentException:Invalid<url-pattern> ... ... in Servlet mapping错误。
url-pattern匹配规则
匹配规则有三种:
精确匹配 —— 如/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;
注:
对于如下设置:
<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>
- java的web.xml中<url-pattern>配置
- java的web.xml中<url-pattern>配置
- java的web.xml中<url-pattern>配置
- Tomcat8.0部署web发生Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> /*.do in servle
- java的web.xml中<url-pattern>配置
- web.xml中配置访问资源URL<url-pattern>/</url-pattern>时无法访问.html、.jsp、.js、.css等静态资源时的解决方案
- form表单的action参数值和web.xml中的<url-pattern>
- Invalid <url-pattern> /*.action in filter mapping错误以及(Servlet和Filter的url匹配url-p)
- javaweb基础学习(一)<ServletConfig与ServletContext对象详解>
- java的web.xml中<url-pattern>配置
- Filter mapping must specify either a <url-pattern> or a <servlet-name>问题的处理
- Javaweb的web.xml中<url-pattern>配置
- Invalid <url-pattern> in servlet mapping
- java的web.xml中<url-pattern>配置
- spring mvc 配置DispatchServlet 的<url-pattern>/</url-pattern>的写法
- web.xml中的三种<url-pattern>元素
- java的web.xml中<url-pattern>配置[转]
- struts2配置web的action中的<url-pattern>