Java Maven项目报错:java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet
问题排查与解决:Tomcat 10.1下Spring MVC项目出现ClassNotFoundException: javax.servlet.http.HttpServlet
核心原因
Tomcat 10.1 基于**Jakarta EE 9+**规范,API包路径从javax.servlet.*改为了jakarta.servlet.*,而当前使用的Spring版本(大概率是5.x及以下)依赖旧的javax.servlet API,导致类加载时找不到对应类。
解决方案
1. 升级Spring框架版本
使用适配Jakarta EE的Spring版本:
- Spring MVC独立项目:升级到6.0.x及以上版本
- Spring Boot项目:升级到3.0.x及以上版本
在pom.xml中更新Spring相关依赖示例:
<!-- Spring MVC 6.x 依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>6.1.5</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>6.1.5</version> </dependency>
2. 替换Servlet API依赖
将旧的javax.servlet依赖替换为Jakarta版本,并设置scope为provided(Tomcat已内置该API,无需打包到项目):
<dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency>
3. 清理并重新构建项目
执行Maven命令清理缓存并重新构建,确保依赖正确下载:
mvn clean install -U
4. 检查传统配置(若使用web.xml)
如果项目仍用web.xml,确认DispatcherServlet的类路径为org.springframework.web.servlet.DispatcherServlet(路径本身无问题,但需保证依赖适配)。
内容的提问来源于stack exchange,提问作者UTHAYAKUMAR M
相关产品推荐
相关产品推荐

