Tomcat中Jakarta REST服务运行出现404页面未找到问题求助
排查Jakarta REST服务404错误的可能原因
根据你提供的代码和截图,以下是几个核心排查方向:
1. 确认访问路径是否正确
你的HelloApplication设置了@ApplicationPath("/api"),HelloResource的@Path("/hello-world"),完整的访问路径应该是:
http://<服务器地址>:<端口>/<项目上下文根>/api/hello-world
从项目截图看,项目名称为generateur,默认上下文根通常与项目名一致,所以示例完整路径为:
http://localhost:8080/generateur/api/hello-world
检查你实际访问的URL是否符合该格式,重点确认上下文根和路径拼接是否正确。
2. 检查依赖是否完整
Jakarta REST需要API包+对应实现包才能正常运行:
- 确保项目已引入
jakarta.ws.rs-api依赖 - 根据使用的服务器,添加匹配的REST实现依赖(如Jersey、RESTEasy)
示例Maven依赖:<!-- Jakarta REST API --> <dependency> <groupId>jakarta.ws.rs</groupId> <artifactId>jakarta.ws.rs-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- Jersey 实现(适用于Tomcat等轻量服务器) --> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet-core</artifactId> <version>3.1.5</version> </dependency>
3. 手动注册资源类
你的HelloApplication仅继承Application但未重写getClasses(),部分服务器不会自动扫描同包资源类,可手动注册:
package com.mpsoft.generateur; import jakarta.ws.rs.ApplicationPath; import jakarta.ws.rs.core.Application; import java.util.HashSet; import java.util.Set; @ApplicationPath("/api") public class HelloApplication extends Application { @Override public Set<Class<?>> getClasses() { Set<Class<?>> classes = new HashSet<>(); classes.add(HelloResource.class); return classes; } }
4. 确认服务器兼容性
- 若使用Tomcat,需Tomcat 10及以上版本才支持Jakarta EE(你的代码用
jakarta.ws.rs包),Tomcat 9及以下仅支持Java EE(javax.ws.rs包),版本不匹配会导致注解无法被识别。 - 查看服务器启动日志,确认项目是否成功部署,有无类加载失败、资源注册失败的报错。
5. 检查项目部署配置
确认项目部署的上下文根是否符合预期,部分IDE或服务器会修改上下文根配置,可在服务器配置文件(如Tomcat的server.xml)或IDE部署设置中查看。
内容的提问来源于stack exchange,提问作者Firas Chebbi
相关产品推荐
相关产品推荐

