2014-10-14 1 views
13

Я пытаюсь передать значения из сервлета JSP страницы, используя этот код:Как исправить Не удается вызвать sendRedirect() после того, как ответ был исправлен?

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

    PrintWriter out = response.getWriter(); 
    try { 
     System.out.println("try"); 

     String taskid=request.getParameter("id"); 
     convty = new Connectivity(); 
     con = convty.setConnection(); 
     st=con.createStatement(); 

     query="select * from task_table"; 

     rset=convty.getResultSet(query, con); 
     while(rset.next()) { 
      System.out.println("while"); 
      lst.add(rset.getString("task_id")); 
      lst.add(rset.getString("date")); 
      lst.add(rset.getString("project_name"));  
     } 
     rset.close(); 
     System.out.println("after while"); 

    } catch(Exception e) { 

     RequestDispatcher dd= request.getRequestDispatcher("error.jsp"); 
     dd.forward(request, response); 

    } finally { 
     System.out.println("finally1"); 
     HttpSession sessionvar = request.getSession(); 
     sessionvar.setAttribute("TaskData", "lst"); 

     response.sendRedirect("usertaskpage.jsp"); 

     lst.clear(); 
     out.close();    
    } 
} 

когда я запускаю мою страницу я получаю:

Ошибка:

java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed 
    org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:483) 
    src.Taskservlet.doPost(Taskservlet.java:108) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 

I пытался использовать:

RequestDispatcher dd=request.getRequestDispatcher("usertaskpage.jsp"); 
dd.forward(request, response); 

, но я получил ту же ошибку.

Как исправить эту ошибку?

ответ

13

вы уже направил ответ на вылов блока:

RequestDispatcher dd = request.getRequestDispatcher("error.jsp"); 

dd.forward(request, response); 

так, вы не можете снова вызвать:

response.sendRedirect("usertaskpage.jsp"); 

, так как он уже направляется (привержен).

Так что вы можете сделать это: сохранить строку, чтобы указать, где вам нужно перенаправить ответ.

String page = ""; 
    try { 

    } catch (Exception e) { 
     page = "error.jsp"; 
    } finally { 
     page = "usertaskpage.jsp"; 
    } 

RequestDispatcher dd=request.getRequestDispatcher(page); 
dd.forward(request, response); 
+0

благодарственные you.its работает отлично – MMMMS

+0

рад, что помог вам! –

2

вы не можете назвать sendRedirect(), после того, как вы уже использовали вперед(). Итак, вы получаете это исключение.

2

Основной причиной исключения IllegalStateException является Java сервлет пытается записать в выходной поток (ответ) после того, как ответ было совершено.

Всегда лучше следить за тем, чтобы контент не добавлялся в ответ после перенаправления или перенаправления, чтобы избежать исключения IllegalStateException. Это можно сделать, включив оператор «return» непосредственно рядом с оператором forward или redirect.

JAVA 7 OFFICIAL LINK

ADDITIONAL INFO

Смежные вопросы