url-pattern配置为"/"和"/*"的区别
最近在学习springMVC框架,对于其前端控制器的过滤配置url-pattern很困惑。遂百度查各种资料,翻阅各种博客,发现每个人的说法都不一样,很多人的理解都是错的!于是找大牛解惑,大牛就是大牛,一下子就让我明白了。
解:首先大家都知道"/*"可以匹配所有url,包括带扩展名的,一般只用在过滤器上。
而"/"很多人理解成不能拦截带扩展名的,这种理解是错误的!它其实也能拦截“.js”,“.css”,".png"等静态资源的访问。
看官方文档可知,它是tomcat的默认servlet,当其他的url-pattern匹配不上时都会走这个servlet。它除了能够处理静态资源还能够处理HTTP缓存请求,媒体(音频/视频)数据流和文件下载简历。所以如果我们的项目中配置了"/",会覆盖掉tomcat中的default servlet。
tomcat服务器的web.xml配置:
所以当springMVC的前端控制器配置为“/”时,需要在主配置文件中配置放行静态资源。
第一种:
<!-- 放行静态资源 -->
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/css/" mapping="/js/**"/>
<mvc:resources location="/images/" mapping="/js/**"/>
第二种:
<mvc:default-servlet-handler />