ブロッキング学習アドバイザ

3082 ワード

struts 2は、actionが完了する必要がある汎用操作を挿抜可能に管理する.
システムは、ブロッキングのパラメータの2つの形式を指定します.
(1)ブロッキングを定義する際のパラメータ値の指定()
(2)ブロッカー使用時のパラメータ値の指定()
デフォルトのブロッキングの設定
パッケージとしてのサブエレメント
権限、ログなど、カスタムブロッカーが使用される場合があります.
カスタムブロッキングはcom.opensymphony.xwork 2.interceptor.Interceptorを実装する必要があります

public interface Interceptor extends Serializable {

    void destroy();
 
    void init();

    String intercept(ActionInvocation invocation) throws Exception;

}

これに加えて、destory()とinit()の空の実装を提供するInterceptorインタフェースを実装するAbstractInterceptorクラスも提供されます.
Intercept(ActionInvocation invocation)メソッドを実装すると,ブロックされたactionインスタンスを得ることができ,Actionを取得するとほぼすべての制御権を得ることができるinvocationパラメータを得ることができる.
アクションにブロッキングを指定すると、システムのデフォルトブロッキングまたはブロッキングスタックが機能しなくなり、手動でデフォルトブロッキングを導入する必要があります.
ブロックスタックに複数の参照ブロックを追加してパラメータ名が表示された場合どうしますか?
パラメータ名の変換:<ブロッカー名>.<パラメータ名>
しんにゅうしゃだんき
アクションに対してブロッカーを定義した場合、そのブロッカーはアクションのすべてのメソッド(execute,methodで定義されたメソッド)をブロックします.
メソッドフィルタ:MethodFilterInterceptorこのクラスはAbstractInterceptorサブクラスであり、このクラスはinterceptメソッドを書き換えている

 public String intercept(ActionInvocation invocation) throws Exception {
        if (applyInterceptor(invocation)) {
            return doIntercept(invocation);
        } 
        return invocation.invoke();
    }
...
 public void setIncludeMethods(String includeMethods)
...
public void setExcludeMethods(String excludeMethods)
...

つまりdoInterceptメソッドを書き換える必要があります.上の2つのsetメソッドは、1つはブロックを必要とするメソッドであり、1つはブロックを必要としないメソッドである.パラメータを指定するだけで
注:includeMethodsとexcludeMethodsの両方にメソッドが表示される場合、このメソッドはブロックされます.
ブロックの実行順序:前に配置されたブロックは、ブロックされる前のブロック動作が先に機能する.ブロッキングメソッドの後のブロッキング動作であれば,ユーザに後で機能する.
結果をブロックするリスナー
executeメソッドの実行が終了した後にresult実行を処理する動作を正確に定義するためにstruts 2は、ブロック内部に手動で登録されたブロック結果のためのリスナーを提供する.

public class myIterceptorListener implements PreResultListener{

	public void beforeResult(ActionInvocation invocation, String resultCode) {
		System.out.println("        "+resultCode);
		
	}
	
}
..
public String intercept(ActionInvocation invocation) throws Exception {
		
		invocation.addPreResultListener(new myIterceptorListener());//        
		
		
		converAction co=(converAction)invocation.getAction();
		System.out.println(name+"       :"+new Date());
		long start=System.currentTimeMillis();
		//             ,    ACTION execute  
		String result=invocation.invoke();
		System.out.println(name+"      ---"+"   Action    "+new Date());
		long end=System.currentTimeMillis();
		System.out.println(name+"      Action    "+(end-start)+"  ");
		return result;
	}