无法在Eclipse中创建Jersey RESTful服务

时间:2016-10-13 05:28:06

标签: java eclipse rest jersey tomcat8

我尝试使用Jersey在Eclipse上创建RESTful服务。

当我尝试在Eclipse中的localhost中运行时,我反复出现以下错误。

SEVERE: Servlet [Jersey Web Application] in web application [/TestPrject] threw load() exception
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

我的web.xml看起来像这样:

<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    version="3.1">
<display-name>TestPrject</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.eviac.blog.MyTestSvc</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>

我在WEB-INF / lib下也有所有Jersey 2.0罐子。我正在使用JDK 1.7.0_79运行Apache Tomcat 8.0。

用于服务输入的类如下:

@Path("/")
public class MyTestSvc {

    @GET
    @Path("/callService")
    @Produces({ "text/plain" })
    public String userName() {

        return "hello";
    }
}

我可能会出错的任何想法?

4 个答案:

答案 0 :(得分:0)

确保您有jersey-container-servlet-core依赖。

答案 1 :(得分:0)

如果您使用的是maven,请将以下依赖项添加到您的pom

<dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <version>{your version here (2.0)?}</version>
</dependency>

答案 2 :(得分:0)

根据服务类或控制器,您的网址似乎是这样的

ProjName /休息// callService

所以在服务类中进行

@Path("/service")
public class MyTestSvc {

    @GET
    @Path("/callService")
    @Produces({ "text/plain" })
    public String userName() {

        return "hello";
    }
}

然后url将是ProjName / rest / service / callService

答案 3 :(得分:0)

您的申请中有几个问题:

修复依赖项

如果您使用的是Maven,请确保您具有以下依赖关系:

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.23.2</version>
</dependency>

如果没有,请确保您在类路径上拥有所有jersey-container-servlet工件依赖项。

修复web.xml

jersey.config.server.provider.packages参数定义一个或多个包含特定于应用程序的资源和提供程序的程序包。变化:

<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.eviac.blog.MyTestSvc</param-value>
</init-param>

要:

<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.eviac.blog</param-value>
</init-param>

如果您需要添加更多套餐,请使用;,将其分开。

一旦Tomcat 8.x支持Servlet 3.x,您就不需要web.xml部署描述符来处理简单的应用程序。有关详细信息,请查看Jersey documentation regarding deployment in Servlet 3.x containers

改进资源路径设计

使用空字符串或仅使用斜杠作为值来避免@Path注释。闻起来很糟糕。