迁移到泽西2.x现在我得到servlet容器异常

时间:2016-10-15 17:50:58

标签: java maven servlets web.xml jersey-2.0

所以我使用Jersey 2.23.2用java构建一个小的rest api。我遇到了一个问题,但我无法正确指定web.xml文件中的servlet。这就是我的文件的样子:

的pom.xml

<dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>2.23.2</version>
        </dependency>       
        <dependency>
          <groupId>org.glassfish.jersey.containers</groupId>
          <artifactId>jersey-container-servlet-core</artifactId>
          <version>2.23.2</version>
          <scope>provided</scope>
        </dependency>
    </dependencies>

的web.xml

...
  <servlet>
        <servlet-name>WebService</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
             <param-name>jersey.config.server.provider.packages</param-name>
             <param-value>api-mashup-api.API</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>WebService</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>

</web-app>

API.java

package api;
    @Path("/v1")
    public class API {
    private Controller controller;

    public API(){
        controller = new Controller();
    }

    @GET
    @Produces(MediaType.TEXT_HTML)
    public String print1() {
        return "Please specify what resource you need.";
    }

    /**
     * Prints to the screen if we are in /v1/foo
     * 
     * @return
     */
    @GET
    @Path("/foobar")
    @Produces(MediaType.TEXT_HTML)
    public String print2() {
        return "Please specify what resource you need.";
    }
}

我的项目文件夹结构如下所示:

api-mashup-api/Java Resources/src/api/API.java

之前我使用过Jersey 1.x然后我迁移到2.x,现在我不确定在web.xml中将什么放入servlet的params中。当我尝试在我的tomcat服务器上运行API.java时,我得到以下异常:

SEVERE: Servlet [WebService] in web application [/api-mashup-api] threw load() exception
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

我可以很好地到达我的index.html,所以服务器工作,但不是API部分。不知道该怎么做。显然servlet部分出了问题。

编辑 - 我尝试过的事情:

2 个答案:

答案 0 :(得分:0)

我已多次修复此错误。它基本上总是一个依赖问题。

以下是修复它的步骤:

  1. 确保您使用所有软件包的最新版本(即2.23.2的glassfish)和服务器,相应地更新您的POM。这对您的案例非常重要,因为您使用的是新版本的Jersey。

  2. 刷新项目

  3. 使用Maven菜单清理和构建

  4. 使用Maven菜单刷新(这与项目刷新不同)

  5. 不要跳过步骤或假设如果你过去在这里和那里做过其中的一些步骤,那么它们就像一个接一个地做到这一步一样。

答案 1 :(得分:0)

可能是servlet容器问题&#34; jersey-container-servlet-core&#34;适用于servlet 2.x容器,请尝试更改为

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