JSP 또는 서블릿에서 forward() 사용시 예외 발생하는 경우
- java.lang.IllegalStateException: Cannot forward after response has been committed

java.lang.IllegalStateException: Cannot forward after response has been committed
     at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:328)
     at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318)
     at org.apache.jsp.dispatcher_jsp._jspService(dispatcher_jsp.java:138)
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)


RequestDispatcher의 forward()는 현재 페이지의 로직을 처리하고 난 이후 제어를 호출하는 페이지로 넘기고 최종적으로는 제어가 넘어간 페이지에서 최종 결과를 브라우저로 출력하는 형태로 동작하게 됩니다. 



이때 forward()를 호출하는 시점에서 그 전 페이지(a.jsp) 에서 출력버퍼에 담아두었던 출력 내용들은 모두 깨끗이 비운 후에 제어를 넘기게 되는데(b.jsp) 만약 forward() 이전에 강제로 out.flush() 를 통해 버퍼의 내용을 브라우저로 출력하고 나서 forward()를 호출하는 경우에는 위와 같은 예외가 발생하게 됩니다.
<%
     out.flush(); //예외 발생 원인 
     RequestDispatcher dispatcher = request.getRequestDispatcher("/b.jsp");                 
     dispatcher.forward(request, response);
%>
cs

만약 이전에 출력했던 내용을 유지하면서 제어를 넘기고 싶다면 forward()가 아닌 include()를 사용하시기 바랍니다.


참고글
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,