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

JAX-RS WebApp部署Tomcat遇404错误(Eclipse运行正常)

排查WAR包部署后CXF JAX-RS 404问题的步骤

针对你遇到的Eclipse内运行正常、独立WAR包部署Tomcat后404的问题,按以下步骤排查:

  • 核对WAR包目录与依赖完整性

    1. 解压WAR包,检查WEB-INF/lib下是否包含所有CXF核心依赖:cxf-core.jar、cxf-rt-frontend-jaxrs.jar、javax.ws.rs-api.jar等,确保和Eclipse部署时的依赖完全一致——手动打包或Maven/Gradle配置错误常导致依赖遗漏。
    2. 检查WEB-INF/web.xml的CXF Servlet配置:
      • 确认servlet类为org.apache.cxf.transport.servlet.CXFServlet(旧版CXF的javax包实现,不要用Jakarta版本)
      • 确认url-pattern设置为/eshop/*,与你的请求路径前缀匹配
    3. 验证JAX-RS应用类配置:
      • 如果用@ApplicationPath("/eshop")注解,确保该注解在打包后的class文件中正常生效
      • 如果是web.xml中通过context-param指定应用类,检查参数名javax.ws.rs.Application对应的类路径是否正确
  • 确认Tomcat部署上下文路径
    查看Tomcatwebapps目录下解压后的应用文件夹名,若WAR包名为es4.3.war,正常上下文路径应为/es4.3,但部分旧版Tomcat会自动替换点为下划线(变为/es4_3),导致请求路径错误。可通过Tomcat管理控制台确认实际部署的上下文路径。

  • 查看CXF初始化日志
    打开Tomcat的logs/catalina.out或localhost.log,搜索CXF相关日志:

    • 若未找到Deploying JAX-RS root resource class相关输出,说明CXF未成功扫描到你的服务类
    • 若出现ClassNotFound或NoClassDefError,说明存在依赖缺失或版本冲突
  • 核对版本兼容性
    因使用旧版Tomcat,必须确保CXF版本与Tomcat的Servlet API版本匹配:

    • Tomcat 7对应CXF 2.x系列,Tomcat 8对应CXF 3.x早期版本
    • 所有依赖必须是javax.*包(如javax.servlet、javax.ws.rs),禁止混入Jakarta命名空间的jar包
  • 对比Eclipse部署文件与WAR包内容
    将Eclipse自动部署到Tomcatwebapps/es4.3下的文件,与你打包的WAR解压文件逐一对比,重点检查:

    • WEB-INF/classes下的class文件是否齐全(特别是服务实现类、应用类)
    • WEB-INF/lib下的jar包是否完全一致

结合你提供的截图补充检查:

  • 服务接口的@Path注解是否正确(如类上的@Path与方法上的@Path组合后是否对应/eshop/items)
  • 应用类的getClasses()方法是否正确返回了你的服务实现类的Class对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:55:11