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

Tomcat 10应用报错:servlet-api.jar未被部署应用识别求助

Tomcat 10 无法识别servlet-api.jar问题解决指南

核心问题分析

你的问题根源在于Tomcat 10的Servlet API包名变更:Tomcat 10基于Jakarta EE 9规范,将原Java EE的javax.servlet.*包全部迁移为jakarta.servlet.*,而你的JSP代码仍在使用旧的javax.servlet相关导入,导致类找不到的兼容性问题。

针对你的疑问解答

  1. 存在明确的库兼容性问题:Tomcat 10的Servlet API与你代码中使用的javax.servlet包完全不兼容,这是Jakarta EE和Java EE版本迭代导致的包名变更,并非jar本身的问题。
  2. 自带的servlet-api.jar(实际为jakarta.servlet-api.jar)无问题:Tomcat 10自带的jar是符合Jakarta EE 9规范的正确版本,问题出在你的代码导入与jar的包名不匹配。
  3. 不是缺失模块,是包名兼容性冲突:代码中导入的javax.servlet相关类在Tomcat 10的jar中不存在,同时如果使用旧版本的commons-fileupload,也会因依赖javax.servlet引发冲突。

具体解决步骤

  • 修改代码中的包导入:将所有javax.servlet.*相关的导入替换为jakarta.servlet.*,例如:
    • 把import javax.servlet.*;改为import jakarta.servlet.*;
    • 把import javax.servlet.http.HttpServletRequest;改为import jakarta.servlet.http.HttpServletRequest;
    • 其他javax.servlet.http.*的导入同理替换为jakarta.servlet.http.*
  • 升级commons-fileupload版本:使用支持Jakarta EE的commons-fileupload版本(推荐1.5及以上),旧版本依赖javax.servlet,会与Tomcat 10冲突,同时确保配套的commons-io版本也适配。
  • 避免重复打包Servlet API:不要将Tomcat安装目录/u01/tomcat/base/middleware/tomcat10/lib下的jakarta.servlet-api.jar复制到项目的WEB-INF/lib目录,Tomcat会在运行时自动提供该jar,重复打包会引发类加载异常。
  • 清理缓存并重新部署:清理项目的编译缓存(如IDE的target目录、Tomcat的work目录),重新编译项目后部署到Tomcat 10中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:17:13