专题——web.xml 中 url-pattern
一、映射什么?
一个请求发送到 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的更多相关文章
- 使用框架时,在web.xml中配置servlet时,拦截请求/和/*的区别。
关于servlet的拦截设置,之前看了好多,说的都不太清除,明白. 最近明白了一些,总的来说就是保证拦截所有用户请求的同时,放行静态资源. 现整理如下: 一.我们都知道在基于Spring的Applic ...
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- Web.xml中设置Servlet和Filter时的url-pattern匹配规则
一.servlet容器对url的匹配过程: 当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://loca ...
- web.xml中的url-pattern映射规则
Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单.servlet和filter中的url-pattern有一些文章在里面的,总结了一些东西,以免遇到问题又要浪费时间. 一,s ...
- web.xml中JSP配置及 EL表达式
web.xml 中JSP配置.servlet配置 及 EL表达式 [摘要] servlet 基本配置 <servlet> <servlet-name>LoginServlet& ...
- web.xml中的主要元素说明(listener, filter, servlet)
web.xml中加载的顺序为:context-param ---> listener ---> filter ---> servlet. listener:主要针对的是对象的操作,如 ...
- SpringMVC: web.xml中声明DispatcherServlet时一定要加入load-on-startup标签
游历SpringMVC源代码后发现,在web.xml中注冊的ContextLoaderListener监听器不过初始化了一个根上下文,只完毕了组件扫描和与容器初始化相关的一些工作,并没有探測到详细每一 ...
- Web.xml中四种验证方式
源地址:https://blog.csdn.net/imimi_/article/details/78805642 <security-constraint> 的子元素 <http- ...
- Web.xml中Filter过滤器标签几个说明
在研究liferay框架中看到Web.xml中加入了过滤器的标签,可以根据页面提交的URL地址进行过滤,发现有几个新标签没用过,下面就介绍以下几个过滤器的标签用法: <!-- 定义Filter ...
随机推荐
- [Scheme]Understanding the Yin-Yang Puzzle
这题目确实比较杀脑细胞... 原题: (let* ((yin ((lambda (cc) (display "@") cc) (call-with-current-continua ...
- 【css3】如何自定义 placeholder 文本颜色
昨天写了一篇基于 jquery 实现 ie 浏览器兼容 placeholder 效果,具体内容点击传送门.不过还是有点小瑕疵,就是不能设置 placeholder 文本颜色.本文主要介绍利用 css ...
- 高吞吐量的分布式发布订阅消息系统Kafka-- 管理工具 Kafka Manager
一.概述 Kafka在雅虎内部被很多团队使用,媒体团队用它做实时分析流水线,可以处理高达20Gbps(压缩数据)的峰值带宽. 为了简化开发者和服务工程师维护Kafka集群的工作,构建了一个叫做Kafk ...
- Aspose转PDF时乱码问题的解决
主要原因是服务器上一般安装的字体都是有限的,而我们日常生活工作中总是喜欢用一些比较特别的字体,比如宋体GB2312,这时候如果用Aspose转PDF就会出现乱码,解决方法也比较简单,把本地的特殊字体拷 ...
- C#标准响应数据
public HttpResponseMessage UpdateModule(Mode mode) { var response = Process.Instance.ExecuteString(( ...
- httpwebrequest 服务器提交了协议冲突. section=responsestatusline
调用接口的时候,包: httpwebrequest 服务器提交了协议冲突. section=responsestatusline 解决方案: req.KeepAlive = false; req.Al ...
- IT Operations(IT 运营),运维的更价值化认识
一直想努力向别人(甚至包括从事运维的人)解释清楚什么是运维,发现很难! 6月20号,在InfoQ高效运维群里面,对运维创业做了一次激烈的讨论,很自然地,过程中不可避免的谈到运维苦逼和运维无法产品化的问 ...
- Unity3d删除无用的美术资源
这个插件是我在国外网站逛论坛发现的,试用了一下非常好用,是一个轻量级的插件就一个类.开发中尤其是和美术合作的时候,可能你会发现Project视图中有很多没有用到的资源,但是你又不敢删除,因为你不知道那 ...
- C 语言函数参数只能传指针,不能传数组
今天被要求编写一个C/C++冒泡算法的程序,心想这还不是手到擒来的事儿,虽然最近都是用Javascript程序,很少写C/C++程序,但是好歹也用过那么多年的C语言: 首先想的是怎么让自己的代码看上去 ...
- 【转】每个人应该知道的NVelocity用法
NVelocity是一个基于.NET的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由.NET代码定义的对象.从而使得界面设 ...