首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >com.sun.jersey.spi.container.servlet.ServletContainer :java.lang.ClassNotFoundException

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

Stack Overflow用户
提问于 2013-08-07 01:02:13
回答 17查看 255.1K关注 0票数 86

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

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

但是服务器一直在给我

com.sun.jersey.spi.container.servlet.ServletContainer:

java.lang.ClassNotFoundException

当我在web.xml中添加这些行时

代码语言:javascript
复制
<?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>

我已经从here下载了Jersey JAX-RS 2.1 RI bundle,并按照教程中的描述在WEB-INF/lib文件夹中添加了所有jar文件。即使过了两天,也没什么效果。我在谷歌上搜索了几次,显然使用Maven的人已经以某种方式解决了这个问题,但我没有使用Maven,编写该教程的人也没有。

只是为了检查在导入的Jersey jars中是否存在com.sun.jersey.spi.container.servlet.ServletContainer,我尝试用Java语言编写这个完全限定的名称,并让智能感知完成名称,但我无法在com.sun.je之后获得任何智能感知,所以我最后的猜测是,在最新的泽西版本中,有一些包重新安排了jersey不再包含在com.sun中。我已经筋疲力尽了,我将非常感谢任何形式的帮助。

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2013-08-07 17:40:02

您已经下载了Jersey 2(它是JAX-RS 2的RI )。你提到的教程使用的是Jersey 1,从(here)下载Jersey 1.17.1应该就足够了。

Jersey 1使用com.sun.jersey,而Jersey 2使用org.glassfish.jersey,因此例外。

还要注意,以com.sun.jersey开头的init-param不会被Jersey 2识别。

编辑

Registering Resources and Providers in Jersey 2包含有关如何在Jersey 2中注册类/实例的附加信息。

票数 158
EN

Stack Overflow用户

发布于 2013-12-05 18:54:40

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

代码语言:javascript
复制
    <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>
票数 34
EN

Stack Overflow用户

发布于 2013-11-01 02:24:58

在pom中添加此内容

代码语言:javascript
复制
<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>
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18086218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档