2011-12-30 43 views
0

今天我有一個奇怪的問題。我有一個head.jsp(以out.flush結尾)正在被其他頁面包含。大多數頁面沒有問題,out.flush();但是我的一個頁面在jboss 4.2.2 GA上出現IllegalStateException失敗。JSP out.flush()問題

我檢查了相關的java文件ResponseFacade.java我認爲。並且看到由於if(isCommitted)檢查而發生該問題。

我剛剛從我的問題頁面中刪除了include語句,它現在正在工作。 但問題是,爲什麼其他頁面在這個頁面沒有問題的同時只有一個頁面?

或者其他頁面是否包含jsp文件。我需要out.flush()在這個包括的頁面?

+0

你不** **需要在JSP沖洗。在整個頁面被渲染之前,Flush會將一些內容發送給客戶端**。但無論如何,即使你沒有明確寫出「flush」,內容也會在最後被刷新。 – bezmax 2011-12-30 14:06:03

回答

2

您的Web容器當然會在需要時刷新響應的輸出流。你不需要任何調用刷新。順便說一句,JSP中的Java代碼無論如何都是不好的做法。

+0

如果你的意思是ResponseFacade的東西,它是應用服務器的一部分,而不是我的jsp頁面。 – 2011-12-30 14:35:45

+0

如果輸出已經被刷新(比如重定向),那麼你的JSP頁面當然在做一些無法工作的東西。我的答案是說你不需要手動刷新。應用服務器將爲你做。 – 2011-12-30 15:07:15

1

我沒有相同的設置,但有類似的問題。

隨着<% out.flush(); %>在我的jsp中,<jsp:include page="abc.jsp" />已無法工作。指定的頁面不包括在內。

我用<%@ include file="abc.jsp" %>

希望這有助於解決它。

0

當你flush()你發送緩衝區的內容給客戶端,然後清空緩衝區。 有沒有不好的做法,你可以刷新多次你需要的。請記住,JSP頁面的第一個flush()也會發送HTTP HEADER,並且緩衝區被標記爲已提交(status - > isCommitted)。 含義:此時您不能再發送HTTP HEADER(例如page_forward,cookies)。

機會是你試圖在flush()完成之後(包含之後)在頁面中發送一些HTTP HEADER。

0

這是我工作的唯一方法(JSP over Tomcat/Apache)。

main.jsp中

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

Flush.jsp(空白)

<% 
%>