Tomcat 6 + Jersey 2.6部署REST应用出现404错误求助
解决Tomcat 6 + Jersey 2.6 REST服务的404错误
咱们一步步来排查你遇到的问题:
1. 核心问题:访问路径不匹配
你当前访问的是 http://appurl:8080/ddd/rest,但你的REST服务并没有定义这个根路径对应的资源。看你的Service类配置:
- 类级别标注了
@Path("/SalvaVotazioni") - 方法级别又添加了
@Path("/salva")
所以正确的访问路径应该是:http://appurl:8080/ddd/rest/SalvaVotazioni/salva
另外,你的方法使用了@PathParam("codiceEnte"),但当前的@Path("/salva")没有对应的路径占位符,参数根本无法获取到,需要修改方法的@Path注解:
@GET @Path("/salva/{codiceEnte}") // 添加路径占位符 @Produces(MediaType.APPLICATION_XML) public Response save(@PathParam("codiceEnte") String codiceEnte) { return Response.status(200).entity("收到的codiceEnte:" + codiceEnte).build(); }
此时访问需要带上参数值,比如:http://appurl:8080/ddd/rest/SalvaVotazioni/salva/123(123替换为你的实际参数内容)
2. 包扫描配置验证
你的web.xml中配置的扫描包是it.eng.ddd.webservice,而Service类所在的it.eng.ddd.webservice.salvaVotazioni是其子包——Jersey 2.x的jersey.config.server.provider.packages参数默认会递归扫描子包,所以这个配置是有效的。不过可以额外确认两点:
- 编译后的
Service.class文件是否正确放置在WEB-INF/classes目录下 @Path注解的拼写是否正确(Jersey的路径区分大小写)
3. 日志信息的线索
从你提供的Tomcat日志可以看到,LoggingFilter已经正常接收到请求,说明Jersey的ServletContainer已经成功加载,Servlet映射没有问题。返回404纯粹是因为请求路径没有匹配到任何资源方法,这也进一步印证了路径不匹配的核心问题。
4. 额外检查点
- 版本兼容性:Tomcat 6是Servlet 2.5容器,Jersey 2.6支持Servlet 2.5及以上版本,两者兼容性没问题
- 依赖完整性:确认
WEB-INF/lib下的Jersey核心依赖包齐全,比如jersey-container-servlet-core、jersey-server等,缺少核心包可能导致资源扫描失败
内容的提问来源于stack exchange,提问作者arachelva
相关产品推荐
相关产品推荐

