url-parttern 配置规则
servlet-mapping和filter-mapping的路径映射路径中,前端发起数据的请求后,传到后台,会根据匹配相应的处理方法。servlet容器接收到浏览器发起url请求后,容器会将url路径地址减去当前项目的上下文路径,然后将剩下的字符串作为路径映射。比如: 收到url路径为http://localhost:8080/demo/adduser,而当前的项目上下文路径为/demo,那么剩下的路径映射为 : /adduser,容器将 寻找与/adduser匹配的url-pattern
一. 精确匹配
-
精确匹配要求请求url和url-pattern配置项完全一致。
-
举个栗子,url-pattern配置为:
<servlet-mapping> <servlet-name>targetServlet</servlet-name> <url-pattern>/user/adduser.action</url-pattern> </servlet-mapping>
那么以下url可以匹配到该路径:
http://localhost:8080/demo/user/adduser.action
(注意,这里/demo是项目上下文路径,下同)
二. 路径匹配
-
匹配以 “/” 字符开头,并以 “/*”结尾的路径
-
举个栗子,url-pattern配置为:
<servlet-mapping> <servlet-name>targetServlet</servlet-name> <url-pattern>/user/*</url-pattern> </servlet-mapping>
那么以下路径均可以匹配到:
http://localhost:8080/demo/user/adduser.action
http://localhost:8080/demo/user/users.html
三. 后缀匹配
-
后缀匹配以“.”结尾,匹配到所有带有后缀的url路径
-
举个栗子,url‘配置为:
<servlet-mapping> <servlet-name>targetServlet</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.html</url-pattern> </servlet-mapping>
以上的配置会匹配到所有以.jsp和.html结尾的路径:
四. 缺省匹配
- 缺省形式只有一例,如下:
<servlet-mapping>
<servlet-name>targetServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
这时targetServlet会匹配除带有后缀的所有的url路径,以下路径均可以匹配到:
http://localhost:8080/demo/user/adduser
http://localhost:8080/demo/user/users/list
http://localhost:8080/demo/sys/user/update
注意,不能匹配以下路径:
http://localhost:8080/demo/user/adduser.action
http://localhost:8080/demo/user/users.html
http://localhost:8080/demo/user/update.jsp
五. 注意事项
-
匹配顺序
-
优先级大到小为: 精确匹配>路径匹配>后缀匹配>缺省匹配
-
对于路径匹配,url会匹配到url-pattren的最长路径
-
-
路径匹配和的后缀匹配不能同时组合设置。“*”不是通配符,不能将路径配置看作正则表达式。
以下配置都是错误的:
/aa/*/bb
/aa/*.jsp
-
/* 和 / 的含义不相同
-
/* 会匹配到所有的request,仅次于精确匹配,会覆盖所有的后缀匹配(精确匹配会覆盖路径匹配)。一般用于过滤器,如果用于servelet映射,会导致前端无法访问服务器资源文件(诸于.jsp .html .js文件)。
-
/ 是缺省匹配形式,优先级最低,不会覆盖其他任何urlpattern,只会覆盖servlet内置default-servlet,对任何request请求都有可能匹配到。
-
servlet有内置的“.jsp”匹配器(后缀匹配形式),后缀匹配优先级高于缺省匹配,所以 会出现以下情况:
在使用缺省配置/ 后,会拦截http://localhost:8080/appDemo/user/addUser类似的请求,但是不会拦截到http://localhost:8080/appDemo/user/index.jsp
-