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()
メソッドを呼び出します。