【问题标题】:java.lang.nullpointer exception thrown in servlet programservlet 程序中抛出 java.lang.nullpointerexception
【发布时间】:2011-03-18 11:24:39
【问题描述】:

我正在为只有 5 个问题的在线考试创建一个 3 层 Web 应用程序。我使用 html 并设计了一个 servlet 来将数据发布到我命名为“test”的 mysql 数据库,表是“st1” '。我使用具有内置 MyEclipse Tomcat 6.0.13 的 MyEclipse Blue 8.6.1。 doPost()方法中servlet的编码如下:

try
{
    String url="jdbc:mysql://localhost:3306/test";
    Class.forName("com.mysql.jdbc.Driver");
    connect=DriverManager.getConnection(url,"root","root");
    message="Connection Sucessfull";
}
catch(ClassNotFoundException cnfex){
    cnfex.printStackTrace();
}
catch(SQLException sqlex){
    sqlex.printStackTrace();
}
catch(Exception excp){
    excp.printStackTrace();
}
seat_no=request.getParameter("Seat_No");
name=request.getParameter("Name");
ans1=request.getParameter("group1");
ans2=request.getParameter("group2");
ans3=request.getParameter("group3");
ans4=request.getParameter("group4");
ans5=request.getParameter("group5");
if(ans1.equals("True"))
    Total+=2;
if(ans2.equals("False"))
    Total+=2;
if(ans3.equals("True"))
    Total+=2;
if(ans4.equals("False"))
    Total+=2;
if(ans5.equals("False"))
    Total+=2;
try
{
    Statement stmt=connect.createStatement();
    String query="INSERT INTO st1("+"seat_no,name,marks"+")VALUES('"+seat_no+"','"+name+"','"+Total+"')";
    stmt.executeUpdate(query);
    stmt.close();
}

当我编译应用程序时,我不断收到这样的异常:

HTTP Status 500 - 

type Exception report
message: 
description The server encountered an internal error () that prevented it from fulfilling this request.
exception :
java.lang.NullPointerException
    s3.doPost(s3.java:52)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
note :The full stack trace of the root cause is available in the Apache Tomcat/6.0.13 logs

但我找不到任何可用于 MyEclipse Tomcat 6.0.13 的日志。谁能帮我克服这个例外?这是我的学术项目!提前致谢!!

【问题讨论】:

    标签: java mysql servlets myeclipse


    【解决方案1】:

    查看文件 s3.java,第 52 行。

    【讨论】:

      【解决方案2】:

      我的猜测是您通过getParameter 检索的字段之一不存在,所以它在null 中。当您在该字段上调用 ​​.equals() 时,您将获得 NPE。如果我们知道哪一行是 #52 会有所帮助。

      作为第一步,我将重写所有检查,例如:

      ans1.equals("True")
      

      "true".equalsIgnoreCase(ans1)
      

      甚至更好

      Boolean.getBoolean(ans1) == true
      

      那么即使请求中没有提供该字段,你也不会得到 NPE。

      【讨论】:

        【解决方案3】:

        @Jan Zyka 的支持回答

        试试这个

        if("True".equals(ans1))
            Total+=2;
        if("False".equals(ans2))
            Total+=2;
        if("True".equals(ans3))
            Total+=2;
        if("False".equals(ans4))
            Total+=2;
        if("False".equals(ans5))
            Total+=2;
        try
        {
           if(Total>0)// Just a condition.. !
           {
            Statement stmt=connect.createStatement();
            String query="INSERT INTO st1("+"seat_no,name,marks"+")VALUES('"+seat_no+"','"+name+"','"+Total+"')";
            stmt.executeUpdate(query);
            stmt.close();
          }
        }
        

        【讨论】:

          【解决方案4】:

          我认为您可能会在文件 s3.java 第 52 行以 NULL 的任何参数结尾

          检查你得到的参数是什么?

          【讨论】:

            猜你喜欢
            • 2013-12-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-05-02
            • 1970-01-01
            • 2014-12-24
            • 2015-03-06
            相关资源
            最近更新 更多