with servlet respuesta reenviar que puedo llevado haya failed después committed cabo already java jsp servlets illegalstateexception

java - servlet - response already committed struts2



¿Cómo corregirlo? ¿No se puede llamar a sendRedirect() después de que se haya confirmado la respuesta? (3)

La causa raíz de la excepción IllegalStateException es que un servlet de Java está intentando escribir en la secuencia de salida (respuesta) después de que se haya confirmado la respuesta.

Siempre es mejor asegurarse de que no se agregue ningún contenido a la respuesta después de realizar el reenvío o la redirección para evitar la excepción IllegalStateException. Se puede hacer incluyendo una declaración de ''devolución'' inmediatamente al lado de la instrucción de reenvío o redirección.

JAVA 7 ENLACE OFICIAL

INFORMACIÓN ADICIONAL

Estoy tratando de pasar valores del servlet a la página jsp usando el siguiente código:

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(); } }

cuando corro mi página me sale:

Error

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)

Traté de usar:

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

Pero tengo el mismo error.

¿Cómo arreglar este error?


no puede llamar a sendRedirect () , después de haber usado forward () . Entonces, obtienes esa excepción.


ya ha reenviado la respuesta en el bloque catch:

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

así, no puedes volver a llamar al:

response.sendRedirect("usertaskpage.jsp");

porque ya está reenviado (comprometido).

Entonces, lo que puede hacer es: mantener una cadena para asignar dónde necesita reenviar la respuesta.

String page = ""; try { } catch (Exception e) { page = "error.jsp"; } finally { page = "usertaskpage.jsp"; } RequestDispatcher dd=request.getRequestDispatcher(page); dd.forward(request, response);