转自:http://foxty.iteye.com/blog/39332
Servlet和Filter的url匹配以及url-pattern详解
Servlet
和
filter
是
J2EE
开发中常用的技术,使用方便,配置简单,老少皆宜。估计大多数朋友都是直接配置用,也没有关心过具体的细节,今天遇到一个问题,上网查了
servlet
的规范才发现,
servlet
和
filter
中的
url-pattern
还是有一些文章在里面的,总结了一些东西,放出来供大家参考,以免遇到问题又要浪费时间。
<o:p></o:p>
一,
servlet
容器对
url
的匹配过程:
<o:p></o:p>
<o:p></o:p>
当一个请求发送到
servlet
容器的时候,容器先会将请求的
url
减去当前应用上下文的
路径
作为
servlet
的映射
url
,比如我访问的是
http://localhost/test/aaa.html
,我的应用上下文是
test
,容器会将
http://localhost/test
去掉,剩下的
/aaa.html
部分拿来做
servlet
的映射匹配。这个映射匹配过程是有顺序的,而且当有一个
servlet
匹配成功以后,就不会去理会剩下的
servlet
了(
filter
不同,后文会提到)。其匹配规则和顺序如下:
<o:p></o:p>
1.
精确路径匹配。例子:比如
servletA
的
url-pattern
为
/test
,
servletB
的
url-pattern
为
/*
,这个时候,如果我访问的
url
为
http://localhost/test
,这个时候容器就会先
进行精确路径匹配,发现
/test
正好被
servletA
精确匹配,那么就去调用
servletA
,也不会去理会其他的
servlet
了。
<o:p></o:p>
2.
最长路径匹配。例子:
servletA
的
url-pattern
为
/test/*
,而
servletB
的
url-pattern
为
/test/a/*
,此时访问
http://localhost/test/a
时,容器会选择路径最长的
servlet
来匹配,也就是这里的
servletB
。
<o:p></o:p>
3.
扩展匹配,如果
url
最后一段包含扩展,容器将会根据扩展选择合适的
servlet
。例子:
servletA
的
url-pattern
:
*.action<o:p></o:p>
4.
如果前面三条规则都没有找到一个
servlet
,容器会根据
url
选择对应的请求资源。如果应用定义了一个
default servlet
,则容器会将请求丢给
default servlet
(什么是
default servlet
?后面会讲)
。
<o:p></o:p>
|
根据这个规则表,就能很清楚的知道
servlet
的匹配过程,所以定义
servlet
的时候也要考虑
url-pattern
的写法,以免出错。
<o:p></o:p>
对于
filter
,不会像
servlet
那样只匹配一个
servlet
,因为
filter
的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个
filter
。
Filter
的处理顺序和
filter-mapping
在
web.xml
中定义的顺序相同。
<o:p></o:p>
二,url-pattern
详解
<o:p></o:p>
在
web.xml
文件中,以下语法用于定义映射:
l
以
”/’
开头和以
”/*”
结尾的是用来做路径映射的。
l
以前缀
”*.”
开头的是用来做扩展映射的。
l
“/”
是用来定义
default servlet
映射的。
l
剩下的都是用来定义详细映射的。比如:
/aa/bb/cc.action
所以,为什么定义
”/*.action”
这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。
分享到:
相关推荐
乐普转换软件是一款专为单片机开发设计的实用工具,尤其对于电子工程师和爱好者来说,它具有重要的价值。在单片机开发过程中,经常...对于那些热衷于单片机编程和硬件设计的工程师来说,这确实是个不可多得的好工具。
通过深入理解指针和类型转换,程序员能够更好地控制程序的内存管理,编写更高效、灵活的代码。这包括动态内存分配、内存管理、数据结构实现(如链表、树)以及高级算法设计。熟练掌握这些概念是成为优秀C/C++程序员...
- `#define MAXCHAR 101`: 定义了一个常量`MAXCHAR`,用于表示字符串的最大长度。 - `int source;`: 用户输入的原始进制。 - `int object;`: 用户希望转换的目标进制。 - `int length;`: 转换后字符串的长度。 - `...
"好东西大家分享,很使用而且很超值的PPT模板"这个标题暗示了这是一份精选的PPT模板集合,具有高质量和实用性,并且可能价格适中或者免费,使得用户能够以较低的成本提升他们的演示文稿质量。 描述中的重复信息"好...
ASA教程 ,明教教主出品,教主绝密资料,绝对好东西。一看就懂,五个文件,五天玩转ASA。 教主V5 87
标题中的“这一定是一个很的好东西”虽然没有明确指出具体是什么,但从标签“好”以及压缩包文件名称“web”可以推测,这可能是指一个与Web技术相关的优质资源或者工具。在IT行业中,Web技术是一个广泛且重要的领域...
这个“cad自学课件绝对好东西”压缩包文件显然包含了用于自我学习CAD的相关材料,对于想要掌握CAD技能的人来说是一份宝贵资源。 在CAD自学过程中,通常会涉及以下几个关键知识点: 1. **CAD基础操作**:包括启动和...
"解Yx模板_好东西_"这个标题暗示我们这里有一个模板,可能用于编程或者数据分析,而"好东西"这个标签则表明它具有较高的实用价值。尽管描述中的信息较为模糊,但我们可以根据提供的压缩包子文件的文件名称来推测一些...
【标题】:“压缩软件好东西” 在这个信息化时代,压缩软件成为了我们日常工作中不可或缺的工具,尤其是在文件传输和存储方面。标题中的“压缩软件好东西”简单地表达了对这类软件的高度评价。压缩软件能够将大体积...
【标题】"8人抢答器 这是一个好东西哦" 这个项目是一个设计用于8名参赛者的抢答系统,其主要目的是在竞赛或问答活动中,确保公平竞争,让每个参与者都有平等的机会来回答问题。从提供的文件列表来看,我们可以推测...
5. **教育**:在教学环境中,ASCII码转换工具可以帮助学生更好地理解字符编码和二进制系统。 总的来说,"ASCII转换工具"是一个实用的辅助工具,能够方便用户在ASCII码和字符之间进行快速转换,并提供了一些额外的...
在描述中提到的"好软件,十分实用,可以转换很多东西",这正是"格式工厂"的核心优势。它具备了强大的兼容性,能够处理市面上常见的多媒体文件格式,如MP4、AVI、WMV、MP3、WAV、JPEG、PNG等。对于那些在不同设备或...
在IT行业中,文件格式转换是一种常见的需求,特别是在处理文档、演示文稿和文本时。以下是一些关于如何在Word、PDF、PPT和TXT之间进行转换的知识点: 1. **PPT转Word**: - **大纲视图法**:在PPT中选择“大纲”...
- 无法确定真假的陈述句:如“未来会更好。” ### 2. 简单命题与复合命题 - **简单命题**:不包含其他命题的命题称为简单命题。简单命题只包含一个基本的事实或判断,没有其他的逻辑结构。例如:“今天是星期五。...
### 单片机好程序好东西 #### 一、Atmega16寄存器概述 在探讨Atmega16寄存器之前,我们先来了解下什么是寄存器。寄存器是微处理器中的高速存储单元,用于临时保存指令、数据和中间结果等。对于Atmega16这样的AVR...
标题中的“编译程序 好东西”暗示了我们讨论的是与编译技术相关的知识,而编译程序是将高级编程语言转换为机器语言的重要工具。在这个过程中,我们需要理解一些核心概念,比如文法、符号表、推导以及跟隨集合...
完美的中文支持和原始版面转换,基本做到了百分百的原汁原味,转换的效果绝对好于SolidDocument和论坛之前看到的几个工具,好东西不得不分享。 绿色汉化版,无插件、无病毒,放心使用,附转换效果图 目前唯一发现的...
想把PDF文件里的好东西复制下来是一件很让人头疼的问题,现在有了这款PDF转DOC文档工具,问题就迎刃而解了。是一款非常好用的PDF转换工具,可以快速将PDF文件转换为doc(word文档)和RTF文件,还能够保留全部特性...
标题中的“把autocad转为pdf的好东西”指的是将AutoCAD设计的DWG或DXF格式文件转换成便携式文档格式(PDF)的过程。AutoCAD是一款广泛使用的计算机辅助设计软件,主要用于二维和三维图形设计。而转换为PDF文件可以...
此外,"你也可以在view上添加东西"意味着用户不仅可以翻转图片,还可以在同一个view上添加其他UI元素,如按钮、标签等,使得整个界面更丰富。这样可以创建出交互性更强的应用,用户在欣赏翻转图片的同时,也能进行...