升级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
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 15天流量破10万,免费拼图工具的毕业典礼是被抄袭
· 从硬盘爆满到 GitHub 封号,一位前端开发者的开源历险记
· 微软又一自动化开源王炸,Selenium 慌了!
· 微服务的10大问题
· 分享一个 ProHub 风格 logo 生成器
2016-10-31 angularjs的几种常见写法