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相关推荐

  1. 在web.xml中配置过滤器

    在web.xml中配置过滤器 <filter> <filter-name>loginFilter</filter-name>//过滤器名称 <filter-c ...

  2. Jsp在Web.xml中的配置

    以下列出web.xml经常使用的标签元素及这些标签元素的功能: 1.指定欢迎页面.比如: <welcome-file-list> <welcome-file-list> < ...

  3. web.xml 中的listener、 filter、servlet 加载顺序及其详解(转)

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  4. web.xml中filter,servlet和listener区别

    2019独角兽企业重金招聘Python工程师标准>>> 1.Filter与Servlet的区别和联系,点击查看详情 2.Filter的执行顺序与实例,点击查看详情 Filter 实现 ...

  5. [转]web.xml 中的listener、 filter、servlet 加载顺序及其详解

    2019独角兽企业重金招聘Python工程师标准>>> 转自:http://zhxing.iteye.com/blog/399668 在项目中总会遇到一些关于加载的优先级问题,近期也 ...

  6. web.xml 中的listener、 filter、servlet 加载顺序及其详解

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  7. web.xml 中的filter

    Servlet API的2.3版本中最重要的一个新功能就是能够为servlet和JSP页面定义过滤器.过滤器提供了某些早期服务器所支持的非标准"servlet链接"的一种功能强大且 ...

  8. web.xml中的所有配置,Listener和Filter的加载顺序

    web.xml 中的listener. filter.servlet 加载顺序及其详解 在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人 ...

  9. (转)web.xml 中的listener、 filter、servlet 加载顺序及其详解

    转: https://www.cnblogs.com/Jeely/p/10762152.html web.xml 中的listener. filter.servlet 加载顺序及其详解 一.概述 1. ...

  10. 服务器启动时Webapp的web.xml中配置的加载顺序

    一 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Ser ...

最新文章

  1. 【转载】有软件开发,就要有软件测试!
  2. ASP.NET MVC 5 - 将数据从控制器传递给视图
  3. 《数据结构》知识点Day_05
  4. Androidstudio坑
  5. Python可视化工具Matplotlib 3.0版出炉,改进默认后端选择,饼图终于变圆了
  6. 需要凭据_PE管件连接时有哪些需要注意的地方
  7. struts 国际化
  8. C# 打印机功能打印图表
  9. 单片机段式LCD驱动教程
  10. 移动前端开发和 Web 前端开发的区别
  11. 蓝牙电子产品加拿大IC认证周期
  12. 网上赚钱竞争那么激烈你一定要有自己的绝活!
  13. 算法随笔 — 树结构基础 — 并查集
  14. qemu里pci设备的热插拔
  15. 美团饿了么外卖红包cps赚钱小程序源码
  16. 按键精灵/触控精灵 多点找怪,多点找色算法思路,附带动态分析图,以及算法代码
  17. 取消选中单选框radio的三种方式
  18. 敏捷遇上UML(深圳 2014.3.15)- 活动报道
  19. 《10人以下小团队管理手册》读书摘记
  20. 东财《论文写作指导》单元作业一二三

热门文章

  1. 震惊,与gcc不得不说的故事:Linux虚拟机环境下,gcc的在线安装
  2. List of MIME Types by Content Type
  3. excel通用导出工具类
  4. monkey Android稳定性测试
  5. 一键隐藏窗口,一键结束程序
  6. 培训的Web前端什么水平
  7. 511遇见易语言多线程大漠后台多窗口自动循环登号模板
  8. Android 9 MTK 更改系统的版本号
  9. 准程序员的创意(一)
  10. blender安装blender-GIS插件