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は、次のようなインターフェースのソースコードを提供してくれます.
1) init():スクリーンショットが実行される前に呼び出すと、主にシステムリソースを初期化するために使用されます.
2) destruoty():init()に対応して、ブロックを実行して資源を廃棄するために使用します.
3) intercept():スクリーンの核心方法は、具体的なブロック操作を実現する.actionと同様に、この方法は論理ビューとして文字列を返します.スクリーンセーバーがactionを起動した場合、actionでexecute()方法で返された論理ビューを返します.逆の場合、カスタム論理ビューを返します.
通常はブロックを使ってリソースを申請する必要はありません.このためにStruts 2はAbstractInterceptor類を提供してくれました.この種類のinit()とdestroy()は全部空実現です.私たちは自分のスクリーンセーバーを開発します.このクラスを継承すればいいです.
ユーザーがログインしているかどうかを判定するブロックを作成します.コードは以下の通りです
struts.xmlに配置してください.
スクリーンショットというと、武侠ドラマの強盗たちがよく言っている言葉を思い出します.もしかしてプログラムの中にも「強盗」があります.言っているのは間違いないです.ブロックは強盗です.現実的な生活の中で、強盗の略奪の大部分は金銭で、もちろんその他の何がもあって、それではプログラムの中の“強盗”の略奪のはまた何ですか?あるいはプログラムの中でなぜ必要ですか?私達の日常のプログラミングには重複コードが欠かせません.例えば、あるところにコードを書きました.その後、このコードは他のところで同じように必要です.伝統的なプログラミングの中で必ずコピー、貼り付けの方法を取ります.このコードがこの二つのところにしか必要でないなら、このような方法を採用して、また過去と言いますが、もしシステムがこのコードに過剰に依存しているなら、つまりこのコードはシステムに多すぎます.もしその日にこのコードの中にあるところを発見したら、まだ改善しなければならないです.誰もこのようにする人はいないと思います.ソフトウェア開発において非常に重要な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: , 。