Struts 2ブロック学習


一、何がブロックですか?
スクリーンショットというと、武侠ドラマの強盗たちがよく言っている言葉を思い出します.もしかしてプログラムの中にも「強盗」があります.言っているのは間違いないです.ブロックは強盗です.現実的な生活の中で、強盗の略奪の大部分は金銭で、もちろんその他の何がもあって、それではプログラムの中の“強盗”の略奪のはまた何ですか?あるいはプログラムの中でなぜ必要ですか?私達の日常のプログラミングには重複コードが欠かせません.例えば、あるところにコードを書きました.その後、このコードは他のところで同じように必要です.伝統的なプログラミングの中で必ずコピー、貼り付けの方法を取ります.このコードがこの二つのところにしか必要でないなら、このような方法を採用して、また過去と言いますが、もしシステムがこのコードに過剰に依存しているなら、つまりこのコードはシステムに多すぎます.もしその日にこのコードの中にあるところを発見したら、まだ改善しなければならないです.誰もこのようにする人はいないと思います.ソフトウェア開発において非常に重要なDRYルールに違反しています.重複コードは書かれていません.こんなに多くの話をしたら、私たちはなぜプログラムの中で「強盗」をする必要があるのか分かりますよね.この「強盗」とは、何かを強奪するものではなく、あるプログラムの実行前後に、動的に機能(以前書いた汎用コードブロック)を増やしたり、検査をしたりするためです.このブロッカーは一体どうやって実現されますか?実際にはJava中の動的エージェントで実現され、特に「デザインモード学習ノート(十六)—Proxyモード」を参照することができる.
二、スクリーンセーバーのStruts 2での応用
Struts 2フレームにとっては、大量の内蔵スクリーンセーバが大部分の操作を完了しました.paramsブロッキングのように、http要求におけるパラメータを解析して、アクションに対応する属性に値を付けます.Servlet-configブロッキングは要求のHttpServletRequest例とHttpServletResonseのインスタンスをActionに伝える責任があります.struts 2に内蔵されているスクリーンショットがたくさんあります.ここでは一つ一つ列挙しません.具体的には「Struts 2の中でstruts-default.xmlに関して、struts.xml、struts.propertiesファイルの詳細が分かります。」を参照してください.
では、どうやってstruts 2で自分のブロッキングを定義しますか?
非常に簡単なStruts 2は、次のようなインターフェースのソースコードを提供してくれます.
 
publicinterface Interceptor extends Serializable {

    void destroy();

    void init();

    String intercept(ActionInvocation invocation) throws Exception;

}

 
1)    init():スクリーンショットが実行される前に呼び出すと、主にシステムリソースを初期化するために使用されます.
2)    destruoty():init()に対応して、ブロックを実行して資源を廃棄するために使用します.
3)    intercept():スクリーンの核心方法は、具体的なブロック操作を実現する.actionと同様に、この方法は論理ビューとして文字列を返します.スクリーンセーバーがactionを起動した場合、actionでexecute()方法で返された論理ビューを返します.逆の場合、カスタム論理ビューを返します.
通常はブロックを使ってリソースを申請する必要はありません.このためにStruts 2はAbstractInterceptor類を提供してくれました.この種類のinit()とdestroy()は全部空実現です.私たちは自分のスクリーンセーバーを開発します.このクラスを継承すればいいです.
ユーザーがログインしているかどうかを判定するブロックを作成します.コードは以下の通りです
struts.xmlに配置してください.
 
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

@SuppressWarnings("serial")
public class CheckLoginInterceptor extends AbstractInterceptor {

    @SuppressWarnings("unchecked")
    public String intercept(ActionInvocation actionInvocation) throws Exception {
         System.out.println("begin check login interceptor!");

            //   Session     user

            Map session = actionInvocation.getInvocationContext().getSession();

            String username = (String) session.get("user");

            if (username != null && username.length() > 0) {

                //             。

                System.out.println("already login!");

                return actionInvocation.invoke();

            } else {

                //         ,  LOGIN

                System.out.println("no login, forward login page!");

                return Action.LOGIN;

            }

        }


    }

 
 
 
   
       ,     ,      

            。

<interceptors>

           <interceptor name="checkLogin" class="com.myblog.interceptor.CheckLoginInterceptor" />

</interceptors>

          Action      ?       ,  :

<action name=" " class=" " >

           <result> </result>

           <interceptor-ref name="checkLogin" />

</action>

       action          ,struts2             ,            。

<action name=" " class=" " >

           <result> </result>

           <interceptor-ref name="checkLogin" />

                     <interceptor-ref name="defaultStack" />

</action>

              ,       checkLogin     action    ,             。               。

<interceptors>

           <interceptor name="checkLogin" class="com.myblog.interceptor.CheckLoginInterceptor" />

           <!—-        -->

           <interceptor-stack name="mydefault">

              <interceptor-ref name="defaultStack" />

              <interceptor-ref name="checkLogin" />

           </interceptor-stack>

</interceptors>

<default-interceptor-ref name="mydefault" />

  ,struts2                 MethodFilterInterceptor ,    AbstractInterceptor ,   intercept(ActionInvocation invocation)          doInterceptor(ActionInvocation invocation)    。          ,     。                  。                ,     。            。

<interceptor-ref name="  ">

       <param name="exculdeMethods"></param>

       <param name="includeMethods"></param>     

</interceptor-ref>

exculdeMethods:        ,          。

includeMethods:        ,          。