桟橋のジャスパーは、getOutputStreamでIllegalStateExceptionをスローしますが、Tomcatではスローしません

StackOverflow https://stackoverflow.com/questions/608352

  •  03-07-2019
  •  | 
  •  

質問

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>

奇妙なバグ、奇妙な解決策、しかしそれは私にはうまくいきます!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top