【Java.Web】Servlet/Filter中的 <url-pattern>
2014-09-27 22:59
363 查看
【Java.Web】Servlet/Filter中的 <url-pattern>
标签:Java Web
2014-09-27 22:59
6013人阅读 评论(2)
收藏
举报
本文章已收录于:
分类:
Java.Web(66)
作者同类文章X
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
Servlet的匹配原则
Filter的匹配原则
在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的匹配原则
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
print?
<servlet-mapping>
... ...
<url-pattern>/<.url-pattern>
</servlet-mapping>
<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 —— Servlet中的Filter
下一篇【Java.IO】I/O 流的一般使用原则
我的同类文章
相关文章推荐
- 【Java.Web】Servlet/Filter中的 <url-pattern>
- Java.Web:Servlet/Filter中的 <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>配置
- java的web.xml中<url-pattern>配置
- java的web.xml中<url-pattern>配置
- java的web.xml中<url-pattern>配置
- java的web.xml中<url-pattern>配置
- java的web.xml中<url-pattern>配置
- Filter mapping must specify either a <url-pattern> or a <servlet-name>问题的处理
- Invalid <url-pattern> /*.action in filter mapping错误以及(Servlet和Filter的url匹配url-p)
- JavaWeb中url和web-xml中<url-pattern>的联系
- servlet原理/过滤规则/多个servlet对写法/一个servlet多个<url-pattern>写法/404错误
- JavaWeb开发中,servlet的url-pattern的映射规则
- javaweb基础学习(一)<ServletConfig与ServletContext对象详解>
- struts2 ,web.xml中配置为/*.action,运行报错Invalid <url-pattern> /*.action in filter mapp
- java_web初学笔记之<Servlet中的request和response对象详解>
- web.xml中同一servlet/filter配置多个url-pattern
- spring mvc 配置DispatchServlet 的<url-pattern>/</url-pattern>的写法