안녕하세요. Harry입니다.
ERROR LOG#1
java.lang.IllegalStateException: Cannot forward after response has been committed
forward를 사용 시 Cannot forward after response has been committed 예외
1
2
3
4
5
6
|
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)
|
cs |
원인?
RequestDispatcher의 메서드 중 forward()는 현재 페이지의 로직을 처리 후 제어를 호출하는 페이지로 넘기게 됩니다.
즉, 제어가 넘어간 화면에서 최종 결과를 브라우저로 출력하는 형태로 동작하는 메서드입니다.
forward()를 호출하는 시점에서 그 전 request에서 출력 버퍼에 담아두었던 출력 내용들은
비워지게 되고 제어를 넘기게 됩니다.(A:호출 화면 -> B 화면)
만약 forward() 이전에 강제로 out.flush() 를 통해 버퍼의 내용을 출력하고 나서 forward()를 호출하는
경우에는 "java.lang.IllegalStateException:Cannot forward after response has been committed "
예외가 발생하게 됩니다.
위와 같이 out.flush();를 하고
request.setAttribute("url", url); 을 하하여 forward() 하게 되면 예외가 발생하는 것입니다.
따라서 이러한 경우에는 forward()의 사용이 아닌,
이전 화면의 내용을 유지한 상태에서 제어를 넘겨야 하므로, include(); 메서드를 사용하여야 합니다.
이상으로 에러 로그 기록을 마치겠습니다.
Harry 올림
'DEVELOPER HARRY > Good to know (ERROR, Shortcuts)' 카테고리의 다른 글
#1 소스 코드 하이라이터(Color Scripter) (0) | 2020.12.01 |
---|
댓글