2011-12-30 12 views
0

今日は奇妙な問題がありました。私は他のページに含まれているhead.jsp(out.flushで終わる)を持っています。ほとんどのページはこのout.flush()に問題がありません。私のページの1つがjboss 4.2.2 GAでIllegalStateExceptionで失敗しています。JSP out.flush()issue

関連するJavaファイルResponseFacade.javaを確認しました。 if(isCommitted)チェックのために問題が発生するのを見てください。

問題のあるページからincludeステートメントを削除しましたが、今は動作しています。 しかし、問題は、唯一のページがある間、他のページにこのページに問題がない理由は何ですか?

またはjspファイルが他のページに含まれている場合。このインクルードページでout.flush()を行う必要はありますか?

+0

あなたは** JSPにフラッシュする**必要はありません。 **全ページがレンダリングされる前にクライアントにいくつかのコンテンツを送る**。しかし、たとえあなたが明示的に 'flush 'を書いていなくても、コンテンツは最後にはフラッシュされます。 – bezmax

答えて

2

あなたのWebコンテナはもちろん、レスポンスの出力ストリームを必要に応じてフラッシュします。フラッシュする必要はありません。ところで、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、cookiesなど)を送信できなくなります。

flush()が完了した後(includeの後)、ページでHTTPヘッダーを送信しようとしている可能性があります。

0

私にとっては(Tomcat/Apache上のJSP)これが唯一の方法です。

Main.jsp

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

Flush.jsp(空白)

<% 
%>