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

Tomcat10部署Jersey项目报Servlet load()异常及HTTP404如何解决

问题根因

  • 你当前使用的Jersey 1.19.1属于基于JavaEE规范的旧版本,所有依赖使用javax.*命名空间包名,而Tomcat 10及以上版本已全面切换至JakartaEE规范,内置Servlet API包名为jakarta.*,两者完全不兼容,直接导致Jersey Servlet初始化加载失败抛出load()异常,接口资源无法正常注册,最终访问返回404,错误提示如下:

源服务器未找到目标资源的当前表示,或不愿意披露该资源的存在。

  • 你提供的代码实际是项目的pom.xml配置文件,并非你描述的web.xml。
  • 当前pom中maven编译插件指定的JDK版本为1.6,版本过旧,与当前主流服务器兼容性差。

解决方案

方案一(操作成本最低):降级Tomcat版本

直接将运行环境更换为Tomcat 9.x及更低版本,Tomcat 9仍支持javax.*命名空间,无需大范围修改项目代码和配置,仅需调整pom中maven编译插件的source和target版本为1.8及以上即可:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <inherited>true</inherited>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>

修改后重新打包部署即可正常运行。

方案二(保留Tomcat 10):升级项目依赖适配JakartaEE

需要全量替换项目相关依赖适配新规范:

  1. 移除所有com.sun.jersey相关依赖,替换为Jersey 3.x及以上版本(适配JakartaEE),对应groupId更换为org.glassfish.jersey
  2. 移除javax.servlet-api依赖,替换为对应版本的jakarta.servlet-api
  3. 同步修改web.xml中Jersey Servlet的全类名、项目代码中所有javax.ws.rs.*导入语句为jakarta.ws.rs.*
  4. 调整maven编译插件的JDK版本为1.8及以上
    修改完成后重新打包部署即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:09:03