Мой класс не является ошибкой сервлета - PullRequest
6 голосов
/ 24 июня 2009

У меня есть следующий код сервлета

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 не является сервлетом 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>`

Ответы [ 3 ]

13 голосов
/ 24 июня 2009

Вы не показали объявление своего класса - я предполагаю, что ваш класс не расширяется Servlet или HttpServlet.

Если он делает , то проверьте, сколько разных файлов servlet.jar у вас в вашем развертывании - возможно, он загружается двумя разными загрузчиками классов.

3 голосов
/ 24 июня 2009

Ваш класс, содержащий метод doPost, должен расширяться javax.servlet.Servlet, но предпочтительно javax.servlet.HttpServlet

public class BackupServlet extends HttpServlet {
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response) {
     .
     .
     .
    }
}
0 голосов
/ 23 августа 2017

Скорее всего, у вас на сервере загружается несколько версий библиотек сервлетов (файлы .jar). Если вы используете maven / gradle в качестве инструмента для сборки, убедитесь, что вы изменили область видимости библиотеки сервлета на область, если она предназначена для предоставления сервером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...