2011-03-18 66 views
0

我正在为一个只有5个问题的在线考试创建一个三层web应用程序。我使用html并设计了一个servlet将数据发布到我已经命名的mysql数据库作为'测试',表格是'st1'。我使用MyEclipse Blue 8.6.1,它有一个内置的MyEclipse Tomcat 6.0.13。在doPost方法的servlet的编码()方法如下:在servlet程序中抛出的java.lang.nullpointer异常

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。任何人都可以帮我克服这个异常吗?它是我的学术项目!提前致谢 !!

回答

5

看看文件s3.java,线路52

3

我的猜测是,你是通过getParameter检索领域之一是不存在的,因此在null。当你在该领域拨打.equals()时,你将获得NPE。如果我们知道哪条线是#52,它会有所帮助。

第一步我会重写所有这些都像检查:

ans1.equals("True") 

"true".equalsIgnoreCase(ans1) 

甚至更​​好

Boolean.getBoolean(ans1) == true 

那么你不会得到NPE连如果该字段未在请求中呈现。从@Jan Zyka

1

支持答案

试试这个

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(); 
    } 
} 
0

我想你可能会在文件s3.java与NULL任何参数来结束,行52

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

相关问题