Struts2を使用すると、特定のタイプのグローバル例外マッピングを定義できますException
。java.lang.Exceptionに対して1つを定義すると、他の場所にマップされていない例外のキャッチオールとして機能します。
<global-exception-mappings>
<exception-mapping exception="com.example.MyException result="myError" />
<exception-mapping exception="java.lang.Exception" result="error" />
</global-exception-mappings>
<global-results>
<result name="myError">/myError.jsp</result>
<result name="error">/error.jsp</result>
</global-results>
エラーJSP(*)では、log4jを使用してログに記録し、混乱を招くスタックトレースに直面することなく、ユーザーに「問題が発生しました」というエラーページを表示できます。
(*)より良い:例外をログに記録してから、StrutsにJSPをレンダリングさせて、ユーザーに問題が発生したことを通知するエラーアクション。ロギングコードでJSPを乱雑にする必要はありません。
すべてのコードの変更について:
コード全体にキャッチブロックをやみくもに追加しないでください。コードの一部で例外を処理できない場合は、それを伝播させてください(throws
必要に応じてメソッドシグネチャに句を追加してください)。スタックの特定のレベルで、スローされた例外をラップし、原因を特定して再スローするのに役立つ情報を追加することを検討してください。
catch (IllegalArgumentException ex) {
// Always pass the original exception along, never just the message.
// It's much easier to find the root cause that way.
throw new UpdateException("Failed to parse foo object: " + foo, ex);
}
また、空のキャッチブロックの誘惑に抵抗します。彼らは例外を飲み込み、あなたはあなたのアプリケーションで何かまたは何がうまくいかないかもしれないことに気付かないかもしれません。例外に興味がないことが確実でない限り、すべての例外をログに記録します。