web.xml中的url-pattern
web.xml
文件中,url-pattern
有两种,一种是Servlet
的,一种是Filter
的。常见的用法如下:
<filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet><servlet-name>Spring</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 表示启动容器时初始化该servlet --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:Spring-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Spring</servlet-name><!-- 表示哪些请求需要交给Spring Web MVC处理,/是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求 --><url-pattern>/</url-pattern></servlet-mapping>
下面来一个个分析这些url的使用场景吧。
Servlet中的 url-pattern
Servlet 2.5
开始,一个servlet可以使用多个url-pattern规则,标签声明了与该servlet相应的匹配规则,每个标签代表1个匹配规则;- 当servlet容器接收到浏览器发起的一个url请求后,容器会用url减去当前应用的上下文路径,以剩余的字符串作为servlet映射,假如url是
http://localhost:8080/appDemo/index.html
,其应用上下文是appDemo
,容器会将http://localhost:8080/appDemo
去掉,用剩下的/index.html
部分拿来做servlet的映射匹配; - url-pattern映射匹配过程是有
优先顺序
的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了。
这里主要值得分析的是第三点,即优先顺序
。在这之前,看看有哪些匹配规则。
精确匹配
url-pattern
中配置的项必须与 url
完全精确匹配。例如:
<servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/user/users.html</url-pattern><url-pattern>/index.html</url-pattern>
</servlet-mapping>
http://localhost:8080/appDemo/index.html
会被匹配到MyServlet
。
路径匹配
以“/”
字符开头,并以“/*”
结尾的字符串用于路径匹配。例如:
<servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/user/*</url-pattern>
</servlet-mapping>
路径以/user/
开始,后面的路径可以任意。比如 http://localhost:8080/appDemo/user/users.html
。
扩展名匹配
以“*.”
开头的字符串被用于扩展名匹配。例如:
<servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>*.html</url-pattern>
</servlet-mapping>
则任何扩展名为html
的url请求都会匹配,比如 http://localhost:8080/appDemo/user/users.html
注意: 如<url-pattern>/user/*.action</url-pattern>
是非法的。路径匹配和扩展匹配不能同时使用。
另外,<url-pattern>/aa/*/bb</url-pattern>
是精确匹配,合法,这里的*不是通配的含义
缺省匹配
<servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>
匹配优先级
精确匹配 > 路径匹配 > 扩展名匹配 > 缺省匹配
,只要前面有一个匹配成功,就匹配结束。
"/*"
和"/"
比较
“/*”
属于路径匹配
,并且可以匹配所有request,由于路径匹配的优先级仅次于精确匹配,所以“/*”会覆盖所有的扩展名匹配,很多404错误均由此引起,所以这是一种特别恶劣的匹配模式,一般只用于filter的url-pattern。“/”
是servlet中特殊的匹配模式,该模式同样会 匹配所有request,但优先级最低。“/*”
和“/”
均会拦截静态资源的加载,需要特别注意。
Filter中的 url-pattern
其实上面已经把url-pattern
规则都讲完了。
对于filter
,不会像servlet
那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filter。Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同。
本博文参考了 servlet的url-pattern匹配规则
web.xml中的url-pattern相关推荐
- 在web.xml中配置过滤器
在web.xml中配置过滤器 <filter> <filter-name>loginFilter</filter-name>//过滤器名称 <filter-c ...
- Jsp在Web.xml中的配置
以下列出web.xml经常使用的标签元素及这些标签元素的功能: 1.指定欢迎页面.比如: <welcome-file-list> <welcome-file-list> < ...
- web.xml 中的listener、 filter、servlet 加载顺序及其详解(转)
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- web.xml中filter,servlet和listener区别
2019独角兽企业重金招聘Python工程师标准>>> 1.Filter与Servlet的区别和联系,点击查看详情 2.Filter的执行顺序与实例,点击查看详情 Filter 实现 ...
- [转]web.xml 中的listener、 filter、servlet 加载顺序及其详解
2019独角兽企业重金招聘Python工程师标准>>> 转自:http://zhxing.iteye.com/blog/399668 在项目中总会遇到一些关于加载的优先级问题,近期也 ...
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- web.xml 中的filter
Servlet API的2.3版本中最重要的一个新功能就是能够为servlet和JSP页面定义过滤器.过滤器提供了某些早期服务器所支持的非标准"servlet链接"的一种功能强大且 ...
- web.xml中的所有配置,Listener和Filter的加载顺序
web.xml 中的listener. filter.servlet 加载顺序及其详解 在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人 ...
- (转)web.xml 中的listener、 filter、servlet 加载顺序及其详解
转: https://www.cnblogs.com/Jeely/p/10762152.html web.xml 中的listener. filter.servlet 加载顺序及其详解 一.概述 1. ...
- 服务器启动时Webapp的web.xml中配置的加载顺序
一 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Ser ...
最新文章
- 【转载】有软件开发,就要有软件测试!
- ASP.NET MVC 5 - 将数据从控制器传递给视图
- 《数据结构》知识点Day_05
- Androidstudio坑
- Python可视化工具Matplotlib 3.0版出炉,改进默认后端选择,饼图终于变圆了
- 需要凭据_PE管件连接时有哪些需要注意的地方
- struts 国际化
- C# 打印机功能打印图表
- 单片机段式LCD驱动教程
- 移动前端开发和 Web 前端开发的区别
- 蓝牙电子产品加拿大IC认证周期
- 网上赚钱竞争那么激烈你一定要有自己的绝活!
- 算法随笔 — 树结构基础 — 并查集
- qemu里pci设备的热插拔
- 美团饿了么外卖红包cps赚钱小程序源码
- 按键精灵/触控精灵 多点找怪,多点找色算法思路,附带动态分析图,以及算法代码
- 取消选中单选框radio的三种方式
- 敏捷遇上UML(深圳 2014.3.15)- 活动报道
- 《10人以下小团队管理手册》读书摘记
- 东财《论文写作指导》单元作业一二三