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

Spring Boot 2.7.6启动失败:webServerStartStop Bean异常排查

解决Spring Boot 2.7.6启动时JspServlet无法转换为javax.servlet.Servlet的问题

问题根源

Spring Boot 3.x基于Jakarta EE API(包路径jakarta.servlet),而2.7.x基于传统Java EE API(包路径javax.servlet)。版本切换后,若依赖中混入Jakarta版本的Tomcat组件或Servlet API,就会出现类转换异常。

具体解决步骤

  • 强制统一Servlet API与Tomcat组件版本
    在pom.xml的<dependencyManagement>中锁定对应版本(与Spring Boot 2.7.6匹配的Tomcat版本为9.0.68,Servlet API为4.0.1),避免依赖冲突:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>4.0.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
                <version>9.0.68</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  • 清理依赖并排除Jakarta相关依赖

    1. 执行Maven命令清理本地缓存并重新构建:
      mvn clean install -U
      
    2. 用mvn dependency:tree查看依赖树,找到引入jakarta.servlet的第三方依赖,在pom.xml中排除该依赖:
      <dependency>
          <groupId>[第三方依赖groupId]</groupId>
          <artifactId>[第三方依赖artifactId]</artifactId>
          <exclusions>
              <exclusion>
                  <groupId>jakarta.servlet</groupId>
                  <artifactId>jakarta.servlet-api</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
      
  • 检查WAR打包主类配置
    确保主类继承SpringBootServletInitializer并正确重写configure方法(Spring Boot 2.x WAR打包的必要配置):

    @SpringBootApplication
    public class RappersInfo extends SpringBootServletInitializer {
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(RappersInfo.class);
        }
    
        public static void main(String[] args) {
            SpringApplication.run(RappersInfo.class, args);
        }
    }
    
  • 调整Tomcat依赖范围(若外部容器部署)
    如果是将WAR包部署到外部Tomcat容器,需将Spring Boot内置Tomcat依赖设为provided,避免与外部容器的Servlet API冲突:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:25:11