2009-06-24 60 views
5

Tôi đã mã servlet sauLớp học của tôi không phải là một lỗi 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(); 
    } 

} 

Và stack trace sau

javax.servlet.ServletException: Lớp view.BackupServlet không phải là một 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 WEBC83) org.apache.tomcat.util.net.JIoEndpoint $ Worker.run (JIoEndpoint.java:454) java.lang.Thread.run (Thread.java:619)

nguyên nhân gốc rễ

java.lang.ClassCastException: view.BackupServlet không thể được đúc để 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 WEBC83) org.apache.tomcat.util.net.JIoEndpoint $ Worker.run (JIoEndpoint.java:454) java.lang.Thread.run (Thread.java:619)

và web.xml là

<?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>` 

Trả lời

12

bạn chưa thể hiện khai lớp học của bạn - tôi đoán là lớp học của bạn không mở rộng Servlet hoặc HttpServlet.

Nếu số làm, sau đó kiểm tra xem bạn có bao nhiêu tệp servlet.jar khác nhau trong triển khai của mình - có thể nó đang được tải bởi hai trình nạp lớp khác nhau.

3

lớp học của bạn có chứa các phương pháp doPost phải mở rộng javax.servlet.Servlet, nhưng tốt hơn là javax.servlet.HttpServlet

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

này rất có thể bạn có nhiều phiên bản của thư viện servlet (file .jar) được nạp các máy chủ của tôi. Nếu bạn đang sử dụng maven/gradle làm công cụ xây dựng, hãy đảm bảo rằng bạn thay đổi phạm vi của thư viện servlet thành phạm vi nếu nó được cung cấp bởi máy chủ.

Các vấn đề liên quan