CRUD与登录Servlet,JSP和Mysql登录implmentation

时间:2016-10-17 16:03:15

标签: java mysql jsp servlets java-ee

我正在学习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();  
    }  

正确的方法是什么?我不对的是什么?

2 个答案:

答案 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);