一、映射什么?

一个请求发送到 servlet 容器,servlet 容器会将当前请求的 url 路径减去 协议、端口号、contextPath,剩下 servletPath 就是用来做 url-pattern 映射的部分。

如:

http://localhost:8080/myservlet/DisplayHeader?method=show

http: 传输协议

localhost: 主机地址

8080: 端口号

myservlet: contextPath

DisplayHeader: servletPath

method=show: 参数

所以要做 url-pattern 映射的部分就是 "DisplayHeader" 部分。

二、映射

1.映射规则

(1)精确匹配:在url-pattern标签中指定一个具体的URL地址,其中不使用任何的通配符,例如:/target.jsp

(2)模糊匹配:在url-pattern标签中指定一个带有通配符的URL地址

  <1>前缀匹配:URL地址前面确定,后面使用通配符,例如:/happy/*

  <2>后缀匹配:URL地址后面确定,前面使用通配符,例如:*.jsp,*.jpg

  <3>注意:不能在URL地址中间使用通配符,例如:/happy/*.jsp是不允许的

(3)还有一种:"/"

2.Wrapper :Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。

(1)前缀匹配的 servlet 会被丢到 wildcardWrappers 中。

(2)后缀匹配的 servlet 会被丢到 extensionWrappers 中。

(3)"/" 会被丢到 defaultWrapper 中。

(4)其他映射被丢到 exactWrappers 中。

3.优先级的高低

(1)精确匹配,使用 contextVersion 的 exactWrappers

(2)前缀匹配,使用 contextVersion 的 wildcardWrappers

(3)后缀匹配,使用contextVersion的extensionWrappers(tomcat 自动为我们加入处理 .jsp 和 .jspx 路径)

(4)使用资源文件来处理servlet,使用contextVersion的welcomeResources属性,这个属性是个字符串数组(servletPath 如果什么都不输入的话,则会先来映射welcomeResources)

(5)使用默认的servlet,使用contextVersion的defaultWrapper

简单来说:

精确匹配的优先级>前缀匹配(/*)>后缀匹配(*.action)> servletPath 为空(默认会访问 welcomeResources) > "/"。

三、参考资料

http://www.cnblogs.com/fangjian0423/p/servletContainer-tomcat-urlPattern.html

四、常见问题

1.为什么 servlet 的 url-pattern 要配置为 "/",而 filter 的 url-pattern 要配置为 "/*"?

"/*" 的优先级较高,对于大部分 url 请求都能进行过滤,甚至我们访问 index.jsp 这样的文件都需要走这个映射。对于 servlet 而言,不是希望看到的。

对于 filter 来说,不会像servlet那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filter,所以它要拦截绝大部分请求,然后由每个匹配的filter进行自主处理。

这个解释可能还有点不足,欢迎大家补充。

专题——web.xml 中 url-pattern的更多相关文章

  1. 使用框架时,在web.xml中配置servlet时,拦截请求/和/*的区别。

    关于servlet的拦截设置,之前看了好多,说的都不太清除,明白. 最近明白了一些,总的来说就是保证拦截所有用户请求的同时,放行静态资源. 现整理如下: 一.我们都知道在基于Spring的Applic ...

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

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

  3. Web.xml中设置Servlet和Filter时的url-pattern匹配规则

    一.servlet容器对url的匹配过程: 当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://loca ...

  4. web.xml中的url-pattern映射规则

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

  5. web.xml中JSP配置及 EL表达式

    web.xml 中JSP配置.servlet配置 及 EL表达式 [摘要] servlet 基本配置 <servlet> <servlet-name>LoginServlet& ...

  6. web.xml中的主要元素说明(listener, filter, servlet)

    web.xml中加载的顺序为:context-param ---> listener ---> filter ---> servlet. listener:主要针对的是对象的操作,如 ...

  7. SpringMVC: web.xml中声明DispatcherServlet时一定要加入load-on-startup标签

    游历SpringMVC源代码后发现,在web.xml中注冊的ContextLoaderListener监听器不过初始化了一个根上下文,只完毕了组件扫描和与容器初始化相关的一些工作,并没有探測到详细每一 ...

  8. Web.xml中四种验证方式

    源地址:https://blog.csdn.net/imimi_/article/details/78805642 <security-constraint> 的子元素 <http- ...

  9. Web.xml中Filter过滤器标签几个说明

    在研究liferay框架中看到Web.xml中加入了过滤器的标签,可以根据页面提交的URL地址进行过滤,发现有几个新标签没用过,下面就介绍以下几个过滤器的标签用法: <!-- 定义Filter ...

随机推荐

  1. [Aaronyang] 写给自己的WPF4.5 笔记18[几何图形*Geometry图文并茂讲解]

    为什么要掌握?因为WPF 3D知识很多与它Geometry对比,所以我要系统学一下. --学会用Geometry给Path的Data属性填充. 图形可以转换成路径,Path的值,当然你也可以直接使用R ...

  2. ubuntu 16.04 source (HUST and 163)

    #HUST deb http://mirrors.hust.edu.cn/ubuntu/ xenial main restricted universe multiverse deb http://m ...

  3. quick -- 创建精灵和动作

    local imgBg = display.newSprite("666666.jpg") :pos(display.cx, display.cy) :addTo(self) , ...

  4. 新安装的VS的一些设置

    古语云:工欲善其事必先利其器 为了方便我们开发,应该设置好VS的一些配置,安装一些辅助插件 1 设置字体和背景等 设置字体为 console 10大小 背景设为护眼颜色 85 90 205 这三个值 ...

  5. linq to entity 获取项的集合总数

    IEnumerable<InspecReportsContextEntity> OnenewDate = lisConAll.Where(p => p.inspectime == t ...

  6. CSV - 操作比较

    在数据报表生成的时候,我们一般会用程序去生成CSV.其中有些需要注意的地方. log_file = open('delay.%s.csv' % s_end, 'w') log_file.write(' ...

  7. js去掉html标签和去掉字符串文本的所有的空格

    去掉html标签的js <script> function delHtmlTag(str){  return str.replace(/<[^>]+>/g,"& ...

  8. java代写

    Computer Science, Claremont McKenna CollegeCS51.2 - Introduction to Computer Science, Fall 2014Probl ...

  9. 安装 LuaSocket

    如果你安装有 Lua 模块的安装和部署工具 -- LuaRocks,那么一条指令就能安装部署好 LuaSocket: luarocks install luasocket  

  10. HTML Hyperlink between and within pages

    In HTML, we can use tag <a href=""> to create hyperlinks between and within pages. T ...