Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/10/2009, 17:52
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Problema hacer forward desde un servlet, no redirecciona a la pagina jsp

Hola,

Definitivamente es imposible saber con exactitud el motivo de la excepción, principalmente porque no sabemos cual es el código completo anterior a la excepción. Pero posiblemente te sea de alguna ayuda ...

Cuando el servidor ya ha enviado datos al cliente (browser), ya no puede 'cambiar la respuesta', porque ya envió 'parte de la respuesta'.

Por ejemplo:

Código Java:
Ver original
  1. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  2.     throws ServletException, IOException {
  3.         response.setBufferSize(0);
  4.         response.setContentType("text/html;charset=UTF-8");
  5.         request.getSession().setAttribute("Hello", "World!");
  6.         PrintWriter out = response.getWriter();
  7.         out.println("<html>");
  8.         out.println("<head>");
  9.         out.println("<title>Servlet redireccion</title>");
  10.         out.println("</head>");
  11.         out.println("<body>");
  12.         out.println("<h1>Servlet redireccion at " + request.getContextPath () + "</h1>");
  13.         for (int i = 0; i < 1000; i++) {
  14.             out.println("<p>&nbsp;</p>");
  15.         }
  16.         request.getRequestDispatcher("/hello.jsp").forward(request, response);
  17.         out.println("</body>");
  18.         out.println("</html>");
  19.         out.close();
  20.     }

En este ejemplo, genera la excepción:

Código:
GRAVE: StandardWrapperValve[redireccion]: PWC1406: Servlet.service() for servlet redireccion threw exception
java.lang.IllegalStateException: PWC1227: Cannot forward after response has been committed
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:377)
Porque se genera demasiada 'data' (en el ciclo for) y el servidor envía por pedacitos al cliente, cuando llega al forward, ya no puede cambiar la respuesta, porque el cliente ya recibió como 100 <p>.

Podrías revisar que no se genere nada en la respuesta ni en el encabezado (headers), antes de hacer el forward o include (en el caso del include creo que no existe este problema, que es global de cualquier lenguage de programación Web, sucede de forma parecida en PHP, ASP, etc).

Saludos,