Статус HTTP 500 — Ошибка создания экземпляра класса сервлета com.sar.pkg.MyServlet.MyServlet

#java #apache #tomcat #web-applications

#java #apache #tomcat #веб-приложения

Вопрос:

MyServlet.java

     class MyServlet extends HttpServlet{  

    private static final long serialVersionUID = 1L;
    //private static final long serialVersionUID =102831973239L;
    static String  task;
    public MyServlet(){

    }
    String tm; 
     protected  void doPost(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
         task = request.getParameter("task");
         tm= request.getParameter("reminder_time");
         try {
             SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
             Date time=new Date();
             formatter.format(time);
        try{    
            Class.forName("com.mysql.jdbc.Driver");  
            Connection con =DriverManager.getConnection(  
            "jdbc:mysql://localhost:3306/reminder","sarthak","sar31thak");  
             String INSERT_RECORD = "insert into ToDo values(?, ?)";
                      PreparedStatement pstmt = null;
                      pstmt = con.prepareStatement(INSERT_RECORD);
                      pstmt.setString(1, task);
                      pstmt.setDate(2, (java.sql.Date) time);
                      int rs= pstmt.executeUpdate();

            if(rs!=0){
                response.sendRedirect("success.html");
                return;
                    }
            else{
                response.sendRedirect("error.html");
            }
            con.close();
        }
        catch(Exception e){ 
System.out.println("Got an EXCEPTION");}  
        } 
         catch (Exception e) {
            System.out.println("Got an ERROR");
        }
             }
  

web.xml

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Alert</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></description>
    <display-name>MyServlet</display-name>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.sar.pkg.MyServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/MyServlet</url-pattern>
  </servlet-mapping>
</web-app>
  

Что вызывает следующую ошибку

Статус HTTP 500 — Ошибка создания экземпляра класса сервлета com.sar.pkg.MyServlet.MyServlet

введите отчет об исключении

сообщение об ошибке создания экземпляра класса сервлета com.sar.pkg.MyServlet

описание Сервер столкнулся с внутренней ошибкой, которая не позволила ему выполнить этот запрос.

исключение javax.servlet.Исключение ServletException: ошибка создания экземпляра класса сервлета com.sar.pkg.MyServlet org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) org.apache.catalina.valves.Ошибка reportvalve.invoke(ошибка reportvalve.java:100) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 408) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process (AbstractProtocol.java:603) org.apache.tomcat.util.net .JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) java.util.concurrent.ThreadPoolExecutor.runWorker (неизвестный источник) java.util.concurrent.ThreadPoolExecutor$Worker.run (неизвестный источник) java.lang.Thread.run(неизвестный источник)

основная причина java.lang.Исключение IllegalAccessException: класс org.apache.catalina.core.DefaultInstanceManager не может получить доступ к члену класса com.sar.pkg.MyServlet с модификаторами «public» sun.reflect.Reflection.ensureMemberAccess(неизвестный источник) java.lang.Class.newInstance (неизвестный источник) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) org.apache.catalina.valves.Ошибка reportvalve.invoke(ошибка reportvalve.java:100) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 408) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process (AbstractProtocol.java:603) org.apache.tomcat.util.net .JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) java.util.concurrent.ThreadPoolExecutor.runWorker (неизвестный источник) java.util.concurrent.ThreadPoolExecutor$Worker.run (неизвестный источник) java.lang.Thread.run(неизвестный источник)

обратите внимание, что полная трассировка стека основной причины доступна в журналах Apache Tomcat / 7.0.47.

Я попытался устранить эту ошибку, используя другой serialVersionId и очистил проект перед его запуском. Все еще застрял на этом. Пожалуйста, помогите. Заранее спасибо.

Комментарии:

1.Ваш класс должен быть общедоступным. task и tm должны быть локальными переменными, а не переменными-членами: в противном случае ваш сервлет не является потокобезопасным. Вы не защищаете должным образом от отсутствующих или недопустимых параметров. format() Метод возвращает значение, которое вы отбрасываете. Class.forName() Строка не требуется с 2007 года. Вы раскрыли свой пароль к базе данных. Во всех случаях происходит утечка PreparedStatement и соединения как в случае успеха, так и в случае исключения. Печать вашего собственного сообщения об ошибке вместо исключения недопустима. Ваше форматирование кода отвратительно.

2. Можете ли вы мне здесь помочь? Я новичок в Java-кодировании.

3. Я уже сделал это, в мельчайших деталях.

Ответ №1:

Ваш класс сервлета com.sar.pkg.MyServlet не является общедоступным. Ваше определение

     class MyServlet extends HttpServlet{  
  

должно быть

     public class MyServlet extends HttpServlet{