<b>Servlet和Filter的url匹配url-pattern</b>[Java编程]
本文“<b>Servlet和Filter的url匹配url-pattern</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Servlet和filter是J2EE开辟中常用的技术,利用便利,配置简单,老少皆宜.
预计大大都朋友都是直接配置用,也没有关心过具体的细节,本日碰到一个问题,上网查了servlet的标准才发现,servlet和filter中的url-pattern还是有一些文章在里面的,总结了一些东西,放出来供大家参考,免得碰到问题又要浪费时间.
1、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中定义的次序相同.
2、url-pattern详解
在web.xml文件中,以下语法用于定义映射:
以”/’开首和以”/*”末尾的是用来做途径映射的.
从前缀”*.”开首的是用来做扩大映射的.
”是用来定义default servlet映射的.
剩下的都是用来定义具体映射的.比方: /aa/bb/cc.action
所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于途径映射,也属于扩大映射,招致容器无法判断.
以上是“<b>Servlet和Filter的url匹配url-pattern</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |