Tomcat 10中能否使用javax命名包?需替换为Jakarta吗?
Tomcat 10 中 javax 与 Jakarta 命名空间的使用说明
核心结论
Tomcat 10 完全不再支持 javax.* 命名空间的EE API,必须使用 jakarta.* 替代。
具体细节
- Tomcat 10 基于 Jakarta EE 9 规范,该规范已将原Java EE中的所有
javax.*相关API(比如servlet、jsp、el等)迁移至jakarta.*命名空间。例如原类javax.servlet.http.HttpServletRequest必须替换为jakarta.servlet.http.HttpServletRequest,直接使用旧的javax类会触发java.lang.NoClassDefFoundError或ClassNotFoundException。 - 针对你使用Struts的旧应用:
- 目前Struts 2的稳定版本仍依赖
javax.*API,无法直接在Tomcat 10上运行。 - 可选解决方案:
- 降级Tomcat版本:切换到Tomcat 9,它完全兼容基于
javax.*的旧应用,无需修改代码和依赖。 - 迁移至Jakarta适配版Struts:使用Struts社区推出的支持Jakarta的分支版本(如Struts 2.6.x的Jakarta适配版或Struts 3.x),同时需要批量替换项目中所有
javax.开头的导入语句为jakarta.,并更新对应依赖。
- 降级Tomcat版本:切换到Tomcat 9,它完全兼容基于
- 目前Struts 2的稳定版本仍依赖
补充说明
这种命名空间迁移是Java EE正式转为Jakarta EE后的官方标准变更,所有基于Jakarta EE 9及以上版本的服务器(如Jetty 11、WildFly 22+等)都遵循此规则,不存在兼容模式允许直接使用javax.*类。
内容的提问来源于stack exchange,提问作者Alok Kumar
相关产品推荐
相关产品推荐

