1. 问题
近期项目迁移,更改了tomcat的版本,项目部署到服务器上后,使用ie发现浏览器没有缓存时一切正常,如果f5刷新就会出现加载静态资源失败,开发者工具捕获具体请求发现加载的静态资源包含 Last-Modified 和 If-Modified-Since 说明是读取了缓存 但是返回的状态是400。
2.问题解决方法
项目中的web.xml 中配置了servlet导致其覆盖了tomcat的web.xml中的相关配置:
导致项目中所有的请求都会经过spring servlet,spring3以后为用户提供了访问静态资源的方法
- 声明在dispatcher-servlet.xml中 增加 mvc:default-servlet-handler/
- 使用静态资源映射
<mapping<mvc:resources mapping="/static/js/" location="/static/js/" />
<mvc:resources mapping="/static/css/" location="/static/css/"/>
<mvc:resources mapping="/static/images/**" location="/static/images/"/>
第一种方法是 将无法mapping到Controller的path交给default servlet handler处理,但遇到tomcat8.5.x刷新缓存会失效。
那么使用第二种方法,当浏览器请求静态资源时直接映射到具体文件范围,解决此bug
参考文章
1.https://bz.apache.org/bugzilla/show_bug.cgi?id=64816
2.Tomcat处理静态文件DefaultServlet分析
后记: 具体是什么原因导致加载缓存时返回400还需各位大神指教,希望这个方案对大家有实用帮助
版权声明:本文为weixin_43995510原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。