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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:25:38