1

提前致谢。我是 web 服务的新手,当我尝试使用 java 部署 restful web 服务时,它会生成一个异常。我正在使用带有 JAX-RS 的 RESTful Java来学习 Web 服务,根据本书第 3 章,我尝试构建示例,部署示例后会生成异常,我知道,我错过了一些东西,但我没有不知道我错过了什么。以下是我的示例代码。

<?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_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>RestfulTest</display-name>
<servlet>
<servlet-name>Rest</servlet-name>
<servlet-class>com.restfultest.controller.ShoppingApplication</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Rest</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

以下是课程

 public class ShoppingApplication extends Application {

private Set<Object> singletons = new HashSet<Object>();
private Set<Class<?>> empty = new HashSet<Class<?>>();
public ShoppingApplication() {
    singletons.add(new CustomerResources());
}

@Override
public Set<Class<?>> getClasses() {
    return empty;
}

@Override
public Set<Object> getSingletons() {
    return singletons;
}
  }

当发生异常后尝试部署应用程序时。

 java.lang.ClassCastException: com.restfultest.controller.ShoppingApplication cannot be cast to javax.servlet.Servlet
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)

这是我知道的愚蠢问题,ShoppingApplication不是 servlet 类,而是根据本书,它是 servlet 类。要调用此服务,我使用chromerestful 客户端。请建议我如何使用 chrome restful 客户端以及如何使用此客户端发送XMLJSON请求。

4

3 回答 3

1

这是由于Tomcat Container不了解而出现的问题JAX-RS。所以要定义JAX-RS我们需要添加第三方库的实现。当我添加Jerseylib 并Jersey在容器中添加 servlet 定义时,我的示例运行成功。以下是`web.xml

...............................
<servlet>
<servlet-name>Rest</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
  <init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>com.restfultest.controller.ShoppingApplication</param-value>
  </init-param>
</servlet>

<servlet-mapping>
<servlet-name>Rest</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
..................................
于 2013-05-19T08:22:18.230 回答
1

问题是你说你的类是一个不正确的 servlet。您所关注的文档中一定有问题。看看这个http://www.ibm.com/developerworks/library/wa-aj-tomcat/

于 2013-05-18T19:49:00.483 回答
1

你应该有

<servlet-name>com.restfultest.controller.ShoppingApplication</servlet-name>

没有servlet-class。Jersey 项目对部署 JAX-RS 1.1 应用程序的各种选项(包括这个特定案例)有很好的参考。

另请注意,这只适用于 Servlet 3.0。在早期的 servlet 规范中,您必须提供一个实现 JAX-RS 容器的实际 servlet 类,例如Jersey 的 ServletContainer

于 2013-05-18T19:58:34.747 回答