1、什么是url-pattern
简单说 servlet-mapping是用于servlet的路径映射配置,其中url-pattern为指定的映射拦截路径。在SpringMVC中,url-pattern指定了spring需要拦截派发的路径。
如果不符合规则,就会被拦截。这有点像寄信,前端控制器类似邮局,寄信人寄一封信(请求),如果收件人地址(请求路径)符合规则且正确,那么这封信就会被准确投递(访问成功),否则只能退回。至于信件里面有什么内容,要不要回信,由收件人自己去处理。
2、如何设置使用
url-pattern 标签中的值是要在浏览器地址栏中输入的 url,可以自己命名,这个 url 访问名为 servlet-name 中值的 servlet,两个 servlet-name 标签的值必须相同,因为通过 servlet 标签中的 servlet-name 标签映射到 servlet-class 标签中的值,最终访问 servlet-class 标签中的 class。
web.xml 的 / 表示的是http://localhost:8080/ + 工程名
而.jsp页面的action,加了/表示绝对路径http://localhost:8080/ ,没有加 / 表示的是相对路径
servlet和servlet-mapping都含有<servlet-name></servlet-name>
主要原因是想通过servlet-name作为纽带,将servlet-class和url-pattern构成联系,从而使URL映射到类servlet-class所指定的类中!
3、匹配顺序
该标签处理客户端请求的顺序为:
(1)完全匹配
<url-pattern>/test/userList.action</url-pattern>
完全匹配就是等值匹配,它是最先被匹配到的客户端请求。
(2)路径匹配
<url-pattern>/*</url-pattern>
匹配根路径下的全部请求
路径匹配类似于模糊匹配,对于/list、listInfo.do、checkInfo.action、index.jsp、abc.css、my.js等等url请求,都可以被匹配到。这种匹配的顺序排在完全匹配后面。
(3)扩展名匹配
<url-pattern>*.action</url-pattern>
匹配全部action 结尾的请求
<url-pattern>*.css</url-pattern>
匹配全部 css结尾的请求
<url-pattern>*</url-pattern>
不能用 * ,否则报错
说明:这种匹配匹配在开发中用的比较多,但不能使用*代替,否则会报错。
结论:容器会首先查找完全匹配,如果找不到,再查找目录匹配,如果也找不到,就查找扩展名匹配。