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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:57:02