私たちが持っていたレガシーコードでは、 "基本" JSPファイルを取得し、ヘッダー、フッターなどをすべてスクロールするプロセスがありましたアプリケーション全体のJSPファイル。このプロセスがすべてのJSPに追加されたことの1つは、スクリプトレット内のJSP全体のtry-catchブロックでした。我々は最近、このプロセスを処分したとJSTLを使用して、任意のスクリプトレットを持たないためにオーバーたちのJSPを移動JSTLで例外をキャッチする適切な方法
<%
try
{
%>
.... all the rest of the JSP .....
<%
}
catch(Exception e)
{
Log.error(e);
}
%>
:だから、最後に、私たちのすべてのJSPは次のようになります。このスイッチを行う際に
<foo:page>
.... all the rest of the JSP .....
</foo:page>
、我々はその例外をキャッチする能力を失った:私たちは、だから今、私たちJSPは次のようになり、ヘッダー、フッターなどを行い、我々は基本的に各JSPを包むタグを作成しましたページの読み込み中に発生します。私は周りを見回して、<c:catch>
タグを見つけました。私はこれを私たちのページタグに入れようとしましたが、私たちが望むように動作させることはできません。私は、<c:catch>
タグをページタグの<jsp:doBody/>
タグのまわりに置くと、例外を捕まえることができ、それを使って何かできることが分かりました。ただし、この外部ページタグの他の部分にスローされた例外は検出されません。理想的には私たちのページタグ全体を<c:catch>
タグで囲むことにしましたが、私がそれを行うと例外を捕まえるようには見えません。ページは、例外がスローされた時点でレンダリングを停止します。
私は両方のケースで<c:catch>
タグの後に同じ
<c:if test="${!(empty pageException)}">
ERROR!
</c:if>
を持っていますが、私は実際に見る「ERRORを!」出典:<c:catch>
タグがすぐに周りにあるとき<jsp:doBody/>
これに関する情報は非常に高く評価されます。
*「例外がスローされた時点でページがレンダリングを停止するだけです」*実際には異なる原因がある可能性があります。最大のページのHTML出力と同じサイズに応答バッファーサイズを設定してください。例えば。 50KBなど。ところで、適切な方法は、すべてのJavaコードをJSPではなくサーブレットに置き、HTMLを生成するためにのみJSPを使用して、すべての例外に敏感なビジネスロジックがJSPで実行されないようにすることです。 – BalusC