7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

インターセプタ(interceptor)

Posted at

インターセプタの概要

Struts2にはインターセプタ(interceptor)と呼ばれる、Actionクラスの前後に処理を挟み込む機能があり、デフォルトで様々なインターセプタが使われている。
インターセプタを大別すると2種類ある。

  • Actionクラス全体に仕掛けるものと
  • Actionクラスのpublicメソッド(Actionメソッド)単位に仕掛けるもの

メソッド単位に仕掛けるものについては、有効または無効なメソッド名を正規表現で指定する。
入力チェック(Validation)関連の機能はメソッド指定のインターセプタである。

インターセプタの実装方法

インターセプタのクラスはcom.opensymphony.xwork2.interceptorパッケージにある次の2つのどちらかを継承する。

  • AbstractInterceptor ( クラス全体 )
  • MethodFilterInterceptor ( メソッド指定 )

(または、Interceptorインタフェースを実装してもよい)

Interceptorを実装した例は以下のように。

public class SampleInterceptor extends AbstractInterceptor  {
	public String intercept(ActionInvocation invocation) throws Exception {
		// Action前処理 ////////

		// Actionの実行結果(returnした値)
		String retString = invocation.invoke();
		
		// Action後処理 ////////
		
		// 遷移先のresultを返す。
		// 例えばAction後処理で何か遷移先を変えたい場合にここで変更する。
		return retString;
	}
}

インターセプタを登録する

インターセプタの登録は、struts.xmlで行う。インターセプタの登録はinterceptorのname属性で名前を指定する。
登録した後は、Actionクラスで簡単に使えるように、インターセプタ・スタックを作成すると良い。
インターセプタ・スタックはインターセプタを複数積み上げたもので、たくさん積み上げて構築するインターセプタの定義を1つに集約できる。

<struts>
	<package name="sample-package" abstract="true" extends="json-default">
		<interceptors>
			<interceptor name="sample"
				class="lumi2.SampleInterceptor"></interceptor>
		</interceptors>
		<interceptor-stack name="sampleStack">
			<interceptor-ref name="basicStack" />
			<interceptor-ref name="sample" />
			<interceptor-ref name="validation">
				<param name="excludeMethods">input,back,cancel</param>
			</interceptor-ref>
			<interceptor-ref name="jsonValidation" />
			<interceptor-ref name="workflow" />
		</interceptor-stack>
	</package>
</struts>

インターセプタを利用にする

Actionクラスの利用例を次に示す。
struts.xmlのパッケージ名を@ParentPackageに指定すると、package要素で定義した内容を継承する。

@Namespace("/")
@ParentPackage("sample-package")
public class SampleDisplayAction extends ActionSupport {
	.........
}
7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?