2014-02-11 1 views
0

Я пытаюсь направить от сервлета к 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(); 
    } 
} 
+0

пожалуйста вставьте выход – Koitoer

+0

Если запрос переадресован один раз ** перед **, цикл завершается тогда, цикл будет продолжаться даже после перенаправления запроса, который будет пытаться перенаправить запрос еще раз из другого (или, возможно, того же, в зависимости от оценки одного из условий) блока 'if-else', вызывающий неуклюжие 'java.lang.IllegalStateException', которое нужно выбросить (это может показаться необычным). Вы можете использовать инструкцию 'break' соответствующим образом или переменную флага на лестнице' if-else-if', чтобы указать статус аутентификации и перенаправить запрос за пределы цикла с использованием этой переменной. – Tiny

+0

Если вы проверяете аутентификацию пользователя, вы можете просто использовать один запрос с инструкцией подготовки, например 'select * from user_table, где user_email =? и user_password =? ', а затем' if (rs.next()) {// Учетные данные пользователя верны. Поэтому переадресовываем на домашнюю страницу} else {// Показывать сообщение с плохими учетными данными} '. Не нужно танцевать с петлей :) – Tiny

ответ

0
  1. Вы должны поставить return сразу после того, как форвард.

  2. Вы должны поместить свои response.setContentType("text/html;charset=UTF-8"); и PrintWriter out = response.getWriter(); только внутри ветки, где вы не переадресовываете.

  3. Вам нужно выяснить способ закрытия соединения db перед переходом.

+0

только добавление возврата не работает, но я удалил 'response.setContentType ("text/html; charset = UTF-8"); ' и добавил возвращение; он отлично работал. – hussain

0

рабочий код .... я уточнил место, где я внес изменения в коде выше

общественного класс SetPassword расширяет 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"); 
     **int count = 0;** 

     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)) { 

       **count++;** 

       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"); 
         **return;** 
        } 
       } else { 
        request.setAttribute("error", "Please note you are not a New User...!!!"); 
        System.out.println("setpassword.................777"); 
        RequestDispatcher rdNotNew = request.getRequestDispatcher("login.jsp"); 
        rdNotNew.forward(request, response); 
        **return;** 

       } 
      } 
      **else{ 
       continue; 
      }** 
      System.out.println("setpassword.................888"); 
     } 

     **if(count == 0) { 
       request.setAttribute("error", "Not a valid User...!!!"); 
       System.out.println("setpassword.................788"); 
       RequestDispatcher rdNotValid = request.getRequestDispatcher("login.jsp"); 
       rdNotValid.forward(request, response); 
       return; 
      }** 

     System.out.println("setpassword.................999"); 

     rs.close(); 
     st.close(); 
     co.close(); 

    } catch (Exception e) { 
     System.out.println(e); 
    } finally { 
     out.close(); 
    } 
} 
Смежные вопросы