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

哪个Eclipse版本兼容Tomcat 10?是否需要退回使用Tomcat 9?

问题根因

你的推测完全准确,报错的核心原因是Jakarta EE的包名迁移:
Tomcat 10及以上版本实现的是Jakarta EE 9+规范,所有Servlet相关API的顶级包名已经从传统的javax.*全部迁移为jakarta.*,你遇到的HttpServlet类找不到错误,本质是项目仍在引用旧命名空间的Servlet类,或者项目配置绑定了旧版本的Java EE Servlet API,和你当前用的Eclipse 2022-06版本本身没有关系,不需要升级Eclipse。

可选解决方案

你可以根据自己的项目场景选任意一种方案,不需要强制升级Eclipse或者降级Tomcat:

  • 优先方案:适配Jakarta命名空间(推荐新项目使用)
    Eclipse 2022-06已经原生支持Jakarta EE 9+,不需要额外升级版本,按以下步骤调整即可:
    1. 新建动态Web项目时,将Dynamic Web Module版本选择为5.0及以上(对应Tomcat 10支持的Jakarta Servlet 5.0规范),不要选择4.0及以下的旧版本——旧版本默认绑定javax.*命名空间的Servlet API
    2. 已创建的旧项目可以右键打开「Properties -> Project Facets」,将Dynamic Web Module版本修改为5.0,同时在Runtime面板确认绑定你本地配置的Tomcat 10运行时,保存设置后Eclipse会自动将Tomcat自带的jakarta.servlet.*相关依赖加入项目构建路径
    3. 全局替换代码中Servlet相关类的导入语句:把所有import javax.servlet.*开头的导入改为import jakarta.servlet.*,比如import javax.servlet.http.HttpServlet替换为import jakarta.servlet.http.HttpServlet;如果JSP文件中通过page指令导入了Servlet相关类,也要同步修改包路径
    4. 如果你用Maven/Gradle管理依赖,删除旧的javax.servlet-api依赖,替换为Jakarta版本的Servlet API依赖,scope设置为provided即可。
  • 兼容方案:降级Tomcat版本(适合基于旧Java EE规范开发的存量项目)
    如果你不想修改现有代码的包名,直接把Tomcat降级到9.0.x版本即可。Tomcat 9实现的是Java EE 8规范,仍然使用javax.*命名空间的Servlet API,和旧代码完全兼容,且可以完美运行在Java 11环境下,不需要调整JDK版本。注意不要选择Tomcat 7及更早版本,这类旧版本对Java 11存在已知兼容问题。
  • 特殊场景方案:使用Tomcat官方迁移工具转换存量WAR包
    如果你需要在Tomcat 10上部署基于javax.*命名空间打包的第三方WAR包、又没有源码可以修改,可以用Tomcat自带的Jakarta EE迁移工具,自动把WAR包内所有javax.servlet相关的引用批量转换为jakarta.servlet命名空间,不需要手动改代码。
注意事项

不要在同一个项目的构建路径中同时引入javax.servlet-api和jakarta.servlet-api两个版本的依赖,会触发类冲突问题,导致更难排查的运行时错误。

内容的提问来源于stack exchange,提问作者arcy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:21:27