如何区别这些路径匹配规则
作为一个java小白(*__*) 嘻嘻,最近在学习,查询了一下还是不大明白,然后(还是自己动手实验吧 好嗨哟!!)根据日常在这记录一下
精准路径匹配:/abc/test.do
部分路径匹配:/abc/*
路径匹配(匹配所有路径):/*
后缀名匹配:*.do
缺省匹配:/

同时设置五种匹配规则
按顺序先后输入网址
1.http://localhost:8080/myapp/test/test.do (test/test.do 精准匹配)
2.http://localhost:8080/myapp/test/test2.do (test/* 部分路径匹配)
3.http://localhost:8080/myapp/test2/test2.do (/* 路径匹配(匹配所有路径))
4.http://localhost:8080/myapp/test2/test2.png (/* 路径匹配(匹配所有路径))
控制台打印servlet所接收的顺序如图
由这里得出匹配的顺序 精准路径匹配>部分路径匹配>路径匹配(路径匹配了“/*”表示所有 后面的3和4网址的匹配路径等级都比“/*”低 ,优先匹配上了“/*” )
接下来注释掉 为“/*” 的servlet ,再次输入
http://localhost:8080/myapp/test2/test2.do (*.do 后缀名匹配)
http://localhost:8080/myapp/test2/test2.png (/ 缺省匹配)

得出 后缀名匹配>缺省匹配
最后结论: 精准路径匹配>部分路径结合通配符匹配>路径匹配(匹配所有路径)>后缀名匹配>缺省匹配
``
那么问题来了好像 / 和 /* 都可以匹配所有请求,有啥区别捏, 个人觉的就是 /* 匹配等级高点像什么带后缀的也会被匹配进来 例如本该交由tomcat的 .jsp也会被匹配进来,但是程序中又没有对应的处理方法,会报404这样的错误。
而配成 / 的话,后缀名匹配等级较大 所以不会匹配 / 而是会优先匹配 tomcat的web.xml中的.jsp 交由tomcat处理。
一般只有过滤器才会设置成/*
在springmvc框架中 DispatcherServlet一般设置为 <url-pattern>/</url-pattern> 这样jsp不会被匹配但是动作可以匹配
SpringMVC的interceptor拦截器的匹配规则。
<mvc:mapping path="/*"/> 拦截的是webapp根目录下的一些文件,而不能拦截webapp/xx/xx.jsp这类子目录中的
<mvc:mapping path="/**"/> 即可以拦截当前目录及其子目录下的所有请求。

这篇博客探讨了Servlet的路径匹配规则,包括精准匹配、部分路径匹配、后缀名匹配和缺省匹配,通过实验展示了不同规则的匹配顺序。文章提到了/*.do和/*的区别,前者匹配所有请求但可能导致404错误,后者优先级较高,常用于过滤器。在SpringMVC中,DispatcherServlet配置为/以避免匹配JSP,而Interceptor主要拦截webapp根目录下的请求。

1510

被折叠的 条评论
为什么被折叠?



