JAX-RS项目启动报错:ServletException及ResourceConfig异常求助
解决Jersey Servlet初始化报错:ResourceConfig实例未包含任何根资源类
问题重现
搭建简易HelloWorld JAX-RS应用时,遭遇HTTP 500内部服务器错误,核心异常链为:javax.servlet.ServletException → com.sun.jersey.api.container.ContainerException: ResourceConfig实例未包含任何根资源类
已尝试修正web.xml包名、执行Maven构建刷新应用、手动导出WAR部署等操作,问题仍未解决。
相关配置与代码如下:
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <servlet> <servlet-name>jersey-servlet</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>com.javapoint.rest</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jersey-servlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
Hello.java
package com.javapoint.rest; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/hello") public class Hello { // 当未请求HTML和XML时调用此方法 @GET @Produces(MediaType.TEXT_PLAIN) public String sayPlainTextHello() { return "Hello Jersey Plain"; } // 当请求XML时调用此方法 @GET @Produces(MediaType.TEXT_XML) public String sayXMLHello() { return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>"; } // 当请求HTML时调用此方法 @GET @Produces(MediaType.TEXT_HTML) public String sayHtmlHello() { return "<html> " + "<title>" + "Hello Jersey" + "</title>" + "<body><h1>" + "Hello Jersey HTML" + "</h1></body>" + "</html> "; } }
排查与解决方案
1. 确认编译后的class文件存在
- 检查Maven构建输出目录(默认
target/classes)下是否有com/javapoint/rest/Hello.class文件; - 解压WAR包,查看
WEB-INF/classes/com/javapoint/rest/路径下是否存在该class文件; - 若文件缺失,执行
mvn clean compile重新编译,或检查Eclipse的Build Path配置,确保源码目录被正确标记为Source Folder。
2. 验证Jersey依赖完整性
- 确保pom.xml中引入了Jersey 1.x的核心依赖,版本保持一致,避免冲突:
<dependencies> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>1.19.4</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-servlet</artifactId> <version>1.19.4</version> </dependency> </dependencies>
- 清理Maven本地仓库缓存,执行
mvn clean install -U重新拉取依赖。
3. 修正web.xml配置
- 调整URL映射:将
servlet-mapping的url-pattern从/改为/rest/*,避免与容器默认Servlet冲突,请求路径改为http://localhost:8080/你的应用名/rest/hello; - 强制指定资源类:如果包扫描失效,替换原初始化参数为直接指定资源类:
<init-param> <param-name>com.sun.jersey.config.property.classnames</param-name> <param-value>com.javapoint.rest.Hello</param-value> </init-param>
4. 检查容器类加载问题
- 确保服务器(如Tomcat)的lib目录下没有其他版本的Jersey包,避免类加载优先级冲突;
- 部署WAR包时,确认服务器已正确解压,且
WEB-INF/lib下的Jersey依赖包完整。
内容的提问来源于stack exchange,提问作者user2368975
相关产品推荐
相关产品推荐

