一个登录界面提交用户名和密码,数据跳转到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);
}
}}调用的logicbeanpackage 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")))
这行代码出错了,可我看不出问题所在,请大家帮忙。急!!
这是登录页<%@ 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);
}
}}调用的logicbeanpackage 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")))
这行代码出错了,可我看不出问题所在,请大家帮忙。急!!
解决方案 »
- java新手,之前写的socket的测试程序,可以连上,不知道现在就不可以了
- 关于Synchronized?
- 当收到输入窗口的"确定"按钮才更新数据库,"放弃"则不更新,请问调用该输入窗体的函数怎么获得输入窗口的选择结果?
- xml的格式化缩进,答对者百分相送
- 如何将list[]转为list啊?
- 帮忙调一下代码,高分报酬
- lookAndfeel的jar包怎么用?
- 请教
- 请问怎样弹出一个警告对话框
- zong suan neng shang csdn le ,ke xi wo lian shu ru fa dou bu hui zhang le,ji tian le ,
- 关于bytebuffer,请高手指教,急!谢谢!
- javaw.exe再次出现多余
用if(userPwd==null && "".equals(userPwd))处理一下...equals推荐使用 字符串.equals(变量) 的形式防止空指针错误以上,喵~~~
在这个之前if(userPwd.equals(rs.getString("password")))做一些输出语句,看是不是得到了正确的值之类的还有如2楼提到的 if(userPwd == null .....) 先做个判断再进行其他操作
严重: 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的检查
方法第一句输出语句,控制台都没任何输出。。
所以报空指针!!
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。还是把出错的异常信息贴出来吧
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