首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个简单页面跳转的空指针错误,

2012-01-24 
一个简单页面跳转的空指针异常,急。一个登录界面提交用户名和密码,数据跳转到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);

}

}

}

调用的logicbean
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。

还是把出错的异常信息贴出来吧
[解决办法]
测试下就能找出问题了

热点排行