filter 和servlet的url匹配关系

1、filter由于是filter chain的形式,因此,会对所有符合要求的url逐个匹配filter,然后逐个执行(按filter在web.xml中出现的顺序)

 其匹配规则是,严格按url字符(区分字母大小写)来匹配,有两个例外:

/* 匹配从此点以后的任何字符;*.扩展名 则匹配任何有此扩展名的文件名。

例如:
服务器 example.com 的路径 /examples下的匹配模式<url-pattern>/status/*</url-pattern> 可有如下匹配:
http ://example.com/examples/status/synopsis
http ://example.com/examples/status/complete?date=today
http ://example.com/examples/status

不匹配:
http ://example.com/examples/server/status

服务器 example.com 的路径 /examples下的匹配模式<url-pattern>*.map</url-pattern> 可有如下匹配:
http ://example.com/examples/US/Oregon/Portland.map
http ://example.com/examples/US/Washington/Seattle.map
http ://example.com/examples/Paris.France.map

不匹配
http ://example.com/examples/US/Oregon/Portland.MAP
    //扩展名为大写
http ://example.com/examples/interface/description/mail.mapi
    //扩展名是mapi 而不是 map

2、对于给定的url,只会匹配一个servlet,对于同一url可以匹配多个<servlet-mapping>的情况,会根据servlet的url匹配规则选择合适

    的servlet进行匹配,具体规则如下:

      1〉严格匹配优先于带 * 的匹配;
      2〉最长pattern优先于其他pattern;
      3〉路径匹配优先于文件类型匹配;
      4〉pattern <url-pattern>/</url-pattern> 总是匹配没有其他pattern匹配的request。

例如:
web.xml文件可能将在线目录的首页映射给一个pattern,而将在线目录的查询页映射给另一个pattern :

<servlet-mapping>
<servlet-name>catalogBrowse</servlet-name>
<url-pattern>/Catalog/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>catalogSearch</servlet-name>
<url-pattern>/Catalog/search/*</url-pattern>
</servlet-mapping>

由于最长pattern优先于其他pattern,包含/Catalog/search/的URL总是映射到catalogSearch,而不是catalogBrowse。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值