【Java.Web】Servlet/Filter中的 <url-pattern>
来源:互联网 发布:mac charles4.0.2破解 编辑:程序博客网 时间:2024/05/23 12:21
【Java.Web】Servlet/Filter中的 <url-pattern>
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
- 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;
注:
对于如下设置:
- <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:Servlet/Filter中的 <url-pattern>
- Servlet/Filter中的<url-pattern>
- web.xml中的servlet和filter,url-pattern设置
- Listener、Filter以及Servlet中的url-pattern
- 从零开始学习Java Web(三):servlet和filter的url-pattern
- filter中的url-pattern
- Servlet 、Filter 的url-pattern
- servlet中的url-pattern
- JAVA WEB:一个Filter配置多个url-pattern
- web.xml中的Servlet的url-pattern映射规则
- Servlet,Filter的url-pattern详解
- Servlet,Filter的url-pattern详解
- wildcard in servlet/filter url-pattern mapping
- Java Web中的Servlet及Filter
- Java Web中的Servlet及Filter
- Java Web中的Servlet及Filter
- windows下恢复原来的环境变量path
- 全卷积网络(FCN)与图像分割
- 取数组地址引发的血案(int*)(&a+1);(int*)((int)a+1);
- linux命令和vim学习
- Atitit. 项目文档目录大纲 总集合 v2
- 【Java.Web】Servlet/Filter中的 <url-pattern>
- 爬虫闯关之旅-1
- java web filter 之一 基础实现
- 高性能的JavaScript库---Lodash
- 把欢迎页面设置成一个servlet
- TextView跑马灯效果
- Atitit。Web server Jetty9 使用 attilax 总结
- 深入理解Java PriorityQueue
- Atitit. Exception in thread "main" java.lang.Error: Unresolved compilation problem: