提前致谢。我是Web服务的新手,当我尝试使用java部署restful web服务时,它会产生异常。我按照RESTful Java with JAX-RS学习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类。要调用此服务,我使用chrome
restful client。请建议我如何使用chrome restful client以及如何使用此客户端发送XML
或JSON
请求。
答案 0 :(得分:1)
问题是你告诉你的类是一个不正确的servlet。您所关注的文档中必定存在问题。看一下这个http://www.ibm.com/developerworks/library/wa-aj-tomcat/
答案 1 :(得分:1)
你应该
<servlet-name>com.restfultest.controller.ShoppingApplication</servlet-name>
且没有servlet-class
。泽西项目对various options of deploying JAX-RS 1.1 applications有很好的参考,包括this specific case。
另请注意,这仅适用于Servlet 3.0。在早期的servlet规范中,您必须提供实现JAX-RS容器的实际servlet类,如Jersey's ServletContainer。
答案 2 :(得分:1)
出现此问题是因为Tomcat Container
不了解JAX-RS
。因此,要定义JAX-RS
的实现,我们需要添加第三方库。当我添加Jersey
lib并在容器中添加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>
..................................