Spring Boot应用启动失败:Servlet类转换异常求助
Spring Boot 3.x启动失败:JspServlet类转换异常排查与解决
核心错误分析
启动失败的根本原因是类转换冲突,关键栈信息如下:
java.lang.ClassCastException: class org.apache.jasper.servlet.JspServlet cannot be cast to class jakarta.servlet.Servlet
Spring Boot 3.x(基于Spring 6.x)已全面迁移至Jakarta EE规范,所有Servlet相关API的包路径从javax.servlet.*改为jakarta.servlet.*。但项目中同时存在旧Java EE时代的Servlet API依赖,导致类加载冲突,Tomcat无法正确初始化JspServlet。
问题根源(POM配置)
你的pom.xml存在两个关键问题:
- 手动引入了旧版
javax.servlet-api依赖:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
该依赖属于Java EE规范,与Spring Boot 3.x要求的Jakarta EE API完全不兼容,直接触发类转换异常。
- 重复引入
spring-boot-starter-tomcat:spring-boot-starter-web已经默认包含嵌入式Tomcat依赖,重复引入属于冗余配置,无实际作用。
解决步骤
1. 移除冲突与冗余依赖
删除pom.xml中的javax.servlet-api和重复的spring-boot-starter-tomcat依赖。
2. (可选)替换SpringFox为SpringDoc
SpringFox 3.0.0已停止维护,对Spring Boot 3.x兼容性较差,建议替换为SpringDoc OpenAPI:
<!-- 移除原有SpringFox依赖 --> <!-- <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>3.0.0</version> </dependency> --> <!-- 添加SpringDoc依赖 --> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.2.0</version> </dependency>
修改后的POM依赖片段
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>3.1.2</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> <exclusion> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifactId> </exclusion> </exclusions> </dependency> <!-- 替换为SpringDoc(可选) --> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
验证
修改后执行mvn clean install,重新启动应用,类转换异常即可解决。
内容的提问来源于stack exchange,提问作者veluguri praveen
相关产品推荐
相关产品推荐

