Struts2.0.9 ExceptionInterceptor

Exception
Interceptorは、例外ハンドリングの中心機能を形成している。例外ハンドリングは例外を結果コードにマッピングすることができる。これは、
Actionが予期せぬ例外を投げる変わりに結果コードを投げているように扱うことができる。例外が発生したとき、例外をExceptionHolderでラップして、簡単に例外を扱えるようになっている。

引数 

logEnabled
任意。ログの有効無効(true or false)
logLevel
任意。ログレベル。デフォルトでDebug。(trace, debug, info, warn, error, fatal)
logCategory
任意。カテゴリを指定する場合に必要。デフォルトで「com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor」になる。

設定方法 

struts.xmlに以下の設定を記述

<global-results>
<result name="system_error">/error.jsp</result>
<result name="runtime_error">/error.jsp</result>
</global-results>

<global-exception-mappings>
<exception-mapping exception="java.lang.RuntimeException" result="runtime_error"/>
</global-exception-mappings>

<action name="userreg"
class="com.daipresents.struts209.action.UserRegAction">
<exception-mapping exception="java.lang.Exception" result="other_error"/>
<result name="success">/WEB-INF/jsp/complete.jsp</result>
<result name="input">/WEB-INF/jsp/userreg.jsp</result>
<result name="error">/WEB-INF/jsp/userreg.jsp</result>
</action>

RuntimeExceptionの場合や、システムとしてエラーの場合はerror.jspに遷移するようにしている。

error.jspには例外情報を出力させてみる。

//error.jsp
<P><s:property value="exception.message" /></P>
<P><s:property value="exceptionStack" /></P>

これで、Action内で例外が発生するとerror.jspに遷移してくれる。例外のハンドリングをActionに書かなくてもいいのがよい感じ。

Interceptorの拡張

例外を公開するためにカスタムハンドラを追加したい場合、publishExceptionメソッドをオーバーライドすることができる。デフォルトの実装では、スタックにExceptionHolderをプッシュする実装になっている。そこにlog処理などを追加することができる。

ExceptionMappingInterceptorの拡張

ExceptionMappingInterceptor Javadoc

うまくうごいてくんない。Documentみてもかいてないしなー。