我的课程不是 servlet 错误

Posted

技术标签:

【中文标题】我的课程不是 servlet 错误【英文标题】:My class is not a servlet error 【发布时间】:2009-06-24 06:30:27 【问题描述】:

我有以下 servlet 代码

public void doPost(HttpServletRequest request, HttpServletResponse response)

    Backup bup = new Backup();
    bup.doBackup();

    response.setContentType("text/html");
    PrintWriter out;
    try 
        out = response.getWriter();

    out.println("You backed up your data - well hopefully");
    out.flush();
    out.close();
     catch (IOException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    


还有下面的堆栈跟踪

javax.servlet.ServletException:类 view.BackupServlet 不是 Servlet org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) java.lang.Thread.run(Thread.java:619)

根本原因

java.lang.ClassCastException: view.BackupServlet 不能强制转换为 javax.servlet.Servlet org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) java.lang.Thread.run(Thread.java:619)

web.xml 是

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-<br>app_2_4.xsd">
<display-name>Backup</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description>BackupServlet</description>
    <display-name>BackupServlet</display-name>
    <servlet-name>BackupServlet</servlet-name><br>
    <servlet-class>view.BackupServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>BackupServlet</servlet-name>
    <url-pattern>/BackupServlet</url-pattern>
  </servlet-mapping>
</web-app>`

【问题讨论】:

【参考方案1】:

你没有显示你的类声明 - 我猜你的类没有扩展 ServletHttpServlet

如果确实,那么检查您的部署中有多少个不同的 servlet.jar 文件 - 它可能是由两个不同的类加载器加载的。

【讨论】:

【参考方案2】:

包含方法doPost 的类必须扩展javax.servlet.Servlet,但最好是javax.servlet.HttpServlet

public class BackupServlet extends HttpServlet 
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response) 
     .
     .
     .
    

【讨论】:

【参考方案3】:

这很可能是您的服务器正在加载多个版本的 servlet 库(.jar 文件)。如果您使用 maven/gradle 作为构建工具,请确保将 servlet 库的范围更改为由服务器提供的范围。

【讨论】:

以上是关于我的课程不是 servlet 错误的主要内容,如果未能解决你的问题,请参考以下文章

jakarta.servlet.ServletException:类 [com.practice.MyServlet] 不是 Servlet

Apache Tomcat-javax.servlet.ServletException:我的类不是 Servlet

Servlet 类 org.restlet.ext.servlet.ServerServlet 不是 jakarta.servlet.Servlet

关于Eclipse中import javax.servlet.*出错

错误 404:javax.servlet.UnavailableException:SRVE0201E:Servlet [org.glassfish.jersey.servlet.ServletCon

课程信息管理系统(javabean + Servlet + jsp)