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

在Tomcat7中部署Spring Boot war包报NoClassDefFoundError如何解决

问题根因

你当前使用的Spring Boot 2.5.4版本最低要求Servlet API 3.1及以上版本,而Tomcat 7.0.76属于Tomcat 7.x系列,最高仅支持Servlet API 3.0,报错中缺失的javax.servlet.http.HttpSessionIdListener是Servlet 3.1版本才新增的接口,因此运行时会抛出类找不到异常。
同时Spring Boot 2.x从2.0版本开始就已经正式废弃了对Tomcat 7的支持,官方兼容的最低Tomcat版本为8.5。你不愿意更换Tomcat版本的情况下,只需将Spring Boot版本降级至1.5.x系列即可,这是最后一个支持Tomcat 7的Spring Boot维护版本。

修复步骤
  • 调整Spring Boot父依赖版本,将spring-boot-starter-parent的版本修改为1.5.x最终稳定版1.5.22.RELEASE,该版本兼容JDK 8和Tomcat 7,修改后的parent配置如下:
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.22.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
  • 清理pom.xml中多余的Servlet相关依赖,删除你手动添加的javax.servlet-api、jsp-api、javax.el-api这三个依赖,Spring Boot 1.5.x的web启动器已经内置了匹配Servlet 3.0的对应传递依赖,且scope默认为provided,不会打入WAR包和Tomcat自带的依赖产生冲突。
  • 删除项目中的web.xml配置文件,Spring Boot的WAR包部署无需手动配置DispatcherServlet,默认自动配置已覆盖该逻辑,额外配置反而会导致请求映射冲突。
  • 保证项目启动类继承SpringBootServletInitializer并重写configure方法,示例代码如下:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
public class VisualizerApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(VisualizerApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(VisualizerApplication.class, args);
    }
}
  • 执行mvn clean package重新打包,将生成的WAR包放入Tomcat 7的webapps目录下启动即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:27:02