我对使用 Restful Web 服务非常陌生。我正在尝试使用 Tutorialspoint UserManagement 示例中的 Postman 从 Eclipse 运行一个简单的 Restful API。
我已经使用 Eclipse 创建了一个 WAR 文件,并将 war 文件部署到 servlet 容器中,根据我从以下链接说明中找到的将 war 文件部署到 tomcat中的内容,您将 war 文件复制粘贴到 apache tomcat 中的 webapp 文件夹中8.0.49 文件夹将以下链接粘贴到您的网络浏览器或 Postman http://localhost:8080/RestAPI_UserManagement/rest/UserService/user中。
但不断得到一个
Postman 中的 HTTP 500 错误,
<body>
<h1>HTTP Status 500 - Error instantiating servlet class org.glassfish.jersey.servlet.ServletContainer.class</h1>
<div class="line"></div>
<p>
<b>type</b> Exception report
</p>
<p>
<b>message</b>
<u>Error instantiating servlet class org.glassfish.jersey.servlet.ServletContainer.class</u>
</p>
<p>
<b>description</b>
<u>The server encountered an internal error that prevented it from fulfilling this request.</u>
</p>
<p>
<b>exception</b>
</p>
...
...
...
</body>
在 Eclipse 控制台中,我收到以下错误
SEVERE: Allocate exception for servlet Jersey Restful API
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer.class
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1335)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1163)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:542)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:523)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1091)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:817)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
我在我的项目文件夹中编写了以下代码(POJO 类、Rest API 和实现 Rest API 的业务逻辑)。这里是实现 Rest API 和 web.xml 的业务登录。
用户服务.java
package com.RestAPI;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/Userservices")
public class UserServices {
UserDao userDao = new UserDao();
@GET
@Path("User")
@Produces(MediaType.APPLICATION_XML)
public List<User> getUsers(){
return userDao.getUserList();
}
}
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_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>User Management</display-name>
<servlet>
<servlet-name>Jersey Restful API</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer.class</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.RestAPI</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Restful API</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
这是我的项目的文件结构。我已将所有 Jersey 库下载到我项目的 /Webcontent/WEB-INF/lib 路径中。
这是我的 catalina.out tomcat 日志。
/Volumes/Macintosh HD/Users/Roys_laptop/apache-tomcat-8.0.49/bin/catalina.sh: line 456: /usr/libexec/java_home:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk:/bin/java: No such file or directory
基于这个我的 catalina.out tomcat 日志,它说缺少一些变量。但我不确定那是什么,以及如何设置它。请帮忙...