您可能会觉得这是一个重复的问题,但没有一个同名的问题可以解决我的问题。我使用Jersey 2.0在Eclipse中创建RESTful Web服务,我使用Tomcat 7.0作为我的服务器,我有以下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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<servlet-name>JAX-RS Servlet</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.shop.domain</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>/jaxrs/*</url-pattern>
</servlet-mapping>
</web-app>
我有一个名为Hello的简单类:
@Path("customers")
public class Hello {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getCustomer() {
return "hello";
}
}
我有一个名为jersey
的泽西岛图书馆:
每次我运行这个项目时,都会出现错误
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
有什么想法吗?
答案 0 :(得分:5)
虽然以上所有内容都适用(Eclipse不是最可靠的应用程序),但请确保已仔细检查了maven依赖项。你应该注意,对于球衣2.19我必须添加这两个maven依赖:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.19</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.19</version>
</dependency>
答案 1 :(得分:3)
等等,你说你有一个名为jersey
的泽西岛图书馆,你创建了一个User Library
并将其命名为jersey
吗?如果是这样,请尝试将您的泽西jar文件复制到 WebContent - &gt; WEB-INF - &gt; LIB 即可。
答案 2 :(得分:1)
我在Eclipse中遇到了这个问题。我的项目设置非常相似 - Jersey 2
,Tomcat 7
。我正在从eclipse里面运行tomcat,而且似乎在eclipse的某个地方忘记了如何正确地将库部署到tomcat。
我尝试将我的war文件手动部署到tomcat并通过startup.sh
启动它并且它工作正常,但是如果我通过eclipse启动它我获取我的web内容但是Jersey类不存在那么REST API不起作用。我的登录servlet运行正常,而不是泽西位。控制台有相同的错误:
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
启动时。所以它必然是eclipse如何将代码部署到tomcat的问题。我尝试进入eclipse服务器并清除工作目录,没有做任何事情。 (不是因为缺少课程)。
唯一有效的方法是在Eclipse中使用我的Servers配置并删除我的tomcat条目然后创建一个新的。我做到了,它立即修复了它。
答案 3 :(得分:1)
消息很简单,足以找出导致Jersey库不在类路径中的根本原因。
首先,您应该检查天气,是否在pom.xml中定义了球衣的依赖项。 如果不是,这里是您可以定义的依赖项。如果已在pom.xml中定义它,请忽略在pom.xml中添加依赖项 。
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.19</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.19</version>
</dependency>
解决方案–在部署程序集中添加Jersey库
1。在项目资源管理器中右键单击您的项目
2。打开项目的部署程序集配置。
3。在程序集中添加构建路径jar文件,以便可以将它们添加到 最终war文件中的lib文件夹。
4。更新后的程序集将如下所示。
单击确定。 现在您可以出发了。
答案 4 :(得分:0)
我也在观察同样的问题。我正在使用tomcat8和Maven。如果我构建动态Web项目并手动添加所有库,项目工作正常,但如果我使用Maven,它会出现以下错误:
SEVERE: Servlet [Jersey REST Service] in web application [/EmployeeManagement] threw load() exception
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1313)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1164)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:520)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:501)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:120)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1095)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1031)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4914)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5201)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
我在pom.xml文件中添加了以下maven依赖项:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.21</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.21</version>
</dependency>
答案 5 :(得分:0)
将 jersey jar 文件放在 WEB-INF / lib 中应该有效。
如果您无法将您的球衣jar文件放在 WEB-INF / lib 中,请尝试通过您的工作区手动复制粘贴并重新启动eclipse!这对我有用。
答案 6 :(得分:0)
对我来说,解决方法是这样做的:
Right click on Project -> Properties -> Java Build Path -> Libraries ->
Add Library... -> Server Runtime -> Apache Tomcat v7.0 -> Finish
我做的另一个步骤是在Maven中导入内容,但它不是必需的,因为没有它也可以正常运行。
但是,这是否有助于任何人
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
<scope>provided</scope>
</dependency>
将servlet jar放入WEB-INF / lib只会使事情变得更复杂,因为异常消息变得更加复杂和无关紧要
编辑:哦,对你的Maven项目进行更新项目也有帮助。
答案 7 :(得分:0)
将Jersey库添加到库
下的构建路径答案 8 :(得分:0)
我想补充一下,我遇到了同样的问题,@ Edin的答案也有效,但我使用的是 IntelliJ 。所以我想我会为Intellij添加一种方法(对于像我这样的未来人):