この<global-exception>の例をダウンロードする –

Struts-Global-Exception-Example.zip

Strutsフレームワークでは、デフォルトの古典的なHTTP Status 500エラーページではなく、カスタムエラーページを表示するために

<global-exception>

が使用されます。


struts-global-exception-1、title = "struts-global-exception-1"

デフォルトのエラーページは見栄えが悪く、プロフェッショナルではありません。また、エラーメッセージは、エンドユーザーにシステム情報を漏らすほど説明的です。

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()

メソッドを呼び出します。

リファレンス

  1. Struts例外ハンドラ –

リンク://タグ/例外ハンドラ/[例外ハンドラ]

struts