Я пытаюсь направить от сервлета к JSP по настройке атрибута, но я получаю следующее исключение:Может не вперед после того, как ответ был совершен
java.lang.IllegalStateException: Может не вперед после того, как реакция была совершена
Просьба помочь.
Мой код:
public class setPassword extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, ClassNotFoundException, SQLException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
Connection co;
try {
Class.forName("com.mysql.jdbc.Driver");
co = DriverManager.getConnection("jdbc:mysql://localhost:3306/gift", "root", "");
Statement st = co.createStatement();
System.out.println("setpassword...........");
ResultSet rs = st.executeQuery("select * from generaldata");
System.out.println("setpassword...........111");
String userid = request.getParameter("username");
while (rs.next()) {
String us = rs.getString(2);
String ps = rs.getString(3);
System.out.println("setpassword...........222");
System.out.println(us);
System.out.println(userid);
if (userid.equals(us)) {
System.out.println(ps);
System.out.println("setpassword...........333");
if (ps.equals("")) {
String pass = request.getParameter("password");
String pass1 = request.getParameter("password1");
System.out.println("setpassword...........444");
if (pass.equals(pass1)) {
rs.updateNString(3, pass);
RequestDispatcher rdpassword = request.getRequestDispatcher("home.jsp");
rdpassword.forward(request, response);
System.out.println("setpassword...........555");
} else {
request.setAttribute("errorPassword", "Your Password does not match...!!!");
RequestDispatcher rdlogin = request.getRequestDispatcher("newuser.jsp");
rdlogin.forward(request, response);
System.out.println("setpassword...........666");
}
} else {
request.setAttribute("err", "Please note you are not a New User...!!!");
System.out.println("setpassword.................777");
RequestDispatcher rdNotNew = request.getRequestDispatcher("login.jsp");
rdNotNew.forward(request, response);
}
} else {
request.setAttribute("err", "Not a valid User...!!!");
System.out.println("setpassword.................788");
RequestDispatcher rdNotValid = request.getRequestDispatcher("login.jsp");
rdNotValid.forward(request, response);
}
System.out.println("setpassword.................888");
}
System.out.println("setpassword.................999");
rs.close();
st.close();
co.close();
} catch (Exception e) {
System.out.println(e);
} finally {
out.close();
}
}
пожалуйста вставьте выход – Koitoer
Если запрос переадресован один раз ** перед **, цикл завершается тогда, цикл будет продолжаться даже после перенаправления запроса, который будет пытаться перенаправить запрос еще раз из другого (или, возможно, того же, в зависимости от оценки одного из условий) блока 'if-else', вызывающий неуклюжие 'java.lang.IllegalStateException', которое нужно выбросить (это может показаться необычным). Вы можете использовать инструкцию 'break' соответствующим образом или переменную флага на лестнице' if-else-if', чтобы указать статус аутентификации и перенаправить запрос за пределы цикла с использованием этой переменной. – Tiny
Если вы проверяете аутентификацию пользователя, вы можете просто использовать один запрос с инструкцией подготовки, например 'select * from user_table, где user_email =? и user_password =? ', а затем' if (rs.next()) {// Учетные данные пользователя верны. Поэтому переадресовываем на домашнюю страницу} else {// Показывать сообщение с плохими учетными данными} '. Не нужно танцевать с петлей :) – Tiny