升级tomcat7遇到的加载静态资源报400的问题
一、问题描述
使用IE11
时会出现此类问题,chrome
没有这种问题
经分析If-None-Match
中值传到后台有中文双引号导致验证不通过,
因此需要修改tomcat的源码,将中文双引号替换成英文双引号。
主要参考:升级tomcat导致静态资源报错400_httxiao的博客-CSDN博客_tomcat启动静态资源出错
手动编译Tomcat7源码_醉欲眠卿且去的博客-CSDN博客_tomcat7源码编译
二、下载Tomcat7源码编译
-
下载Tomcat源码地址:http://archive.apache.org/dist/tomcat/tomcat-7/
-
下载Ant编译工具:https://ant.apache.org/bindownload.cgi
-
修改
build.properties
文件:-
复制F:\000\apache-tomcat-7.0.109-src\build.properties.default为复制F:\000\apache-tomcat-7.0.109-src\build.properties用于打包
-
修改
build.properties
中base.path
字段为自定义的一个目录base.path=F:/000/tomcat-build-libs
,该目录用于存储ant下载的依赖包
-
-
执行ant命令编译(命令行窗口源码目录下)
此时会报错找不到文件
trydownload:
[checksum] Could not find file F:\000\tomcat-build-libs\download-2002351891.tar.gz to generate checksum for.
我一直以为是url访问不通,所以将build.properties中的base-apache.loc.1=https://www.apache.org/dyn/closer.lua?action=download&filename=
中https修改为http就会报如下图的错误
因此定位到问题为JDK6
没有对TSL1.2
的支持导致https的请求没法使用,所以更换JDK环境变量为JDK8
就运行成功了,jar包也下载下来了
然后切换JDK6
清理编译目录再进行编译即可,因为jar已经下载下来所以不会再去下载了
三、修改tomcat源码处理If-None-Match
的源码
文件目录F:\000\apache-tomcat-7.0.109-src\java\org\apache\catalina\servlets\DefaultServlet.java
//将中文双引号“替换成英文双引号" 解决静态资源加载400错误 headerValue=If-None-Match:W/“12760-1620797922000“ resourceETag=W/"12760-1620797922000" 不匹配
char headerValueArr[] = headerValue.toCharArray();
for(int i=0;i<headerValueArr.length;i++){ //8220 “ 34 "
if(headerValueArr[i]==8220){
headerValueArr[i]=34;
}
}
headerValue = new String(headerValueArr);
已经替换完成的catalina.jar
,版本tomcat7.0.109
链接:https://pan.baidu.com/s/1oZNKEnzGmVVgckH8fYRLCQ?pwd=awuj
提取码:awuj