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

Spring Boot应用本地运行正常但部署至Apache Tomcat/7.0.76启动失败求助

问题分析与解决方案

从你提供的错误日志和配置来看,核心问题是Spring Boot 2.5.4 与 Apache Tomcat 7.0.76 版本不兼容,具体原因如下:

Tomcat 7.x 仅支持 Servlet 3.0 规范,而 HttpSessionIdListener 是 Servlet 3.1 才新增的接口——你看到的NoClassDefFoundError就是因为Tomcat 7自带的Servlet API中没有这个类。而Spring Boot 2.5.x系列最低要求Servlet 3.1+,这直接导致了部署启动失败。

你之前添加的javax.servlet-api依赖没解决问题,是因为Tomcat会优先使用自身内置的Servlet API,而且如果不将该依赖的scope设为provided,打包时会把它加入WAR包,反而可能引发类加载冲突。

可行解决方案

方案一:降级Spring Boot版本到兼容Tomcat7的系列

Spring Boot 2.3.x是最后一个支持Servlet 3.0(对应Tomcat7)的稳定版本,你可以修改pom.xml中的parent版本:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.12.RELEASE</version> <!-- 替换为2.3.x稳定版 -->
    <relativePath/>
</parent>

同时调整servlet-api依赖的scope,避免冲突:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version> <!-- 对应Servlet3.0版本 -->
    <scope>provided</scope> <!-- 让Tomcat提供该依赖 -->
</dependency>

修改完成后,重新执行mvn clean install打包WAR,再部署到Tomcat7即可。

方案二:升级Tomcat到8.0及以上版本

Tomcat 8.x及以上版本支持Servlet 3.1规范,完全兼容Spring Boot 2.5.x的要求。升级后无需修改Spring Boot项目配置,直接部署原WAR包即可解决问题。

额外提醒

  • 确认部署Tomcat的机器Java版本(你当前的Java 1.8是符合要求的,Spring Boot 2.5.x和2.3.x都支持Java8)。
  • 部署前可以先清理Tomcat的webapps目录下的旧文件和work目录,避免残留缓存影响启动。

内容的提问来源于stack exchange,提问作者Anuska

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:59:09