2012-01-23 6 views
1

私たちが持っていたレガシーコードでは、 "基本" 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/>

これに関する情報は非常に高く評価されます。

+0

*「例外がスローされた時点でページがレンダリングを停止するだけです」*実際には異なる原因がある可能性があります。最大のページのHTML出力と同じサイズに応答バッファーサイズを設定してください。例えば。 50KBなど。ところで、適切な方法は、すべてのJavaコードをJSPではなくサーブレットに置き、HTMLを生成するためにのみJSPを使用して、すべての例外に敏感なビジネスロジックがJSPで実行されないようにすることです。 – BalusC

答えて

2

try catchブロックまたは<c:catch></c:catch>ブロックのラップではなく、<%@ page %>ディレクティブのerrorPage属性を使用できます。

1.アプリケーションの他のすべてのJSPページで発生するエラーを処理する1つのエラーJSPページを作成します。 、ErrorHandlerのJSPページでは

<%@ page isErrorPage="true" %>` 

例外の詳細を取得するためにexception暗黙オブジェクトを使用します。ErrorHandlerのページとしてJSPページを指定するには、このJSPページディレクティブを使用します。

他のJSPページで2.IncludeのErrorHandler JSPページ、現在のページに発生した例外がある場合は、errorHandler.jspに要求を転送することを指定するには、このJSPディレクティブを使用して:

<%@ page errorPage="/errorHandler.jsp" %>

1

<c:catch>が動作するはずです。バックアップとして、<foo:page>クラスにTryCatchFinallyを実装して例外を処理することができます。

関連する問題