专题——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 ...
随机推荐
- SNMP远程监控进程信息的OID
最近有个项目需要用snmp远程监控进程信息.于是我查了一下资料. 一.资料 .1.3.6.1.2.1.25.4.2.1.1.iso.org.dod.internet.mgmt.mib-2.host.h ...
- Linux之date
近期学习需要根据不同的日期的数据,做同样的操作,如果一遍遍的手动操作,太笨重了,有些愚公的味道.所以就想着在shell下,将时间当做变量,然后重复其他的操作. 这里的需求是得到从某天(例如:2014- ...
- BW:如何加载和生成自定义的层次结构,在不使用平面文件的SAP业务信息仓库
介绍 通常情况下,报告需要在一个类似树的结构来显示数据.通过启用此特性在SAP BW层次结构.高级数据显示的层次结构的顶层节点.更详细的数据可以向下钻取到的层次结构中的下级节点的可视化. 考虑一个例子 ...
- java web项目启动时自动加载自定义properties文件
首先创建一个类 public class ContextInitListener implements ServletContextListener 使得该类成为一个监听器.用于监听整个容器生命周期的 ...
- Linux实现ftp账号同时访问两个目录方法
在做项目时,客户需要FTP同时访问两个目录,要清楚,在建FTP时,都是一个用户对应一个目录,当FTP用户登录后,就只访问当前目录,如果需要访问到其他目录,得另想办法.刚开始以为使用链接可以实现这个功能 ...
- linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
原创,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4555328.html 之前写过一篇<windows下Android利用ant自动编译.修改配置文件.批量 ...
- Rxlifecycle(一):使用
Rxlifecycle使用非常方便简单,如下: 1.集成 build.gradle添加 //Rxlifecycle compile 'com.trello:rxlifecycle:0.3.1' com ...
- 通过微信查找SAP TCODE代码
输入T-CODE查询作用: (包含了16000+ 个SAP T-CODE),扫码关注后可以体验效果 再也不用去记那么多T-CODE用途了 还不试试看 输入关键词:"利润中心" &q ...
- 使用IntelliJ IDEA 14和Maven创建java web项目
参考地址 http://www.cnblogs.com/jifeng/p/4658765.html
- sizeof()用法汇总
sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素. ...