You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot应用请求处理报错:无法打开Zip文件,求助定位问题

解决SpringBoot应用中Tomcat处理请求时的ZipException错误

我有一个SpringBoot应用,在查看日志时发现如下请求处理错误,无法确定问题来源:

2018-01-30 11:08 [http-nio-1234-exec-1] ERROR o.a.coyote.http11.Http11Processor - 处理请求出错
java.lang.IllegalStateException: java.util.zip.ZipException: 打开zip文件出错
at org.apache.catalina.webresources.JarWarResourceSet.getArchiveEntries(JarWarResourceSet.java:133)
at org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:256)
at org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:281)
at org.apache.catalina.webresources.CachedResource.validateResource(CachedResource.java:97)
at org.apache.catalina.webresources.Cache.getResource(Cache.java:69)
at org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:216)
at org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:206)
at org.apache.catalina.mapper.Mapper.internalMapWrapper(Mapper.java:1027)
at org.apache.catalina.mapper.Mapper.internalMap(Mapper.java:842)
at org.apache.catalina.mapper.Mapper.map(Mapper.java:698)
at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:679)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)

从你贴的错误日志来看,核心问题是java.util.zip.ZipException: 打开zip文件出错,这是SpringBoot内嵌的Tomcat在尝试读取Web资源中的Jar/War文件时遇到了损坏、权限不足或者缓存异常的情况。下面是我整理的排查步骤和解决办法,按优先级尝试:

1. 排查依赖Jar包是否损坏

这是最常见的诱因,Maven/Gradle在下载依赖时可能因为网络波动导致Jar包不完整。

  • 解决步骤:
    • 清空本地Maven仓库(默认路径~/.m2/repository)或Gradle缓存(默认~/.gradle/caches)中你项目对应的依赖目录
    • 重新执行mvn clean install(Maven)或者gradle clean build(Gradle),让构建工具重新下载完整的依赖
    • 可以用jar -tf your-dependency.jar命令检查Jar包完整性,如果执行时报错,说明这个Jar确实损坏了

2. 清理Tomcat临时缓存文件

内嵌Tomcat会在系统临时目录生成缓存的Web资源文件,这些文件一旦损坏就会触发读取错误。

  • 解决步骤:
    • 先停止你的SpringBoot应用
    • 找到系统临时目录里的tomcat.*文件夹(Linux一般在/tmp下,Windows在C:\Users\你的用户名\AppData\Local\Temp下),直接删除
    • 重新启动应用,Tomcat会自动重建这些缓存文件

3. 检查文件权限

如果应用运行的用户没有权限读取依赖Jar包或者Tomcat临时目录,也会导致无法打开Zip文件。

  • 解决步骤:
    • 检查项目依赖目录下的Jar包权限,确保运行应用的用户拥有读权限
    • 检查Tomcat临时目录的权限,确保运行用户有读写权限

4. 重新打包应用(针对FatJar)

如果你的项目用了SpringBoot默认的FatJar打包方式,打包过程中可能出现Jar合并错误导致最终的应用Jar损坏。

  • 解决步骤:
    • 执行mvn clean package -DskipTests跳过测试重新打包,避免测试阶段的干扰
    • 用java -jar your-app.jar直接启动打包后的Jar,验证是否能正常运行,排除打包问题

验证解决效果

完成上述步骤后,启动应用并发送请求,查看日志是否还有该错误。如果问题依旧,可以尝试替换Tomcat版本(在SpringBoot的pom.xml或build.gradle中指定不同的Tomcat版本),排查是否是Tomcat版本的兼容性问题。

内容的提问来源于stack exchange,提问作者Ramon De Les Olives

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:35:31