我已经做了很多搜索,我无法解决这个问题。
我正在使用Tomcatv7.0,Jersey和Eclipse构建Web服务。
这是根本原因:
java.lang.ClassCastException: org.jersey.webservice.Login cannot be cast to javax.servlet.Servlet
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
...
这是一个例外:
javax.servlet.ServletException: Class org.jersey.webservice.Login is not a Servlet
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
...
我有一个简单的课程:
package org.jersey.webservice;
import ...
@Path("/login") public class Login {
// This method is called if HTML is request
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello() {
return "<html> " + "<title>" + "Hello Andre" + "</title>"
+ "<body><h1>" + "Hello Andree" + "</body></h1>" + "</html> ";
}
}
这是我的web.xml:
`<?xml version="1.0" encoding="UTF-8"?>
<display-name>org.jersey.andre</display-name>
<servlet>
<servlet-name>Andre Jersey REST Service</servlet-name>
<servlet-class>org.jersey.webservice.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Andre Jersey REST Service</servlet-name>
<url-pattern>/rest</url-pattern>
</servlet-mapping>
</web-app>`
Login类位于org.jersey.webservice包中,在WEB-INF / lib中我导入了所需的jar(jersey-api,jersey-core等)。
你发现有什么不对吗? 我遵循文档,这不起作用。该死!
提前致谢。
答案 0 :(得分:2)
你在读什么教程?这不是声明Jersey Web服务的正确方法。它确实不是直接Servlet
,因为例外是试图告诉你。您需要使用指向包含webservice类的包的init参数声明主要的Jersey servlet容器。
<servlet>
<servlet-name>Andre 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>org.jersey.webservice</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Andre Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
另请注意,您应将其映射到路径/rest/*
而不是名称/rest
,否则您将无法使用http://example.com/context/rest/foo/bar
等路径信息。
无关,请考虑选择除org.jersey
之外的其他内容作为主要包。例如。 org.andreelias
。