반응형
JBoss EAP 에러 로그에 아래와 같이 getOutputStream() has already been called for this response 에러가 발생하였습니다.
12:34:56.789 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/abc].[jsp]] (ajp-/10.xxx.xxx.xxx:9009-23) JBWEB000236: Servlet.service() for servlet jsp threw exception: java.lang.IllegalStateException: JBWEB000028: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:621) [jbossweb-7.5.23.Final-redhat-1.jar:7.5.23.Final-redhat-1]
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:191) [jbossweb-7.5.23.Final-redhat-1.jar:7.5.23.Final-redhat-1]
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:123) [jbossweb-7.5.23.Final-redhat-1.jar:7.5.23.Final-redhat-1]
at org.apache.jasper.runtime.Jsp.WriterImpl.flushBuffer(JspWriterImpl.java:116) [jbossweb-7.5.23.Final-redhat-1.jar:7.5.23.Final-redhat-1]
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:191) [jbossweb-7.5.23.Final-redhat-1.jar:7.5.23.Final-redhat-1]
... 생략 ...
해당 에러는 jsp가 servlet으로 변환될 때 자동적으로 writer 객체가 존재하는데 OutputStream을 사용할 경우 정상적으로 인식하지 못해 발생하는 오류일 가능성이 높습니다.
JSP파일에서 getOutputStream 관련 위의 에러가 발생하는 경우 getOutputStream()을 대신해서 getWriter() 호출 해주면 해결 됩니다.
OutputStream 객체를 사용하기 전 jsp 자체의 out 객체를 비워주는 AP 소스 코드를 추가하여 처리하길 권장드립니다.
OutputStream 객체 AP 소스 처리 예시는 아래와 같습니다.
response.getWriter()
try {
out.clear(); //out → jsp자체 객체
out=pageContext.pushBody(); //ㅔout → jsp자체 객체
OutputStream out = response.getOutputStream();
}
이렇게 OutputStream을 생성하기 전에 jsp자체의 out객체를 비워주고 사용해야 합니다.
반응형
댓글