[서블릿/JSP] forward 사용시 Cannot forward after response has been committed 예외
Servlet&Jsp 2018. 8. 10. 16:00JSP 또는 서블릿에서 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()를 사용하시기 바랍니다.
참고글
'Servlet&Jsp' 카테고리의 다른 글
[서블릿/JSP] web.xml의 <jsp-file> 태그로 JSP 페이지 URL 설정하는 법. (1) | 2018.08.13 |
---|---|
[서블릿/JSP] JSP 페이지 초기화와 종료 메서드. jspInit(), jspDestroy() (0) | 2018.08.13 |
[서블릿/JSP] RequestDispatcher로 include() 하기 (0) | 2018.08.10 |
[서블릿/JSP] RequestDispatcher란. RequestDispatcher로 forward() 하기 (7) | 2018.08.09 |
[서블릿/JSP] <jsp:param> 액션태그와 사용자 요청 파라미터 겹칠 때 처리 우선순위 (0) | 2018.08.06 |