桟橋のジャスパーは、getOutputStreamでIllegalStateExceptionをスローしますが、Tomcatではスローしません
質問
Tomcat 5.5.25で現在実行されているWebアプリケーションがあります。特にjspおよびUIの変更の迅速な更新時間を活用するために、Jetty 6に移植しようとしています。
JSPファイルはJSP 2.0に準拠しているため、maven jettyプラグインWebサイトで提案されている構成を使用して、mavenでjettyを実行しています。この設定は、ApacheのジャスパーJSPコンパイラバージョン5.5.15をロードします。 (Mavenリポジトリでも5.5.23を使用できますが、同じ結果になります。)
Jettyの下で、タイルを使用して構成されている私のホームページは、ServletResponseWrapperInclude.getOutputStream()のIllegalStateExceptionで爆発します。明らかにTomcatではこれを行いません。
私はタイルについて何を理解するのに苦労しており、それはジャスパーがTomcatではなく桟橋で不平を言う原因となります。
解決
これはあまり答えにはならないかもしれませんが、Tilesに空のタイルが含まれている場合にこのエラーが発生することがわかりました。
マスタータイルJSPを調べて、空のタイルへの参照を削除することで、この問題を解消します。
他のヒント
すごい-素敵な発見!私がつまずいたもう1つの解決策は、タイルインクルードを空/ null定義ではなく空の文字列として定義することです。
つまり、タイルを次のように定義した場合、説明したIllegalStateExceptionがヒットします。
<definition name="login" extends="main.layout">
<put name="title" value="Login" type="definition" />
<put name="headinclude" value="" type="definition" />
<put name="body" value="/WEB-INF/tiles/login.jsp" type="page" />
</definition>
一方、次のようにタイルを定義すると、例外はなくなります:
<definition name="login" extends="main.layout">
<put name="title" value="Login" type="definition" />
<put name="headinclude" value="" type="string" />
<put name="body" value="/WEB-INF/tiles/login.jsp" type="page" />
</definition>
奇妙なバグ、奇妙な解決策、しかしそれは私にはうまくいきます!