前言
最近的项目需要用到无后缀匹配,譬如,要匹配 /index 到 一个控制器上面,所以找了些资料来实践。
下面是参考用的资料:
spring mvc url匹配禁用后缀访问
url-pattern中/与/*的区别
SpringMvc出现Jsp页面不能正常解析成html网页
好了,下面针对三种不同的url匹配规则说明一下不同点。
注意,同时说明一下,在spring-mvc.xml中,
每一种情况下,默认:
1
path-matching suffix-pattern 不设置
2
default-servlet-handler 不设置
为了这个测试,特意写了一个测试用action,如下
下面开始
url-pattern="*.do"
先从最正常的情况说起来,设置为针对后缀为do的路径进行拦截。
如下:
分别访问mvc中的action,网站index.jsp首页,静态资源-404图片
### action输出json
### action带jsp模板
index.jsp
静态资源
url-pattern = “/*”
下面开始测试访问:
### action输出json
分别测试无后缀以及任意后缀,有:
可匹配。
### action带jsp模板
无法访问,同时后台报错:
找不到模板。。。
index.jsp
同时后台报错:
无法匹配到index.jsp
静态资源
同时:
/*的结论
url-pattern="/*"会托管一切请求,只有匹配到控制器中的action才返回返回结果,否则一切都是404,当然,如果action里面也要用到jsp等模板,那么也是会报404的。
url-pattern=/ 的场景
测试:
### action输出json
分别测试无后缀以及任意后缀,有:
可匹配。
### action带jsp模板
index.jsp
静态资源
同时:
url-pattern=/ 小结
可以看到,这种模式下面,不会托管所有路径,起码,jsp不会接过来托管,能够正常解释。
不过图片资源还是访问不到,正常,图片资源需要启用
默认的servlet处理器
下面开启默认的servlet处理器看看结果:
ps:为什么*.do里面不启用默认servlet处理静态资源也可以访问?因为那种情况下只拦截后缀为.do的路径,不拦截处理图片。
开启default-servlet-handler后额外注意问题。
开启以后,
注意,url-pattern="/*"情况下面对jsp的处理跟静态资源是一样的:
1/
然后:
结论
所以,最后的结论是,要开启无后缀访问,最佳的方法是: