Eclipse java.lang.ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer
我正在尝试使用Jersey+Google应用程序引擎构建一个简单的hello world应用程序,为期两天。对于简单的AppEngine项目,我遵循了这些教程,两个都很好 但现在我尝试添加运动衫,并遵循本教程 但服务器一直给我 java.lang.ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer 在web.xml中添加以下行时:Eclipse java.lang.ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer,eclipse,google-app-engine,jakarta-ee,jersey,jersey-2.0,Eclipse,Google App Engine,Jakarta Ee,Jersey,Jersey 2.0,我正在尝试使用Jersey+Google应用程序引擎构建一个简单的hello world应用程序,为期两天。对于简单的AppEngine项目,我遵循了这些教程,两个都很好 但现在我尝试添加运动衫,并遵循本教程 但服务器一直给我 java.lang.ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer 在web.xml中添加以下行时: 测试服务器 泽西岛休息服务 com.sun.jersey.s
测试服务器
泽西岛休息服务
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
com.test.myproject
1.
泽西岛休息服务
/休息/*
我已经从下载了JerseyJAX-RS2.1RI bundle
,并在WEB-INF/lib
文件夹中添加了所有jar文件,如教程所述。即使过了两天,也没有任何效果。我在谷歌上搜索了好几次,显然使用Maven的人已经解决了这个问题,但我没有使用Maven,编写教程的人也没有
为了检查导入的
jersey jars
中是否存在com.sun.jersey.spi.container.servlet.ServletContainer
,我尝试用Java编写这个完全限定的名称,让intellisense完成名称,但在com.sun.je
之后我无法获得任何intellisense,因此我最后的猜测是有一些在最新的Jersey版本中重新排列包,并且Jersey
不再位于com.sun
内。我已经筋疲力尽了,我非常感谢任何帮助 您已经下载了Jersey 2(JAX-RS 2的哪个RI)。您所指的教程使用Jersey 1。从()下载Jersey 1.17.1就足够了
Jersey 1使用com.sun.Jersey
,Jersey 2使用org.glassfish.Jersey
,因此例外
还要注意,jersey 2也不会识别以com.sun.jersey
开头的init param
编辑
包含有关如何在Jersey 2中注册类/实例的其他信息 将此添加到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>
泽西岛
泽西服务器
1.17.1
泽西岛
球衣核心
1.17.1
泽西岛
泽西servlet
1.17.1
如果您使用的是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>
myrest
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
您的.package.path
单位:WidgetPU
持久性/小部件
1.
myrest
/休息/*
试试这个:
org.glassfish.jersey.servlet.ServletContainer
在servlet类上,我今天遇到了相同的错误,尽管我使用的是Jersey 1.x,并且在我的类路径中有正确的JAR。对于那些希望完全遵循vogella教程并使用1.xjars的人,您需要将jersey库添加到WEB-INF/lib文件夹中。这肯定会解决问题。您需要将
jersey-bundle-1.17.1.jar
添加到项目的lib中
泽西岛休息服务
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
包,包,测试
1.
尽管我遵循了不同的指南,但我遇到了与您相同的问题:
奇怪的是,在我使用的这本指南中,版本之间的兼容性(1.x和2.x)应该没有任何问题,因为按照指南,您在pom.xml
上使用了jersey 1.8.x,在web.xml
中您引用了一个类(com.sun.jersey.spi.container.servlet.ServletContainer
)正如前面提到的1.x版本。所以我可以推断这应该是有效的
我猜是因为我使用的是JDK1.7,这个类已经不存在了
之后,我试图用我之前的答案解决问题,但没有帮助,我在
pom.xml
和web.xml
上进行了更改,错误更改为:java.lang.ClassNotFoundException:org.glassfish.jersey.servlet.ServletContainer
这应该是存在的
由于此错误,我找到了一个“新”解决方案:
使用Maven(原型),生成一个jersey项目,如下所示:
mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.0
这对我很有效!:) 我也面临类似的问题。通过以下链接中的步骤教程解决了此问题
- 需要注意的主要问题是jersey库应该正确地放置在TomcatWEB-INF/lib文件夹中。这是由上面链接中提到的Eclipse设置自动完成的。它将创建一个包含依赖JAR文件的WAR文件。否则,您将遇到ClassNotFoundException问题
- 第二个教程解释了如何创建一个生成和使用JSON输出的Web服务
这两个链接都很好地说明了如何工作,并节省了大量时间。您必须在web.xml中替换:
<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>
泽西岛休息服务
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
com.test.myproject
1.
为此:
<servlet>
<servlet-name>Jersey REST Service</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.test.myproject</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
泽西岛休息服务
org.glassfish.jersey.servlet.ServletCon
<servlet>
<servlet-name>Jersey REST Service</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.test.myproject</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.X</version>
</dependency>
"java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer"
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.8</version>
</dependency>
mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.26