一个简单页面跳转的空指针异常,急。一个登录界面提交用户名和密码,数据跳转到servlet里去调用logicbean的方
一个简单页面跳转的空指针异常,急。
一个登录界面提交用户名和密码,数据跳转到servlet里去调用logicbean的方法来检查这个用户是否在数据库里存在了,但是怎么出现异常了,看了很久代码不知道哪出错了。
这是登录页
- Java code
<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="gb2312"%>
<html>
<head>
<title>123 </title>
</head>
<body>
<h2 align="center">
登陆界面
</h2>
<br>
<div align="center">
<form action="LoginServlet" method="post">
用户名:
<input type="text" name="userName" />
密码:
<input type="password" name="userPassword" />
<br>
<input type="submit" value="登录" />
<input type="reset" value="重置" />
</form>
</div>
<font color="red">
<%
String result=(String)request.getAttribute("error");
if(result!=null)
{
if("NOUSER".equals(result))
{
out.println("用户不存在");
}else{
out.println("密码错误");
}
}
%>
</font>
</body>
</html>
然后数据提交到servlet
- Java code
package news.control;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import news.logic.LoginLogicBean;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName=request.getParameter("userName");
String userPwd=request.getParameter("userPassword");
LoginLogicBean loginBean=new LoginLogicBean();
String result=loginBean.verify(userName, userPwd);
if("OK".equals(result))
{
request.getSession().setAttribute("user","userName");
request.getRequestDispatcher("/list.jsp").forward(request,response);
}else if("PWD".equals("result"))
{
request.setAttribute("error", "PWD");
request.getRequestDispatcher("/index.jsp").forward(request,response);
}else
{
request.setAttribute("error", "NOUSER");
request.getRequestDispatcher("/index.jsp").forward(request,response);
}
}
}
- Java code
package news.logic;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import news.comm.DataSource;public class LoginLogicBean { //用户名不存在密码就不用判断了 public String verify(String userName,String userPwd) { String result=null; Connection conn=null; Statement st=null; ResultSet rs=null; conn=DataSource.getConnection(); try { st=conn.createStatement(); rs=st.executeQuery("select password from user where username='"+userName+"'"); if(rs.next()) { if(userPwd.equals(rs.getString("password"))) { result="OK"; }else { result="PWD"; } } else{ result="no user"; } } catch (SQLException e) { e.printStackTrace(); }finally { try { if(rs!=null)rs.close(); if(st!=null)st.close(); } catch (SQLException e) { e.printStackTrace(); } } return result; } }
说是logicbean里的if(userPwd.equals(rs.getString("password")))
这行代码出错了,可我看不出问题所在,请大家帮忙。急!!
[解决办法]
MS是JSP页面就没有传值过去
[解决办法]
也许是userPwd为空的时候报出来的....
用if(userPwd==null && "".equals(userPwd))处理一下...
equals推荐使用 字符串.equals(变量) 的形式防止空指针错误
以上,喵~~~
[解决办法]
觉得lz做一些简单的测试就应该能找出问题
在这个之前if(userPwd.equals(rs.getString("password")))做一些输出语句,看是不是得到了正确的值之类的
还有如2楼提到的 if(userPwd == null .....) 先做个判断再进行其他操作
[解决办法]
lz告诉你个办法,要么通过ide断点调试,然后注意userName和userPwd 的即时值,或者通过System.out.println()的方法把它们的即时值打印到控制台,或者做非空验证if("".equals(userName)||userName==null){}这样的判断即可
[解决办法]
rs.getString("password")是空值
所以报空指针!!
[解决办法]
......
System.out.println("This is my input pwd: "+userPwd);
System.out.println("This is come from db :"+rs.getString("password"));
if(userPwd.equals(rs.getString("password")))
......
看下输出分别是什么,然后就知道错误在哪里了
[解决办法]
代码数据传递没看出什么问题
如2楼所说,每个equals之前都要考虑可能为null问题,加非空check。
还是把出错的异常信息贴出来吧
[解决办法]
测试下就能找出问题了
