java.lang.ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer

M-W*_*eEh 81 eclipse google-app-engine jersey java-ee jersey-2.0

我正在尝试使用Jersey + Google应用引擎构建一个简单的hello world应用程序两天.对于简单的AppEngine项目,我遵循了这些教程,两者都很好用 https://developers.google.com/appengine/docs/java/gettingstarted/creating https://developers.google.com/appengine/docs/java/webtoolsplatform

但现在我正在尝试添加Jersey并遵循本教程http://www.vogella.com/articles/REST/article.html.

但服务器一直在给我

java.lang.ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer

当我在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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>TestServer</display-name>
<servlet>
    <servlet-name>Jersey REST Service</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.test.myproject</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)

我已经JAX-RS 2.1 RI bundle这里下载了Jersey ,并且已经WEB-INF/lib在教程中添加了所有jar文件.即使两天后也没有任何效果.我已经在Google上搜索了几次,显然使用Maven的人已经解决了它,但我没有使用Maven也没有写过那个教程的人.

只是为了检查是否com.sun.jersey.spi.container.servlet.ServletContainer存在于导入中 Jersey jars我试图在Java中编写这个完全限定的名称并让intellisense完成名称,但我无法获得任何智能感知,com.sun.je所以我的最后猜测是在最新的Jersey构建中有一些包重新排列并且jersey不再在里面com.sun.我很累,我很感激任何帮助.

Mic*_*dos 149

你已经下载了Jersey 2(JAX-RS 2的RI).您所指的教程使用Jersey 1.从(这里)下载Jersey 1.17.1 ,应该足够了.

Jersey 1使用com.sun.jersey,而Jersey 2则使用org.glassfish.jersey例外.

另外请注意,也init-param开始com.sun.jersey将不会受到新泽西州2所识别.

编辑

在Jersey 2注册资源和提供程序包含有关如何在Jersey 2中注册类/实例的其他信息.

  • servlet-container的新类是"org.glassfish.jersey.servlet.ServletContainer" (4认同)
  • servlet-class: org.glassfish.jersey.servlet.ServletContainer, init-param-name: jersey.config.server.provider.packages。 (4认同)
  • +1.作为有类似问题的其他人的补充,阅读官方泽西用户指南:[第4章部署RESTful Web服务](https://jersey.java.net/documentation/latest/deployment.html)将是有用的. (2认同)

p27*_*p27 31

如果你使用的是jersey 2.x,那么你需要在web.xml中进行不同的配置,因为servlet类正在改变.您可以使用以下配置更新web.xml.

    <servlet>
    <servlet-name>myrest</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>    
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>your.package.path</param-value>
    </init-param>
    <init-param>
     <param-name>unit:WidgetPU</param-name>
     <param-value>persistence/widget</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>myrest</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

  • 你真的需要**单位:WidgetPU**?我认为通过删除它可以简化答案. (9认同)

use*_*655 22

在pom中添加它

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.17.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

  • jersey-core 是 jersey-server 的依赖项,许多不需要明确添加 (2认同)

Adi*_*Adi 13

这是一个日食设置问题,而不是泽西岛问题.

从这个线程ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer

右键点击你的Eclipse项目属性 - >部署大会 - >添加 - > Java构建路径条目 - >摇篮依赖 - >完成.

因此,Eclipse并没有使用摇篮依赖时阿帕奇开始.