Мне интересно, как передать параметры между двумя сервлетами. Но это нечто другое ... Позвольте мне уточнить. У меня есть страница входа и пользователи в БД с их паролями. Если пользователь, созданный менеджером, не имеет пароля. Пользователь вводит только имя пользователя и нажимает кнопку «Ввод», тогда придет страница создания пароля. Тогда пользователь, который только что создал пароль, автоматически войдет в систему успешно. (Вот что. Я не хочу, чтобы пользователь повторно вводил свое имя пользователя и пароль «только что созданный» снова в 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.
Пожалуйста, помогите мне здесь. Спасибо заранее ...
И прежде чем вы идете с кодированием сервлета: НИКОГДА НЕ СРАВНИТЬ STRINGS В JAVA С == –