Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单。servlet和filter中的url-pattern有一些文章在里面的,总结了一些东西,以免遇到问题又要浪费时间。

一、先精确匹配,再路径匹配

(路径匹配的时候,先最长路径匹配,再最短路径匹配),至于扩展名匹配,就是单独于精确匹配和匹配的一类了,以上都找不到servlet,就用默认的servlet,配置为<url-pattern>/</url-pattern>。

二,servlet容器对url的匹配过程:

当 一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是 http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉, 剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下 的servlet了(filter不同,后文会提到)。其匹配规则和顺序如下:

1.     精确路径匹配。例子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的 servlet了。

2.     最长路径匹配。例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此 时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。

3.     扩展匹配,如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action

4.     如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default servlet,则容器会将请求丢给default servlet(什么是default servlet?后面会讲)。

根据这个规则表,就能很清楚的知道servlet的匹配过程,所以定义servlet的时候也要考虑url-pattern的写法,以免出错。

对于filter,不会像servlet那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一 个filter。Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同。

三,url-pattern详解

在web.xml文件中,以下语法用于定义映射:

l. 以”/’开头和以”/*”结尾的是用来做路径映射的。

2. 以前缀”*.”开头的是用来做扩展映射的。

3. “/” 是用来定义default servlet映射的。

4. 剩下的都是用来定义详细映射的。比如: /aa/bb/cc.action

所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。

web.xml中的url-pattern详解相关推荐

  1. web.xml中url-pattern的配置详解

    前言 今天研究了一下tomcat上web.xml配置文件中url-pattern的问题. 这个问题其实毕业前就困扰着我,当时忙于找工作. 找到工作之后一直忙,也就没时间顾虑这个问题了. 说到底还是自己 ...

  2. springmvc.xml 中 url-pattern/url-pattern节点详解

    1.  先来上段常见的代码 1 <!-- MVC Servlet --> 2 <servlet> 3 <servlet-name>springServlet< ...

  3. web.config中的session配置详解

    打开某个应用程序的配置文件Web.config后,我们会发现以下这段: < sessionState mode="InProc" stateConnectionString= ...

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

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

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

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

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

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

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

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

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

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

  9. Spring中,applicationContext.xml 配置文件在web.xml中的配置详解

    Spring中,applicationContext.xml 配置文件在web.xml中的配置详解 2016年10月04日 15:22:26 阅读数:7936 转自http://www.cnblogs ...

最新文章

  1. 如何通过远程修改另一台电脑注册表
  2. Xamarin Essentials教程磁力计Magnetometer
  3. 相声演员侯耀文突发疾病去世享年59岁 深切怀念
  4. 简单形象又有趣地说说强大的神经网络
  5. 安装Loadrunner11及破解步骤
  6. Flowable 数据库表结构 ACT_HI_TASKINST
  7. Windows Server 2008搭建域环境---安装活动目录
  8. UnityShader22:序列帧动画
  9. 3.性能之巅 洞悉系统、企业与云计算 --- 操作系统
  10. 计算机硕士工资一览表 08年最新各大IT公司薪水行
  11. 财务应付结算系统设计-发票(含账单发票差异调整)
  12. 商务统计_5 用图表演示数据 - 茎叶图
  13. 使用 npm 打包项目
  14. Snagit_日文输入法:促音,长音,小写的输入方法
  15. 2021-09-11职场规则
  16. Unity3d中插入音频
  17. 【牛客多校第十场】Coffee Chicken
  18. 批量修改Jenkins的job任务配置,JenkinsClient、JenkinsServer
  19. LOJ 1070 Algebraic Problem
  20. Java智能五子棋(更新中)

热门文章

  1. 自动剪视频的软件王者剪辑里的极速编码模式
  2. 大佬分享9条秘籍,小白也能用Python赚钱,网友:不早说!
  3. 为什么我们忙而无用、劳而不得却还总是在瞎忙
  4. 已知A,B点,和C点,让C点在AB线段上移动
  5. 2.1 jmeter及其插件的安装
  6. asp毕业设计——基于asp+sqlserver的WEB社区论坛设计与实现(毕业论文+程序源码)——社区论坛
  7. 电脑 linux系统下载官网,Lubuntu下载_Lubuntu Linux系统下载_uc电脑园官网_uc电脑园官网...
  8. 魔兽世界暗月马戏团声望,任务,成就全攻略
  9. 2人反应堆:情人节约会推荐小游戏
  10. Google ARCore发布