avicom의 신변잡기

Exception initializing page context 본문

LiNux / sTorAge

Exception initializing page context

avicom 2007. 2. 21. 20:36
제목 : Cannot create a session ..과 include
글쓴이: 안성주(guest) 2004/12/06 01:30:01 조회수:174 줄수:45
다음과 같은 에러가 발생했습니다.

문제점이 무엇인지 모르겠습니다. 
include 할때 

<jsp:include page="/concord.jsp" flush="true"/>

이렇게 했고 한 페이지의 include 문이 40개쯤 됩니다.
include 가 많아서 그런지요? 한 페이지의 생성요소가 많아서 include 파일 갯수를 
많이 줄이기는 힘들것 같구요. 

또는, include 할때 flush 를 false 로 하면 되는지요?

미치겠네요. 빨리 해결 방법을 찾고 싶네요.



2004-12-05 03:05:39 JspFactoryImpl: Exception initializing page context
java.lang.IllegalStateException: Cannot create a session after the response has been committed
        at org.apache.coyote.tomcat4.CoyoteRequest.doGetSession(CoyoteRequest.java:1911)
        at org.apache.coyote.tomcat4.CoyoteRequest.getSession(CoyoteRequest.java:1758)
        at org.apache.coyote.tomcat4.CoyoteRequestFacade.getSession(CoyoteRequestFacade.java:361)
        at org.apache.coyote.tomcat4.CoyoteRequestFacade.getSession(CoyoteRequestFacade.java:366)
        at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:268)
        at org.apache.jasper.runtime.PageContextImpl._initialize(PageContextImpl.java:138)
        at org.apache.jasper.runtime.PageContextImpl.initialize(PageContextImpl.java:114)
        at org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:175)
        at org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:154)
        at org.apache.jsp.concord_jsp._jspService(concord_jsp.java:49)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:575)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:498)
        at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:822)
        at org.apache.jsp.main_jsp._jspService(main_jsp.java:254)
        ...........



제목 : Re: 페이지 버퍼 크기를 늘려 주세요..
글쓴이:
이희승(anoripi) 2004/12/06 07:59:33 조회수:101 줄수:13
@page 던가? 에서 페이지의 버퍼 크기를 설정하는 옵션이 있습니다.

크기를 32768 이런식으로 크게 늘려 보시면 안날 겁니다.

그런데 페이지가 엄청 큰가 보군요.  HTML 을 최적화할 필요가 있다고 봅니다. CSS 등

으로요.

--
what we call human nature is actually human habit.
--
http://gleamynode.net/
제목 : Re: 그리고..자바 포럼을 찾아보니까
글쓴이: 안성주(guest) 2004/12/06 10:13:49 조회수:129 줄수:12
알려 주신것 감사합니다. 한번 고쳐 보겠습니다.

현재 프로그램 구조상 include 를 많이 하고 있는데(40개쯤) 각 include 에서 
output으로 결과를 내보내고 있습니다. 즉 각 include에 html 이 있는 거죠.
혹시 이것과 관련이 있는 건지...?

처음 include 에서 output 으로 결과를 내지말고 꼭 마지막에 output으로 결과를 내야 하는 건지요?  

너무 답답해서 sun 의 자바 포럼 사이트를 찾아 보니까. 이런 말 비슷한게 있어서요...

제목 : Re: session생성은 <head>태그이전에 만드셈 ;;
글쓴이:
김용한(md02) 2004/12/06 15:00:02 조회수:190 줄수:8
-건강이제일이라 (/ㅡ.ㅡ)/ 운동하세~

Cannot create a session after the response has been committed
--> 세션은 html헤더태그 생성하기전에 만들어줘야한다고 짧은지식이나마
    그렇게 알고있습니다.. ^^;; 만약 세션을 생성해주려면
    <head>태그이전에 만들어주시기를 ^^;; 고수님들 제생각이틀렸으면 마구채찍질을 
    쿠헐
제목 : Re: 세션은 페이지가 outputstream 으로 실제 flush 되기 전에만 생성되면 됩니다.
글쓴이:
이희승(anoripi) 2004/12/06 16:41:37 조회수:112 줄수:24
Cannot create a session after the response has been committed

세션은 아시다시피 HTTP 헤더의 쿠키 값으로 넘어가는 unique ID 일 뿐입니다.
컨테이너에서 이와 매칭하여 세션 개체를 얻어다 주는 것이죠. (구현에 따라 다를 수는 있겠지만요)

그러므로 HTTP Response 의 body 부분이 이미 스트림에 기록이 되었다면 세션을 생성할 수 없겠죠.

일반적으로 컨테이너들은 서블릿이나 JSP 페이지의 출력을 버퍼링합니다.  (성능상의 이유)
그리고 그 버퍼가 꽉 차게 되면 실제로 socket 에 flush 를 하게 되는데, 이 과정에서 HEADER 를 먼저
소켓에 기록해야 하는 것이죠.

이미 소켓으로 헤더를 다 쓰고 바디의 일부분까지 쓴 상황에서는 세션을 생성할 수 없는 것이죠.
그런데 이 문제를 해결하거나 다른 튜닝을 하기 위해 페이지의 버퍼 크기를 설정할 수 있습니다.
이 값을 페이지의 예상되는 크기로까지 늘리거나 하면 문제를 해결할 수 있습니다.

하지만 일반적으로 세션의 생성은 페이지 앞부분에서 일어나므로 문제가 되지 않습니다.

MVC 프레임워크를 사용하시거나 세션 생성부를 페이지 앞쪽으로 끌어올려도 될 듯 합니다.

--
what we call human nature is actually human habit.
--
http://gleamynode.net/