Struts 2自身のインターセプタを作成する
それをダウンロードする –
Struts2-Create-Own-Interceptor-Example.zip
このチュートリアルでは、Struts 2で独自のインターセプタを作成する方法を示します。
要約手順:
-
クラスの実装を作成する
-
intercept(ActionInvocation呼び出し)
メソッドを実装します. -
struts.xml
にインターセプタを設定します. -
アクションにリンクしてください.
-
Struts 2インターセプタ** Struts 2には多くのレディセプタが用意されています。作成する前にhttp://struts.apache.org/2.0.14/docs/interceptors.html[available Struts 2インターセプタ]のリストを確認してください独自のインターセプタ。
-
独自のインターセプタを作成するための完全な例:
1.アクション
ユーザーの要求を転送してメッセージを印刷する単純なアクション。
-
HelloAction.java **
package com.mkyong.common.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport{
public String execute() throws Exception {
System.out.println("HelloAction execute() is called");
return SUCCESS;
}
}
2.インターセプタ
完全なインターセプタの例。
-
PrintMsgInterceptor.java **
package com.mkyong.common.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class PrintMsgInterceptor implements Interceptor{
//called during interceptor destruction
public void destroy() {
System.out.println("CustomInterceptor destroy() is called...");
}
//called during interceptor initialization
public void init() {
System.out.println("CustomInterceptor init() is called...");
}
//put interceptor code here
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("CustomInterceptor, before invocation.invoke()...");
String result = invocation.invoke();
System.out.println("CustomInterceptor, after invocation.invoke()...");
return result;
}
}
-
説明
インターセプタクラスは、
com.opensymphony.xwork2.interceptor.Interceptorインタフェース
を実装する必要があります。インターセプタの初期化中に、
init()
が呼び出されます。インターセプタ破壊、
destroy()
が呼び出されます。最後に、
intercept(ActionInvocation呼び出し)** メソッドの内部で作業を行うすべてのインターセプタコードを配置します。 -
invocation.invoke()
インターセプタのintercept()メソッドでは、invocation.invoke()
を呼び出してその結果を返す必要があります。これは、次のインターセプタまたはアクションを呼び出すためのメソッドです。
invocation.invoke()
メソッドを呼び出さなければ、アクションは続行されません。 -
destroy()は信頼できない
このメソッドは信頼できないため、
destroy()
の内部にコードを置くことはお勧めしません。アプリケーションサーバーが強制的にシャットダウンされたり、コマンドでkillされたりすると、
destroy()** は呼び出されません。
3. struts.xml
-
struts.xml ** ファイルでインターセプタを設定します。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="printMsgInterceptor"
class="com.mkyong.common.interceptor.PrintMsgInterceptor"></interceptor>
<interceptor-stack name="newStack">
<interceptor-ref name="printMsgInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<action name="helloAction"
class="com.mkyong.common.action.HelloAction" >
<interceptor-ref name="newStack"/>
<result name="success">pages/hello.jsp</result>
</action>
</package>
</struts>
4.デモ
サーバーの初期化中に、インターセプター
init()
メソッドが呼び出されます。
INFO: Overriding property struts.i18n.reload - old value: false new value: true 15 Julai 2010 11:37:42 AM com.opensymphony.xwork2.util.logging.commons.CommonsLogger info INFO: Overriding property struts.configuration.xml.reload - old value: false new value: true CustomInterceptor init() is called... 15 Julai 2010 11:37:42 AM org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-8080 15 Julai 2010 11:37:42 AM org.apache.jk.common.ChannelSocket init INFO: JK: ajp13 listening on/0.0.0.0:8009 15 Julai 2010 11:37:42 AM org.apache.jk.server.JkMain start INFO: Jk running ID=0 time=0/20 config=null 15 Julai 2010 11:37:42 AM org.apache.catalina.startup.Catalina start INFO: Server startup in 994 ms
URLを介してアクションにアクセスしている間:
INFO: Overriding property struts.i18n.reload - old value: false new value: true 15 Julai 2010 11:37:42 AM com.opensymphony.xwork2.util.logging.commons.CommonsLogger info INFO: Overriding property struts.configuration.xml.reload - old value: false new value: true CustomInterceptor init() is called... 15 Julai 2010 11:37:42 AM org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-8080 15 Julai 2010 11:37:42 AM org.apache.jk.common.ChannelSocket init INFO: JK: ajp13 listening on/0.0.0.0:8009 15 Julai 2010 11:37:42 AM org.apache.jk.server.JkMain start INFO: Jk running ID=0 time=0/20 config=null 15 Julai 2010 11:37:42 AM org.apache.catalina.startup.Catalina start INFO: Server startup in 994 ms CustomInterceptor, before invocation.invoke()... HelloAction execute() is called CustomInterceptor, after invocation.invoke()...
リファレンス
インターセプタのドキュメント]。
http://struts.apache.org/2.0.14/docs/building-your-own-interceptor.html
[Struts
2独自のインターセプターを構築する]