一个简单页面跳转的空指针异常,急。

SecretValley 2008-03-26 01:35:46
一个登录界面提交用户名和密码,数据跳转到servlet里去调用logicbean的方法来检查这个用户是否在数据库里存在了,但是怎么出现异常了,看了很久代码不知道哪出错了。
这是登录页
<%@ 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

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
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")))
这行代码出错了,可我看不出问题所在,请大家帮忙。急!!
...全文
429 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
SecretValley 2008-03-26
  • 打赏
  • 举报
回复
我在方法里都用输出语句试了,但是控制台就是没有东西出来,只报刚刚贴的异常。WEBproject用断点测试还不会。。?最后连接类也都在这里了,代码没问题的话,数据库里那个记录肯定也没问题的。
package news.comm;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DataSource {

private static Connection conn;
private DataSource()
{
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/news","root","root");
} catch (ClassNotFoundException e) {

e.printStackTrace();
} catch (SQLException e) {

e.printStackTrace();
}

}
public static Connection getConnection()
{
if(conn==null)
{
new DataSource();
}
return conn;
}


}
表就一个user表 name和password
corsail 2008-03-26
  • 打赏
  • 举报
回复
测试下就能找出问题了
logi22 2008-03-26
  • 打赏
  • 举报
回复
代码数据传递没看出什么问题
如2楼所说,每个equals之前都要考虑可能为null问题,加非空check。

还是把出错的异常信息贴出来吧
hp5212000 2008-03-26
  • 打赏
  • 举报
回复
......
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")))
......


看下输出分别是什么,然后就知道错误在哪里了
cnjzy0106 2008-03-26
  • 打赏
  • 举报
回复
rs.getString("password")是空值
所以报空指针!!
SecretValley 2008-03-26
  • 打赏
  • 举报
回复

严重: Servlet.service() for servlet LoginServlet threw exception
java.lang.NullPointerException
at news.logic.LoginLogicBean.verify(LoginLogicBean.java:31)
at news.control.LoginServlet.doPost(LoginServlet.java:52)
这是错误提示,按道理表单参数肯定提交过去了,但是我试着在doPost方法一开始就输出语句,和在logicbean的检查
方法第一句输出语句,控制台都没任何输出。。
bt_lose 2008-03-26
  • 打赏
  • 举报
回复
lz告诉你个办法,要么通过ide断点调试,然后注意userName和userPwd 的即时值,或者通过System.out.println()的方法把它们的即时值打印到控制台,或者做非空验证if("".equals(userName)||userName==null){}这样的判断即可
SecretValley 2008-03-26
  • 打赏
  • 举报
回复
我输入的用户名和密码肯定是数据库存在的,即使输入为错了,你看上面的代码在logicbean里面,就不会去执行if(rs。next())直接返回最后的result=null吧.
hp5212000 2008-03-26
  • 打赏
  • 举报
回复
觉得lz做一些简单的测试就应该能找出问题
在这个之前if(userPwd.equals(rs.getString("password")))做一些输出语句,看是不是得到了正确的值之类的

还有如2楼提到的 if(userPwd == null .....) 先做个判断再进行其他操作
cangyue87 2008-03-26
  • 打赏
  • 举报
回复
更正2楼的错误:用"||"不用"&&"
cangyue87 2008-03-26
  • 打赏
  • 举报
回复
也许是userPwd为空的时候报出来的....
用if(userPwd==null && "".equals(userPwd))处理一下...

equals推荐使用 字符串.equals(变量) 的形式防止空指针错误

以上,喵~~~
michelecindy 2008-03-26
  • 打赏
  • 举报
回复
MS是JSP页面就没有传值过去

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧