servlet的url-pattern匹配规则

2020-05-20  本文已影响0人  水煮鱼又失败了

目录

[TOC]

1. 说明

(1)servlet容器中url-pattern匹配规则不是简单的字符串匹配,也不是正则表达式匹配,而是通过特定的规则进行匹配(匹配优先级、完全匹配、长路径匹配优先、特殊默认匹配等规则)

(2)servlet2.5开始,一个servlet可以有多个url-pattern规则。

(3)参与路径匹配的是容器收到的请求去掉当前应用上下文后字符串。如收到的url请求时http://localhost:8080/sa-admin/user/getUserList,其应用名称是sa-admin,应用的上下文路径是http://localhost:8080/sa-admin,故用来做serlvet映射匹配的字符串是:/user/getUserList(注意,前面带有/)。

(4)当有一个servlet匹配成功后,其他的servlet不会再处理请求。

2. 匹配规则

2.1 精准匹配

url-pattern中的配置,必须与url完全精准匹配

完全精准匹配,指的是字符串必须完全一样。如映射路径为/user/userAdd,则请求url为/user/userAdd/,后面多一个/是无法完全精准匹配到servlet的。

如:

/user/userAdd

2.2 路径匹配

以"/"字符串开头,并以"/*"结尾的路径匹配

先最长路径匹配,再最短路径匹配。

如:

/user/*
/*

2.3 扩展名匹配

以"*."开头的匹配路径

如:

*.action
*.jpg
*.jsp

2.4 缺省匹配

固定路径"/",当前所有的匹配规则都无法匹配到路径时,会执行缺省匹配对应的servlet

3. 匹配顺序(重要)

精准匹配 > 路径匹配 > 扩展名匹配 > 缺省匹配

4. 注意问题

4.1 “路径匹配”和“扩展名匹配”不可同时设置。

正确的设置只能是如下,其他的均为非法,而且如果合法,出现在非指定位置的"*",会作为普通字符串处理:

(1)精确匹配

(2)以"/"开头,以"/*结尾"

(3)以"*."开头

/user/*.action是非法的。
/user/*/userAdd是精确匹配,合法,此处的*代表的是字符串中的"*",而不是通配符。

4.2 "/*"和"/"含义的区别

上一篇 下一篇

猜你喜欢

热点阅读