Got a NullPointerException in Servlet



*我已经创建了一个基本的servlet程序,如果用户给出了正确的USN编号,它将从数据库中获取数据,否则它将重定向到error.html每当我输入USN编号时,它都会显示NullPointerException。由于我使用的是Eclipse,所以没有错误的迹象。注意:我还创建了一个html文件来输入USN编号。

代码:

package com.abc.error;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GetResult extends HttpServlet {
/**
* 
*/
static final long serialVersionUID = 1L;
Connection con= null;
PreparedStatement pstmt=null;
ResultSet res=null;
public void init(){
try {
Class.forName("oracle.jdbc.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/XE","system","system");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
@Override
public void service(HttpServletRequest request, HttpServletResponse response) {
try
{   
pstmt = con.prepareStatement("SELECT * FROM VTURESULT_AUG WHERE USN =?");
String key = request.getParameter("USN");
if(key.length()!=12){
response.sendRedirect("/ServletWithError/error.html");
}
else
{
pstmt.setString(1,key);
res =pstmt.executeQuery();
if(res.next())
{
String usn = res.getString(1);
String name = res.getString(2);
int m1 = res.getInt(3);
int m2 = res.getInt(4);
int m3 = res.getInt(5);
PrintWriter pw =response.getWriter();
pw.println(usn+" "+name+" "+m1+" "+m2+" "+m3);
}
}
}
catch(SQLException | IOException e)
{
e.printStackTrace();
}
}
}

输出:

java.lang.NullPointerException
com.abc.error.GetResult.service(GetResult.java:36)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

如果发布的代码的行号与您的实际代码匹配,则stacktrace表示NPE在这一行:

pstmt.setString(1,key);

您可以通过在该行上设置断点来验证这一点。

我看不到你的实际代码,所以有几件事你应该使用更多的断点来检查:

  1. con为空吗?如果是这样,您的init()方法可能没有被调用,或者它在您的日志中抛出了一个您没有看到的异常。

  2. 将PreparedStatement声明下移到使用它的位置-在函数外声明它对您没有任何帮助:

    PreparedStatement stmt=内容prepare(…(;

  3. 当然,还要验证key是否为非空。

最新更新