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 originalprotected void processRequest(HttpServletRequest request, HttpServletResponse response)
response.setBufferSize(0);
response.setContentType("text/html;charset=UTF-8");
request.getSession().setAttribute("Hello", "World!");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet redireccion</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet redireccion at " + request.getContextPath () + "</h1>");
for (int i = 0; i < 1000; i++) {
out.println("<p> </p>");
}
request.getRequestDispatcher("/hello.jsp").forward(request, response);
out.println("</body>");
out.println("</html>");
out.close();
}
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,