java.lang.ClassCastException:org.jersey.webservice.Login无法强制转换为javax.servlet.Servlet

时间:2011-09-27 17:04:26

标签: java tomcat servlets jersey jax-rs

我已经做了很多搜索,我无法解决这个问题。

我正在使用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等)。

你发现有什么不对吗? 我遵循文档,这不起作用。该死!

提前致谢。

1 个答案:

答案 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