Struts – カスタム例外ハンドラの例
この<global-exception>の例をダウンロードする –
Struts-Global-Exception-Example.zip
Strutsフレームワークでは、デフォルトの古典的なHTTP Status 500エラーページではなく、カスタムエラーページを表示するために
<global-exception>
が使用されます。
デフォルトのエラーページは見栄えが悪く、プロフェッショナルではありません。また、エラーメッセージは、エンドユーザーにシステム情報を漏らすほど説明的です。
1. <global-exception>デフォルト例外ハンドラ
デフォルトのHTTP 500エラーページをカスタムの記述的なエラーページに置き換えるために、 “struts.config.xml”で宣言されたデフォルトの例外ハンドラの例を持つ
<global-exception>
があります。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://jakarta.apache.org/struts/dtds/struts-config__1__3.dtd"> <struts-config> <form-beans> //... </form-beans> <global-exceptions> <exception key="error.global.mesage" type="java.io.IOException" path="/pages/error.jsp"/> </global-exceptions> <action-mappings> //... </action-mappings> </struts-config>
上記では、デフォルトのStruts例外ハンドラ ”
org.apache.struts.action.ExceptionHandler
“は、ActionによってIOExceptionがスローされたときに呼び出され、
error.jsp
ファイルに転送されます。
キーは、メッセージリソースプロパティファイルのキーです。
#common module error message error.global.mesage = Ooooppps... Sometime wraong in this site, please come back later
-
error.jsp **
Struts Global Exception Example
2. <global-exception>カスタム例外ハンドラ
デフォルトの例外ハンドラでは、例外の処理方法を制御する方法がありません。ほとんどの場合、さらなる分析のために例外を記録する必要があるかもしれません。これを行うには、すべての例外をファイルシステムやデータベースのような別のデータストアに記録するカスタム例外ハンドラが必要です。
ここでは、
java.lang.Exception
を設定するカスタム例外ハンドラの例を示します。これにより、Actionによってスローされた例外が呼び出されます。カスタム例外ハンドラを作成するには、 ”
org.apache.struts.action.ExceptionHandler
“をサブクラス化してexecuteメソッドをオーバーライドする必要があります。
-
MyCustomExceptionHandler.java **
package com.mkyong.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); } }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://jakarta.apache.org/struts/dtds/struts-config__1__3.dtd"> <struts-config> <form-beans> //... </form-beans> <global-exceptions> <exception key="error.global.mesage" type="java.io.IOException" handler="com.mkyong.common.exception.MyCustomExceptionHandler" path="/pages/error.jsp"/> </global-exceptions> <action-mappings> //... </action-mappings> </struts-config>
上では、Actionによって例外がスローされると、デフォルト例外ハンドラの代わりにカスタム例外ハンドラMyCustomExceptionHandlerの
execute()
メソッドを呼び出します。