2013-09-12 5 views
0

Мне интересно, как передать параметры между двумя сервлетами. Но это нечто другое ... Позвольте мне уточнить. У меня есть страница входа и пользователи в БД с их паролями. Если пользователь, созданный менеджером, не имеет пароля. Пользователь вводит только имя пользователя и нажимает кнопку «Ввод», тогда придет страница создания пароля. Тогда пользователь, который только что создал пароль, автоматически войдет в систему успешно. (Вот что. Я не хочу, чтобы пользователь повторно вводил свое имя пользователя и пароль «только что созданный» снова в LOGIN.), Когда он делает создание паролей, тогда он может быть перенаправлен на нужную страницу. Но сервопривод pageforwards - это первый сервлет. Позвольте мне пояснить.Сложные отношения сервлета ... Возможно ли это?

Мои сервлеты - это LoginServlet (действие от loginPage.jsp), CreatePassServlet (действие от createPass.jsp).

Когда пользователь вводит свое имя пользователя LoginServlet проверяет свой пароль (он существует или нет), а если он не пересылает его с именем пользователя на страницу createPass.jsp, тогда пользователь вводит свой пароль, тогда CreatePassServlet создает свой пароль и сохраняет в БД, затем возвращается с помощью его имя пользователя и пароль информация к LoginServlet (который направляет его на нужную страницу)

Вот мои классы ...

LoginServlet

public class LoginServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 

public LoginServlet() { 
    super(); 
} 

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { 
    try { 
     int pEmployeeId; 
     String pName; 
     String pSurname; 
     String pUserName; 
     String pUserType; 
     String query; 
     String home = "/login.jsp"; 
     String username = request.getParameter("username"); 
     String password = request.getParameter("password"); 
     RequestDispatcher rd = request.getRequestDispatcher(home); 
     mysqlCon con = new mysqlCon(); 
     LoginService ls = new LoginService(); 


     if((password==null) || (password=="")){ 

      Statement stmt = con.getConnection().createStatement(); 
      query = "SELECT password FROM employee WHERE username='" 
        + username + "';"; 
      stmt.executeQuery(query); 
      ResultSet rs = stmt.getResultSet(); 
      if(rs.next()){ 

       String nextJSP = "createPassword.jsp"; 
       rd = request.getRequestDispatcher(nextJSP); 
       rd.forward(request, response);  

       return; 
      } 

     } 


     String getHashedPass = Md5HashPassword.Md5(password); 

     Statement stmt = con.getConnection().createStatement(); 
     query = "SELECT employee_id, name, surname, usertype, username FROM employee WHERE username='" 
       + username + "' AND password='" + getHashedPass + "';"; 
     stmt.executeQuery(query); 
     ResultSet rs = stmt.getResultSet(); 

     if (rs.next()) { 
      pEmployeeId = rs.getInt(1); 
      pName = rs.getString(2); 
      pSurname = rs.getString(3); 
      pUserType = rs.getString(4); 
      pUserName = rs.getString(5); 

      if (ls.loginCheck(username, getHashedPass) != false) { 
       Person tmp = new Person(); 

       tmp.setName(pName); 
       tmp.setSurname(pSurname); 
       tmp.setType(pUserType); 
       tmp.setUsername(pUserName); 
       tmp.setId((long) pEmployeeId); 
       HttpSession session = request.getSession(); 
       session.setAttribute("person", tmp); 

       if (pUserType.equals(UserType.MANAGER.toString())) { 

        String nextJSP = "managerHome.jsp"; 
        rd = request.getRequestDispatcher(nextJSP); 
        rd.forward(request, response); 
       } 

       else if (pUserType.equals(UserType.ADMIN.toString())) { 

        String nextJSP = "adminHome.jsp"; 
        rd = request.getRequestDispatcher(nextJSP); 
        rd.forward(request, response); 

       } 

       else if (pUserType.equals(UserType.USER.toString())) { 

        String nextJSP = "userHome.jsp"; 
        rd = request.getRequestDispatcher(nextJSP); 
        rd.forward(request, response); 
       } else { 

        String nextJSP = "login.jsp"; 
        rd = request.getRequestDispatcher(nextJSP); 
        rd.forward(request, response); 
       } 

      } 
     } else { 
      request.setAttribute("errorMessage", 
        "Login Failed. Your username or password is incorrect. "); 
      rd.forward(request, response); 

     } 

     con.getConnection().close(); 

    } catch (InstantiationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 

    } 

} 

protected void doGet(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 

} 

} 

CreatePassServlet ...

public class CreatePassServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 


public CreatePassServlet() { 
    super();  
} 




protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    mysqlCon con=new mysqlCon(); 
    String password=request.getParameter("password"); 
    String passwordcheck=request.getParameter("passwordcheck"); 

    if(password.equals(passwordcheck)){ 

     try { 
      String query; 
      String hashedPass = Md5HashPassword.Md5(password);  
      String username=request.getParameter("username"); 

      Statement stmt = con.getConnection().createStatement(); 
      query = "UPDATE employee SET password='"+ hashedPass +"' WHERE username='"+ username +"';"; 
      stmt.executeUpdate(query); 

      request.setAttribute("username", username); 
      ServletContext sc = getServletContext(); 
      RequestDispatcher rd = sc.getRequestDispatcher("/LoginServlet"); 
      rd.forward(request, response); 

     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

    else{ 
     RequestDispatcher rd=request.getRequestDispatcher("createPassword.jsp"); 
     request.setAttribute("errorMessage", 
       "Creation failed. Your passwords did not match, please try again. "); 
     rd.forward(request, response); 
    } 






} 





protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

} 

}

Страницы правильно ... Я получаю это когда я запускаю его ...

Когда я пытаюсь поддержать loginservlet продолжить, CreatePassServlet перенаправляет пользователя, как NULL и мой пароль. Я предполагаю, что я не могу передать свое имя пользователя снова в LoginServlet. Затем я получаю логин - неправильная ошибка пароля из loginServlet, потому что имя пользователя NULL.

Пожалуйста, помогите мне здесь. Спасибо заранее ...

+1

И прежде чем вы идете с кодированием сервлета: НИКОГДА НЕ СРАВНИТЬ STRINGS В JAVA С == –

ответ

0

Я только что увидел, что вы, вероятно, не устанавливаете hashedPass в объект запроса!

Вы можете сохранить информацию во многих местах. Одним из таких мест является ваш httpsession.

session.setAttribute("newPassword", param); 

В Servlets у вас есть 3 области, где вы можете хранить данные.

Применение

Session

Запрос

Кроме того, JSP имеет page возможности для сохранения данных.

См. http://www.fcet.staffs.ac.uk/gdm1/general/java/web/servlets/scopes.asp для краткого обзора того, как использовать эту область для сохранения данных и передачи других сервлетов.

+0

Спасибо за ваш ответ ... – Pitch

+0

Если этот ответ решает вашу проблему, вы можете подумать о принятии ответа. – gyan

+0

на самом деле я не мог найти, как я могу решить ... И я попробовал повторить его имя пользователя и пароль повторно, но на этот раз пароль не может быть сохранен в db, поэтому получить имя пользователя и пройти неправильную ошибку – Pitch

0

Если я правильно понял ваш код, когда вы выполните LoginServlet после CreatePassServlet, вы должны искать имя пользователя, используя request.getAttribute («имя пользователя»).нанизывать();

попробовать что-то вроде:

 String username = (request.getAttribute("username")==null)? 
request.getParameter("b"):request.getAttribute("username").toString(); 

вместо:

 String username = request.getParameter("username"); 
Смежные вопросы