前言

最近的项目需要用到无后缀匹配,譬如,要匹配 /index 到 一个控制器上面,所以找了些资料来实践。
下面是参考用的资料:
spring mvc url匹配禁用后缀访问

url-pattern中/与/*的区别SpringMvc出现Jsp页面不能正常解析成html网页

原springmvc默认忽视后缀的映射规则

好了,下面针对三种不同的url匹配规则说明一下不同点。

注意,同时说明一下,在spring-mvc.xml中,

每一种情况下,默认:

springmvc 路径最优匹配 spring url匹配_jsp解释异常


path-matching suffix-pattern 不设置

default-servlet-handler 不设置
为了这个测试,特意写了一个测试用action,如下

springmvc 路径最优匹配 spring url匹配_springmvc 路径最优匹配_02

下面开始

url-pattern="*.do"

先从最正常的情况说起来,设置为针对后缀为do的路径进行拦截。

如下:

springmvc 路径最优匹配 spring url匹配_springmvc 路径最优匹配_03


分别访问mvc中的action,网站index.jsp首页,静态资源-404图片

### action输出json

springmvc 路径最优匹配 spring url匹配_spring mvc_04

### action带jsp模板

springmvc 路径最优匹配 spring url匹配_禁用后缀_05

index.jsp

springmvc 路径最优匹配 spring url匹配_禁用后缀_06

静态资源

springmvc 路径最优匹配 spring url匹配_后缀_07

url-pattern = “/*”

springmvc 路径最优匹配 spring url匹配_spring mvc_08

下面开始测试访问:

### action输出json

分别测试无后缀以及任意后缀,有:

springmvc 路径最优匹配 spring url匹配_jsp解释异常_09

springmvc 路径最优匹配 spring url匹配_springmvc 路径最优匹配_10

可匹配。

### action带jsp模板

springmvc 路径最优匹配 spring url匹配_后缀_11


无法访问,同时后台报错:

springmvc 路径最优匹配 spring url匹配_spring mvc_12

找不到模板。。。

index.jsp

springmvc 路径最优匹配 spring url匹配_后缀_13

同时后台报错:

springmvc 路径最优匹配 spring url匹配_禁用后缀_14


无法匹配到index.jsp

静态资源

springmvc 路径最优匹配 spring url匹配_后缀_15

同时:

springmvc 路径最优匹配 spring url匹配_jsp解释异常_16

/*的结论

url-pattern="/*"会托管一切请求,只有匹配到控制器中的action才返回返回结果,否则一切都是404,当然,如果action里面也要用到jsp等模板,那么也是会报404的。

url-pattern=/ 的场景

springmvc 路径最优匹配 spring url匹配_jsp解释异常_17

测试:

### action输出json

分别测试无后缀以及任意后缀,有:

springmvc 路径最优匹配 spring url匹配_jsp解释异常_09

springmvc 路径最优匹配 spring url匹配_springmvc 路径最优匹配_10

可匹配。

### action带jsp模板

springmvc 路径最优匹配 spring url匹配_springmvc 路径最优匹配_20

index.jsp

springmvc 路径最优匹配 spring url匹配_jsp解释异常_21

静态资源

springmvc 路径最优匹配 spring url匹配_后缀_15

同时:

springmvc 路径最优匹配 spring url匹配_jsp解释异常_16

url-pattern=/ 小结

可以看到,这种模式下面,不会托管所有路径,起码,jsp不会接过来托管,能够正常解释。

不过图片资源还是访问不到,正常,图片资源需要启用

springmvc 路径最优匹配 spring url匹配_jsp解释异常_24

默认的servlet处理器

下面开启默认的servlet处理器看看结果:

ps:为什么*.do里面不启用默认servlet处理静态资源也可以访问?因为那种情况下只拦截后缀为.do的路径,不拦截处理图片。

开启default-servlet-handler后额外注意问题。

开启以后,

springmvc 路径最优匹配 spring url匹配_后缀_25

注意,url-pattern="/*"情况下面对jsp的处理跟静态资源是一样的:

1/

springmvc 路径最优匹配 spring url匹配_后缀_26

然后:

springmvc 路径最优匹配 spring url匹配_springmvc 路径最优匹配_27


springmvc 路径最优匹配 spring url匹配_springmvc 路径最优匹配_28

结论

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

springmvc 路径最优匹配 spring url匹配_springmvc 路径最优匹配_29

springmvc 路径最优匹配 spring url匹配_禁用后缀_30