2011-12-30 4 views
0

오늘 이상한 문제가있었습니다. 나는 다른 페이지에 포함되는 head.jsp (out.flush로 끝남)를 가지고있다. 대부분의 페이지에는이 out.flush()에 문제가 없습니다. 하지만 내 페이지 중 하나가 jboss 4.2.2 GA에서 IllegalStateException으로 실패합니다.JSP out.flush() 문제

관련 Java 파일 ResponseFacade.java를 확인했습니다. 그리고 if (isCommitted) 검사로 인해 문제가 발생하는 것을 확인하십시오.

문제가있는 페이지에서 include 문을 제거 했으므로 지금 작동 중입니다. 하지만 질문은; 단 하나의 페이지가있는 동안 다른 페이지가이 페이지에 문제가없는 이유는 무엇입니까?

또는 jsp 파일이 다른 페이지에 포함되는 경우. 포함 된 페이지에서 나가기 (flush)()해야합니까?

+0

당신은 ** 필요 ** JSP에서 플러시하지 않습니다. ** 전체 페이지가 렌더링되기 전에 ** 클라이언트에 일부 내용을 보내려면 플러시하십시오. 그러나 명시 적으로 'flush'를 쓰지 않더라도 콘텐츠는 결국 어쨌든 플러시됩니다. – bezmax

답변

2

웹 컨테이너는 물론 필요할 때 응답의 출력 스트림을 플러시합니다. 내뿜을 것을 요청할 필요가 없습니다. BTW, JSP로 Java 코드 어쨌든 나쁜 연습입니다.

+0

만약 당신이 ResponseFacade 물건을 의미한다면 그것은 응용 프로그램 서버의 일부가 아니라 내 JSP 페이지입니다. –

+0

JSP 페이지는 출력이 이미 플러시 된 경우 (예 : 리디렉션과 같이) 작업 할 수없는 작업을 확실히하고 있습니다. 내 대답은 수동으로 플러시 할 필요가 없다는 것입니다. 앱 서버가 대신 해줍니다. –

1

동일한 설정이 아니지만 비슷한 문제가 있습니다.

<% out.flush(); %>을 내 jsp에 넣으면 <jsp:include page="abc.jsp" />은 더 이상 작동하지 않습니다. 지정된 페이지가 포함되지 않았습니다.

나는이 도움이 <%@ include file="abc.jsp" %>

희망을 사용하여 그것을 해결.

0

flush()를 사용하면 버퍼 내용을 클라이언트로 보내고 버퍼를 비운다. 필요한만큼 여러 번 플러시 할 수 있다는 점에서 나쁜 습관은 없습니다.

JSP 페이지의 첫 번째 flush()는 HTTP 헤더도 보내고 버퍼는 커밋 됨 (status -> isCommitted)으로 표시된다는 점을 기억하십시오. 의미 :이 시점에서 더 이상 HTTP 헤더 (예 : page_forward, 쿠키)를 보낼 수 없습니다.

(포함) 이후에 flush()을 수행 한 후 페이지에서 일부 HTTP HEADER를 보내려고합니다.

0

나를 위해 일한 유일한 방법은 Tomcat/Apache 이상입니다.

(빈) Main.jsp

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

Flush.jsp

<% 
%>