我正在学习CRUD和login.i我遇到登录部分的问题。我无法让它在servlet方面工作,我有接口userDao:
public interface UsersDao {
public boolean validate(String UserName, String Password);
}
UsersDaoImplementation类:
@Override
public boolean validate(String UserName, String Password) {
boolean status = false;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
String query = "SELECT * FROM Users WHERE UserName=? and Password=?";
preparedStatement = conn.prepareStatement( query );
preparedStatement.setString(1, UserName);
preparedStatement.setString(2, Password);
resultSet = preparedStatement.executeQuery();
status=resultSet.next();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return status;
}
对于servlet这是我拥有的
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String UserName=request.getParameter("UserName");
String Password=request.getParameter("Password");
HttpSession session = request.getSession(false);
if(session!=null)
session.setAttribute("UserName", UserName);
if (UsersDaoImplementation.validate(UserName, Password))
{
RequestDispatcher rd=request.getRequestDispatcher("/WEB-INF/views/jupiter/jupiter.jsp");
rd.forward(request,response);
}
else
{
out.print("<p style=\"color:red\">Sorry username or password error</p>");
RequestDispatcher rd=request.getRequestDispatcher("/WEB-INF/views/system/index.html");
rd.include(request,response);
}
out.close();
}
正确的方法是什么?我不对的是什么?
答案 0 :(得分:1)
首先,您可以从请求中获取UserName和Password值,可能来自html页面。
String UserName=request.getParameter("UserName");
String Password=request.getParameter("Password");
然后你将这些你自己的价值进行比较
if (UserName.equals(UserName)
&& Password.equals(Password))
所以它总会返回真实。
其次,在if语句中,您调用了验证功能,但是您没有使用它的返回,只需要调用它。
dao.validate(UserName,Password);
所以,你很可能想做这样的事情
if (dao.validate(UserName, Password) {
// user found
}
答案 1 :(得分:0)
这些行: if(UserName.equals(UserName)&amp;&amp; Password.equals(Password))
毫无意义,因为比较没有功能。您将变量Username与他自己进行了比较。
1 - RequestDispatcher rd=request.getRequestDispatcher("/WEB-INF/views/jupiter/jupiter.jsp");
2 - rd.forward(request,response);
3 - dao.validate(UserName,Password);
在第一步,你重定向,(第2行),在下一步之后,你验证(第3行)。 我认为你应该改变第2和第3行。
1 - RequestDispatcher rd=request.getRequestDispatcher("/WEB-INF/views/jupiter/jupiter.jsp");
2 - dao.validate(UserName,Password);
3 - rd.forward(request,response);