servlet程序中抛出的java.lang.nullpointer异常

时间:2011-03-18 11:24:39

标签: java mysql servlets myeclipse

我正在为一个只有5个问题的在线考试创建一个3层Web应用程序。我使用html并设计了一个servlet来将数据发布到mysql数据库,我将其命名为'test',表格为'st1 ”。我使用MyEclipse Blue 8.6.1,它有一个内置的MyEclipse Tomcat 6.0.13。 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的日志。任何人都可以帮我克服这个例外吗?这是我的学术项目!在此先感谢!!

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

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

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

ans1.equals("True")

"true".equalsIgnoreCase(ans1)

甚至更好

Boolean.getBoolean(ans1) == true

即使请求中没有显示该字段,您也不会获得NPE。

答案 2 :(得分:1)

支持@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();
  }
}

答案 3 :(得分:0)

我想你可能会在文件s3.java第52行用NULL的任何参数结束

检查你到那里的参数是什么?