【问题标题】:HTTP Status 500 - Error instantiating servlet class com.sar.pkg.MyServletHTTP 状态 500 - 实例化 servlet 类 com.sar.pkg.MyServlet 时出错
【发布时间】:2019-07-29 19:20:12
【问题描述】:

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 - 实例化 servlet 类 com.sar.pkg.MyServlet 时出错

输入异常报告

消息实例化 servlet 类 com.sar.pkg.MyServlet 时出错

描述服务器遇到了一个内部错误,导致它无法完成这个请求。

异常 javax.servlet.ServletException:实例化 servlet 类 com.sar.pkg.MyServlet 时出错 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.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 无法使用修饰符“public”访问 com.sar.pkg.MyServlet 类的成员 sun.reflect.Reflection.ensureMemberAccess(未知来源) java.lang.Class.newInstance(未知来源) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.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 来消除此错误,并在运行项目之前对其进行清理。仍然坚持这一点。请帮忙。提前致谢。

【问题讨论】:

  • 你的课程应该是公开的。 tasktm 必须 是局部变量,而不是成员变量:否则您的 servlet 不是线程安全的。您没有正确防御丢失或无效的参数。 format() 方法返回一个您要丢弃的值。 Class.forName() 行自 2007 年以来就不再需要了。您已经公开了数据库密码。您在所有情况下都泄漏了PreparedStatement,以及成功和异常情况下的连接。打印您自己的错误消息而不是异常是不可接受的。你的代码格式很糟糕。
  • 你能帮帮我吗?我是 Java 编码的新手。
  • 我已经这样做了,非常详细。

标签: java apache tomcat web-applications


【解决方案1】:

您的 Servlet 类 com.sar.pkg.MyServlet 未公开。你的定义

    class MyServlet extends HttpServlet{  

应该是

    public class MyServlet extends HttpServlet{  

【讨论】:

    猜你喜欢
    • 2017-08-02
    • 2017-03-08
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多