Spring Boot启动报错:webServerStartStop Bean启动失败求助
问题排查与解决方案
1. 核心原因定位
这个错误本质是Servlet API的版本规范冲突:Spring Boot 3.x及以上版本全面采用Jakarta EE规范(包路径为jakarta.servlet.*),而旧版Apache Jasper依赖的是传统Java EE的javax.servlet.*包,导致类型转换失败。
2. 针对性修复步骤
替换Jasper依赖为Jakarta兼容版本
移除基于javax的旧版tomcat-jasper,改用Spring Boot官方维护的嵌入式Jasper依赖:
<!-- 错误的旧依赖 --> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jasper</artifactId> </dependency> <!-- 正确的Jakarta兼容依赖 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <!-- Spring Boot 3.x会自动管理版本,无需手动指定 --> </dependency>
若需手动指定版本,确保使用10.x及以上(Tomcat 10+开始支持Jakarta EE)。
排查并排除依赖冲突
执行Maven命令扫描依赖树,找出引入javax.servlet的第三方依赖:
mvn dependency:tree | grep javax.servlet
对存在冲突的依赖添加排除规则:
<dependency> <groupId>[冲突依赖的groupId]</groupId> <artifactId>[冲突依赖的artifactId]</artifactId> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </exclusion> <exclusion> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> </exclusion> </exclusions> </dependency>
规范Spring Boot Web依赖
确保使用官方spring-boot-starter-web,它会自动引入正确的Jakarta Servlet API,避免手动引入jakarta.servlet-api导致版本不一致:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
清理缓存并重建项目
- 删除本地Maven仓库中冲突的缓存目录:
~/.m2/repository/javax、~/.m2/repository/jakarta - 执行命令重新构建:
mvn clean install -U
内容的提问来源于stack exchange,提问作者hajar amani
相关产品推荐
相关产品推荐

