Struts2.0.9のInterceptors

感想おまちしてます!

リクエストをMappingされたActionに投げるとき、フレームワークはActionオブジェクトを呼び出す。しかし、Actionの実行前
に、別のオブジェクトによって処理を中断することができる。Actionの実行後も処理を中断できる。この機能を「インターセプタ」と呼ぶ。

Struts2 document Interceptors

スポンサーリンク

インターセプタの理解

ダブルクリック防止やValidation、ファイルアップロードなどの機能はインターセプタの機能を使っている。インターセプタの導入は自由にできるため、必要なときに必要なインターセプタを入れることができる。インターセプタはAction毎に設定可能。

Logger Interceptorを動かしてみる

Actionの開始ログ、終了ログを出力してくれるインターセプタ。

//struts.xml
<action name="userreg"
class="com.daipresents.struts209.action.UserRegAction">
<interceptor-ref name="logger"/>
<interceptor-ref name="defaultStack" />
<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>

インターセプタを設定するだけでActionの開始ログ、終了ログを出力してくれる。ただし、フォーマットとかログレベルを変えることができないみたいなので、自分で実装したほうがいいかも。

情報: Finishing execution stack for action //userreg
2007/10/19 16:39:17 com.opensymphony.xwork2.validator.ActionValidatorManagerFactory <clinit>
2007/10/19 16:39:20 com.opensymphony.xwork2.interceptor.LoggingInterceptor logMessage
情報: Starting execution stack for action //userreg

開始ログと終了ログが逆になってるのはバグみたい。(参考:takeuchi Nikki

インターセプタの実行順

インターセプタはコードの重複をふせぐAOPの考え方に基づき、処理の前後にすぐれた手段を提供する。

「com.opensymphony.xwork2.interceptor.PreResultListener」を実装したインターセプタはAction実行の後、結果を実行する前に動作する。

PreResultListener Javadoc