早教吧 育儿知识 作业答案 考试题库 百科 知识分享

java.lang.NullPointerExceptioncontrol.Login.doPost(Login.java:78)publicclassLoginextendsHttpServlet{publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)Stringusername=request.getParameter("username");Stringuserpwd=r

题目详情
java.lang.NullPointerException control.Login.doPost(Login.java:78)
public class Login extends HttpServlet{
public void doPost(HttpServletRequest request,HttpServletResponse response)
String user_name =request.getParameter("user_name");
String user_pwd=request.getParameter("user_pwd");
if ((user_name == "") || (user_name==null)){
try{
String result="请输入用户名java";
request.setAttribute("message" ,result) ;
response.sendRedirect("login.jsp") ;
}catch(Exception e){
e.printStackTrace() ;
} }
if ((user_pwd == "") || (user_pwd==null) ){
try{
String result="请输入密码java";
request.setAttribute("message" ,result) ;
response.sendRedirect("login.jsp") ;
}catch(Exception e){
e.printStackTrace() ;
}
}
String sql= "select * from User where user_name='"+user_name+"' and user_psw= '"+user_pwd+"'" ;
Statement stmt = null ;
ResultSet rs = null;
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=Market" ,"sa","a");
stmt=conn.createStatement();
System.out.println("success");
}
catch(Exception ex)
{
ex.printStackTrace();
}
try {
rs =stmt.executeQuery(sql) ;
} catch (SQLException e1) {
e1.printStackTrace();
}
HttpSession session = request.getSession() ;
session.setAttribute("user_name", user_name) ;
try{
if (rs.next()){ 这是第78行
response.sendRedirect("success.jsp") ;
}else{
session.setAttribute("message", "用户名或密码不匹配.");
response.sendRedirect("fail.jsp") ;
}
}catch(SQLException e){
e.printStackTrace() ;
}
▼优质解答
答案和解析
提几点小建议:
1、在逻辑判断中要把是否为空放在前面if ( user_pwd==null || user_pwd.equals("") )
2、判断字符串是否为空应该用user_pwd.trim().length == 0,避免输入多个空字符
3、字符串比较不应该用==而应该用equals方法,user_name == "",
再来说空指针异常:
ResultSet rs = null;//前面声明为null
try {
//当这个地方发生异常时,异常被捕获,没有做任何处理,也就是说rs根本没有赋值成功
rs =stmt.executeQuery(sql) ;
} catch (SQLException e1) {
e1.printStackTrace();
//查询已经出错,要转发到出错页面,或者做其他处理
}
if (rs.next())//前面执行查询出错,rs为声明时的null,这里肯定会出空指针异常.
好的做法,当你声明一个对象为null时,在经过一系列赋值后,在使用前判断下这个对象是否为null.