文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 国产软件 | 国外软件 | 汉化补丁 | 设为首页 | 加入收藏
业界资讯 | 图形图像 | 操作系统 | 网络冲浪 | 工具软件 | 办公软件 | 媒体动画 | 精文荟萃 | 认证考试 | 网站建设 | 技术开发 | 专栏
当前位置:abcdown网络学院程序开发其他语言Servlet和Filter的url匹配url-pattern
精品广告
推荐TOP10
·控制面板知多少
·给你十条学习Ruby语言的理由
·分页管理机制
·Perl 语言的重要价值体现
·经验技巧:分享两条Delphi开发经验
·Java编程思想:面向对象的逻辑思维方法
·Samba系统简介
阅读TOP10
·分页管理机制
·Perl 语言的重要价值体现
·Java编程思想:面向对象的逻辑思维方法
·图象处理中的边缘检测------canny算子
·Samba系统简介
·经验技巧:分享两条Delphi开发经验
·uC/OS-II在S3C44B0X微处理器上的移植
·Readme for the MontaVista* Linux* 3.1 OpenSSL*/OCF and Intel? IXP400 Software v1.4 Integration
·Servlet和Filter的url匹配url-pattern
·通过Rational的工具来实现SOA治理

Servlet和Filter的url匹配url-pattern

日期:2007年8月2日 作者: 查看:[大字体 中字体 小字体]


Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单,老少皆宜。

估计大多数朋友都是直接配置用,也没有关心过具体的细节,今天遇到一个问题,上网查了servlet的规范才发现,servlet和filter中的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文件中,以下语法用于定义映射:

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

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

”是用来定义default servlet映射的。

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

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



上一篇:对比JSF在Eclipse 和 NetBeans中的应用

下一篇:让不同的Servlet在一个Session共享连接


相关软件: 相关文章:
·新概念全套 exe 随课文配有清晰的语音跟读
·PowerStrip(显卡屏幕配置)V3.75 Build 590 Beta 多国语言版
·新编VB6.0 教程配套教学光盘
·Apache服务器配置全攻略
·牛津英语配套光盘 vcd 江苏牛津小学英语配教学光盘3-6年级
·黑客视频教程-手把手教你配置2005破解版灰鸽子
·电脑硬件组装完全DIY手册[配套光盘]
·原汁原味! 办公女郎天蓝坎肩配黑丝袜
·《勇者斗恶龙 怪兽仙境》怪兽交配心得(GBA) - 勇者斗恶龙8攻略秘籍 - 勇者斗恶龙8
·windows 2003服务器配置VPN实现各种网络环境VSS协同开发
·Windows 2003邮件服务器配置指南(图)
·windows2003+iis6.0安装配置实用教程一(带图片)
·[魔兽世界]牧师天赋加点及配点
·windows 无法加载 internet 配置信息库(icfgnt.dll)。发生以下错误:找不到指定的模块

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.abcdown.net
首页 | 本站声明 | 下载帮助 | 发布软件 |
中文版权所有:ABC学院 浙ICP备05000717号