Tomcat 10.1 Maven项目遇java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet
解决Spring Maven Web项目启动时
java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet问题 问题核心
Jakarta Servlet 5.0+(Jakarta EE 9及以上版本)将Servlet API的包名从javax.servlet彻底迁移到了jakarta.servlet,你的问题本质是代码包名引用、依赖版本、Tomcat版本三者不匹配:
- 代码里还在使用旧的
javax.servlet包下的类 - 依赖用了新的
jakarta.servlet-api,但Tomcat版本不支持新包名;或者Tomcat版本匹配,但代码没更新包名
分步解决方案
1. 统一代码中的Servlet API包名
检查项目中所有涉及Servlet API的代码(比如继承HttpServlet的控制器、自定义Filter等),将导入语句从旧包替换为新包:
// 旧导入 import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // 替换为新导入 import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse;
2. 匹配Tomcat与Servlet API版本
根据你选择的依赖版本,对应使用兼容的Tomcat:
- 若使用
jakarta.servlet-api:6.0.0(Servlet 6.0):必须使用Tomcat 10.1.x版本 - 若坚持使用Tomcat 9:将依赖换回旧的
javax.servlet-api,版本用4.0.1(Tomcat 9支持的最高Servlet版本),同时代码保持javax.servlet包名的引用
<!-- Tomcat 9对应的依赖 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency>
3. 清理依赖与缓存
- 移除手动添加到类路径的
javax.servlet-api-3.1.0.jar,避免Maven依赖与手动jar包冲突 - 执行Maven命令清理并重新构建项目:
mvn clean install -U
4. 检查Spring版本兼容性
- Spring Framework 6.x 要求依赖Jakarta EE 9+(即
jakarta.servlet-api),且代码使用jakarta.servlet包名 - Spring Framework 5.x 仅支持旧的
javax.servlet-api,不能搭配Jakarta版本的依赖,请确保Spring版本与Servlet API版本匹配
内容的提问来源于stack exchange,提问作者Ashhh
相关产品推荐
相关产品推荐

