升级tomcat7遇到的加载静态资源报400的问题

一、问题描述

使用IE11时会出现此类问题,chrome没有这种问题

经分析If-None-Match中值传到后台有中文双引号导致验证不通过,

因此需要修改tomcat的源码,将中文双引号替换成英文双引号。

主要参考:升级tomcat导致静态资源报错400_httxiao的博客-CSDN博客_tomcat启动静态资源出错

手动编译Tomcat7源码_醉欲眠卿且去的博客-CSDN博客_tomcat7源码编译

 

二、下载Tomcat7源码编译

  1. 下载Tomcat源码地址:http://archive.apache.org/dist/tomcat/tomcat-7/

  2. 下载Ant编译工具:https://ant.apache.org/bindownload.cgi

  3. 修改build.properties文件:

    1. 复制F:\000\apache-tomcat-7.0.109-src\build.properties.default为复制F:\000\apache-tomcat-7.0.109-src\build.properties用于打包

    2. 修改build.propertiesbase.path字段为自定义的一个目录base.path=F:/000/tomcat-build-libs,该目录用于存储ant下载的依赖包

  4. 执行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

posted @ 2022-10-31 14:20  tongyongliang  阅读(480)  评论(0编辑  收藏  举报