CRUD с сервлетом входа в систему, внедрение JSPand Mysql для входа в систему

#java #mysql #jsp #servlets #jakarta-ee

#java #mysql #jsp #сервлеты #джакарта-ee

Вопрос:

я изучаю CRUD и login. у меня проблемы с входом в систему. я не могу заставить его работать на стороне сервлета, у меня есть интерфейс 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;
}
  

для сервлета это то, что у меня есть

  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();  
    }  
  

Как правильно это сделать? и что я не делаю правильно?

Комментарии:

1. if (UserName.equals(UserName) … каково предполагаемое значение этого?

2. если он совпадает с данными в базе данных

3. Для меня это не имеет никакого смысла. Разве строка не будет всегда равна самой себе?

4. вот почему я здесь ищу ответы

Ответ №1:

Во-первых, здесь вы берете значения имени пользователя и пароля из запроса, возможно, с html-страницы.

 String UserName=request.getParameter("UserName");  
String Password=request.getParameter("Password");
  

Затем вы сравниваете эти значения, которые вы получаете, с самими собой

     if (UserName.equals(UserName)
        amp;amp; Password.equals(Password))
  

Таким образом, он всегда будет возвращать true.

Во-вторых, внутри вашего оператора if вы вызываете свою функцию validate, но вы не используете ее возврат, вы просто вызываете ее.

 dao.validate(UserName,Password);
  

Итак, вы, скорее всего, хотите сделать что-то вроде этого

 if (dao.validate(UserName, Password) {
    // user found
}
  

Комментарии:

1. это все еще подчеркивает dao, я не знаю, какой объект доступа к данным вызывать сейчас, поскольку все они помечены

2. что именно говорит флаг?

3. Похоже, вы не создали экземпляр dao. Вам нужно сделать что-то вроде: UsersDaoImplementation dao = new UsersDaoImplementation() , затем вызвать метод validate(), используя ваш новый объект dao.

Ответ №2:

Эти строки: if (UserName.equals(имя пользователя) amp;amp; Password.equals(пароль))

не имеет смысла, потому что сравнения не имеют функции. Вы сравнили переменную 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);