spring mvc 项目部署在 tomcat8.5.x ie浏览器f5刷新出现静态资源400的问题

1. 问题

近期项目迁移,更改了tomcat的版本,项目部署到服务器上后,使用ie发现浏览器没有缓存时一切正常,如果f5刷新就会出现加载静态资源失败,开发者工具捕获具体请求发现加载的静态资源包含 Last-Modified 和 If-Modified-Since 说明是读取了缓存 但是返回的状态是400。

2.问题解决方法

项目中的web.xml 中配置了servlet导致其覆盖了tomcat的web.xml中的相关配置:
在这里插入图片描述
导致项目中所有的请求都会经过spring servlet,spring3以后为用户提供了访问静态资源的方法

  1. 声明在dispatcher-servlet.xml中 增加 mvc:default-servlet-handler/
  2. 使用静态资源映射
    <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版权协议,转载请附上原文出处链接和本声明。