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

使用JAX-RS/Jersey开发Web服务,访问Tomcat时遇HTTP 404求助

嘿,针对你遇到的Jersey Web服务在Tomcat上返回404的问题,结合IntelliJ的开发环境,我整理了几个核心排查方向,你可以逐一检查:

1. 补全并验证web.xml的核心配置

你提供的web.xml片段不完整,Jersey的Servlet配置是关键,得确保这部分没问题:

  • 首先确认Servlet类的全限定名:Jersey 2.x用org.glassfish.jersey.servlet.ServletContainer,1.x版本是com.sun.jersey.spi.container.servlet.ServletContainer,别搞混版本
  • 必须添加init-param指定REST资源类所在的包,让Jersey能扫描到你的接口:
<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <!-- 替换成你自己的资源包路径 -->
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.yourcompany.yourproject.resources</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<!-- 配置Servlet映射,这里的url-pattern决定了访问前缀 -->
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>
  • 注意servlet-mapping的url-pattern,后续访问路径必须包含这个前缀
2. 确认项目依赖无缺失/冲突
  • 如果用Maven/Gradle管理依赖,Jersey 2.x必须引入jersey-container-servlet(这是和Tomcat集成的核心依赖),Maven示例:
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.41</version> <!-- 替换成你使用的Jersey版本 -->
</dependency>
  • 别把Jersey的JAR包同时放在项目WEB-INF/lib和Tomcat的全局lib目录下,会引发类加载冲突,导致Servlet初始化失败
3. 检查IntelliJ的Tomcat部署配置
  • 打开IntelliJ的Run/Debug Configurations,找到你的Tomcat实例,确认Deployment标签里的应用上下文路径是否正确(比如/jersey-sample),访问URL必须包含这个路径
  • 检查Tomcat的webapps目录下是否有你的项目文件夹,确保IntelliJ已经把项目正确部署上去了
  • 验证Project Structure里的Web模块配置:确认Web Resources Directory指向src/main/webapp,且web.xml被标记为Deployment Descriptor
4. 检查REST资源类的注解是否规范
  • 资源类必须标注@Path注解,方法要对应@GET/@POST等HTTP方法注解,比如:
package com.yourcompany.yourproject.resources;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

// 这里的路径会拼接在servlet-mapping的url-pattern之后
@Path("hello")
public class HelloResource {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String sayHello() {
        return "Hello from Jersey!";
    }
}
  • 注意注解包:Jersey 2.x用javax.ws.rs(Java EE)或jakarta.ws.rs(Jakarta EE),不要混用不同版本的注解
5. 查看Tomcat日志找根源

打开Tomcat的logs/catalina.out或localhost.log,搜索是否有类加载失败、Servlet初始化报错的信息——很多时候404只是表象,实际是Jersey的Servlet没启动成功,日志里会有明确的错误提示

6. 验证访问URL的正确性

举个例子:如果你的项目上下文是/jersey-sample,servlet映射是/api/*,资源类@Path("hello"),那正确的访问URL应该是:
http://localhost:8080/jersey-sample/api/hello
别漏掉上下文路径或Servlet映射的前缀,也别写错资源类的@Path值


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:06:21