前言
最近的项目需要用到无后缀匹配,譬如,要匹配 /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/

然后:


结论
所以,最后的结论是,要开启无后缀访问,最佳的方法是:


本文详细解析了SpringMVC中的URL匹配规则,包括针对特定后缀(如.do)、一切请求(/*)及特定路径(/)的匹配方式。通过实例展示了不同规则下action、jsp页面及静态资源的访问效果,揭示了default-servlet-handler的作用。


930

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



