web.xml中url-pattern匹配规则
2015-10-27 15:10
323 查看
最基本的servlet中,jsp页面向对应Servlet对象请求时,会根据web.xml中匹配规则,匹配对应的Servlet。
匹配规则有三种:
精确匹配 —— 如/findAll.htm,只会匹配foo.htm这个URL
路径匹配 —— 如/service/*,会匹配以service为前缀的URL
后缀匹配 —— 如*.htm,会匹配所有以.htm为后缀的URL
<url-pattern>的其他写法,如/findAll/ ,/*.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
匹配规则有三种:
精确匹配 —— 如/findAll.htm,只会匹配foo.htm这个URL
路径匹配 —— 如/service/*,会匹配以service为前缀的URL
后缀匹配 —— 如*.htm,会匹配所有以.htm为后缀的URL
<url-pattern>的其他写法,如/findAll/ ,/*.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
相关文章推荐
- 一个Java程序员应该掌握的10项技能
- OC --- KVC
- linuxc_螺纹锁紧pthread_mutex_t
- XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置
- iOS设置处理异常的方法
- android 图片加载和缓存开源项目 Picasso
- 每日一个OpenGL API (二)
- NDK搭建环境笔记
- 河南夏邑县卫生局容灾智能鼎
- 简单工厂模式 -- 大话设计模式
- 如何以代码形式插入断点
- lintcode 中等题:2 Sum 两个数的和
- 【web】项目中如何获取ip地址和端口号
- 授权普通非DBA用户可以有权限查看执行计划的方法
- Flex+BlazeDs+Java的教程及Demo
- 数据库:替代变量笔记
- AD Site Design and Auto Site Link Bridging, or Bridge All Site Links (BASL)
- yaw roll pitch matrix
- Log的使用技巧——解决字典和和数组的直接打印时问题
- 解析UML九种图