【问题标题】:Migrated to jersey 2.x and now I get servlet container exception迁移到 jersey 2.x,现在我得到 servlet 容器异常
【发布时间】:2017-02-25 00:25:47
【问题描述】:

所以我正在使用 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 的参数中添加什么。当我尝试在我的 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 部分有问题。

编辑-我尝试过的事情:

【问题讨论】:

  • 你可以试试 api 吗?另外,添加 API.java 案例这不起作用。
  • 两个都试过了,结果一样。
  • 对不起,我的意思是在帖子中添加 API.java 类。
  • 也试过了。看看我的编辑。
  • 看看那个帖子,这个不需要web.xml。 stackoverflow.com/questions/37778893/…

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


【解决方案1】:

我已经多次遇到并修复了这个错误。它基本上总是一个依赖问题。

以下是修复它的步骤:

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

  2. 刷新您的项目

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

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

不要跳过步骤,也不要认为如果您过去在这里和那里完成了其中一些步骤,就与一个接一个地执行它们是一样的。

【讨论】:

    【解决方案2】:

    servlet 容器“jersey-container-servlet-core”可能是 servlet 2.x 容器的问题,请尝试更改为

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      • 2021-03-03
      • 2022-01-06
      • 2021-02-02
      • 2011-01-25
      相关资源
      最近更新 更多