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みてもかいてないしなー。




