You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Tomcat 9.0.40部署Web应用后返回404问题求助

排查Tomcat部署后404错误的关键要点

看起来你已经做了不少基础配置,但还是遇到了404问题,我来帮你梳理几个容易遗漏的排查方向:

1. 确认JAX-RS的核心配置是否到位

Tomcat 9本身并不自带JAX-RS的实现,所以你需要确保两个关键配置:

  • 必须有一个Application子类或@ApplicationPath注解:这个类是JAX-RS的入口,告诉Tomcat哪里去找你的Web服务资源。比如:
    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;
    
    @ApplicationPath("/") // 这里的路径对应你要访问的基础路径
    public class TopicsApplication extends Application {
        // 空类即可,Tomcat会自动扫描当前包下的JAX-RS资源类
    }
    
    如果没有这个类,Tomcat根本不知道如何映射你的REST接口,自然返回404。
  • 检查WEB-INF/lib下的JAX-RS依赖:需要引入JAX-RS的API包和实现包(比如Jersey的jaxrs-ri相关jar),如果依赖缺失,资源类无法被加载,日志里会出现ClassNotFoundException

2. 验证Web应用的实际部署内容

Eclipse的部署有时候会有“看起来部署了但实际文件不对”的情况:

  • 去你指定的webapps/projects-topics-ws/WEB-INF/classes目录下,检查是否有编译后的Java类(特别是你的JAX-RS资源类和Application类)。如果这里是空的或者类文件缺失,说明Eclipse的编译或部署步骤出了问题。
  • 确认Eclipse的Server Locations设置:双击Tomcat服务器,查看"Server Locations"区域,是否选择了Use Tomcat installation (takes control of Tomcat installation)。如果选的是工作空间元数据,实际部署目录是Eclipse工作空间的.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps,而不是Tomcat安装目录的webapps,这时候你看到webapps里的项目可能是旧的,实际运行的是另一份文件。

3. 检查Context配置是否冲突

你在server.xml里手动配置了<Context>元素,但Tomcat的autoDeploy="true"会自动生成上下文配置文件(在conf/Catalina/localhost/目录下,比如projects-topics-ws.xml),这可能导致配置冲突:

  • 建议删除server.xml里手动添加的<Context>节点,让Eclipse自动管理上下文配置,避免重复配置引发的路径映射问题。
  • 查看conf/Catalina/localhost/下是否有对应项目的xml文件,确认其中的docBasepath是否和你预期的一致。

4. 核对资源类的路径注解

你的预期是访问http://localhost:8087/projects-topics-ws/返回XML,那需要确保:

  • 你的JAX-RS资源类上的@Path注解是"/",或者方法上的@Path"/",比如:
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    @Path("/")
    public class TopicsResource {
        @GET
        @Produces(MediaType.APPLICATION_XML)
        public String getTopics() {
            return "<topics><topic>Test</topic></topics>";
        }
    }
    
    如果资源类的@Path"/api",那你需要访问http://localhost:8087/projects-topics-ws/api/才能得到预期结果。

5. 查看Tomcat日志找线索

日志是排查问题最直接的方式:

  • 打开Tomcat的logs目录,查看localhost.logcatalina.out或者localhost_access_log.*.txt,有没有类加载失败、初始化异常等错误信息。比如如果JAX-RS依赖缺失,日志会明确提示找不到某个类;如果资源类初始化出错,也会有对应的堆栈信息。

6. 测试静态资源是否可访问

先排除路径映射本身的问题:在webapps/projects-topics-ws下新建一个test.html文件,访问http://localhost:8087/projects-topics-ws/test.html。如果这个静态文件能正常访问,说明Tomcat的上下文映射是正常的,问题出在JAX-RS的配置或资源类上;如果静态文件也404,那就是部署或上下文配置的问题。

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

火山引擎 最新活动