Struts – カスタム例外ハンドラーの例
この
Strutsフレームワークでは、デフォルトの従来のHTTPステータス500エラーページの代わりに、<global-exception>を使用してカスタムエラーページを表示します。
デフォルトのエラーページは見苦しく、まったくプロフェッショナルではありません。 さらに、エラーメッセージは、システム情報をエンドユーザーに漏らすのに十分な説明です。
1. +デフォルトの例外ハンドラー
これは、「struts.config.xml」で宣言されたデフォルトの例外ハンドラーの例を含む<global-exception>で、デフォルトのHTTP500エラーページをカスタムの説明的なエラーページに置き換えます。
//... //...
上記では、アクションによってIOExceptionがスローされると、デフォルトのStruts例外ハンドラー「org.apache.struts.action.ExceptionHandler」が呼び出され、error.jspファイルに転送されます。 キーは、メッセージリソースプロパティファイルのキーです。
Common.properties
#common module error message error.global.mesage = Ooooppps... Sometime wraong in this site, please come back later
error.jsp
Struts Global Exception Example
2. +カスタム例外ハンドラー
デフォルトの例外ハンドラーでは、例外の処理方法を制御する方法はありません。 ほとんどの場合、さらに分析するために例外をログに記録する必要があります。 これを行うには、ファイルシステムやデータベースなどの別のデータストアにすべての例外を記録するカスタム例外ハンドラーが必要です。
これは、「java.lang.Exception」を構成して、アクションによってスローされた例外に対して呼び出されるようにするカスタム例外ハンドラーの例です。 カスタム例外ハンドラーを作成するには、「org.apache.struts.action.ExceptionHandler」をサブクラス化し、executeメソッドをオーバーライドする必要があります。
MyCustomExceptionHandler.java
package com.example.common.exception; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ExceptionHandler; import org.apache.struts.config.ExceptionConfig; public class MyCustomExceptionHandler extends ExceptionHandler{ private static final Logger logger = Logger.getLogger(MyCustomExceptionHandler.class); @Override public ActionForward execute(Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, HttpServletRequest request, HttpServletResponse response) throws ServletException { //log the error message logger.error(ex); return super.execute(ex, ae, mapping, formInstance, request, response); } }
//... //...
上記では、アクションによって例外がスローされると、デフォルトの例外ハンドラーではなく、カスタム例外ハンドラーMyCustomExceptionHandlerのexecute()メソッドが呼び出されます。