2009-06-24 35 views
5

我有以下的servlet代碼我的班是不是一個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( Http11Proc essor.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>` 

回答

12

您還沒有表現出你的類聲明 - 我的猜測是你的班級不擴展ServletHttpServlet

如果它確實是,那麼檢查您的部署中有多少個不同的servlet.jar文件 - 可能是它由兩個不同的類加載器加載。

3

您包含此方法doPost類必須擴展javax.servlet.Servlet,但preferrably javax.servlet.HttpServlet

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

這是最有可能是你有servlet的庫(.jar文件)的多個版本加載我的服務器。如果您使用maven/gradle作爲構建工具,請確保您將servlet庫的範圍更改爲範圍(如果它旨在由服務器提供)。

相關問題