struts.xml default-interceptor-ref 要素とは何か
default-interceptor-stack 要素とは何か
package
内で定義した interceptor-stack
の内
package
の各アクションにてデフォルトで参照させたい
interceptor
を定義する
具体的に
下記 struts.xml より interceptor-stack
に ロギングが定義されている
(action はまだ interceptor
を参照していない)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <constant name="struts.devMode" value="true" /> <constant name="struts.ui.theme" value="simple" /> <package name="top" extends="struts-default"> <interceptors> <interceptor name="myLogging" class="jp.ymatsukawa.interceptors.Logger" /> <interceptor-stack name="myStackLogging"> <interceptor-ref name="myLogging" /> </interceptor-stack> </interceptors> <action name="index" class="jp.ymatsukawa.top.Index"> <result name="success">/index.jsp</result> </action> </package> </struts>
全 action
で package.interceptors.interceptor-stack#name="mystackLogging"
が参照されることになったので default-interceptor-ref
を使い、目的を達成する
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <constant name="struts.devMode" value="true" /> <constant name="struts.ui.theme" value="simple" /> <package name="top" extends="struts-default"> <interceptors> <interceptor name="myLogging" class="jp.ymatsukawa.interceptors.Logger" /> <interceptor-stack name="myStackLogging"> <interceptor-ref name="myLogging" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="myStackLogging" /> <action name="index" class="jp.ymatsukawa.top.Index"> <result name="success">/index.jsp</result> </action> </package> </struts>
interceptors
を定義した後に
default-interceptor-ref#name="共通参照したい interceptor-stack"
を定義する
action
要素の下には interceptor-ref
の記載は入れない
default-interceptor-ref 定義後に
各 action で interceptor-ref を定義した時の挙動
default-interceptor-ref
を定義した後、各 action
で
interceptor-ref
を定義するとどうなるか
先に要約すると default-interceptor-ref
は実行されず
各 action
で定義された interceptor-ref
が実行される
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <constant name="struts.devMode" value="true" /> <constant name="struts.ui.theme" value="simple" /> <package name="top" extends="struts-default"> <interceptors> <interceptor name="myLogging" class="jp.ymatsukawa.interceptors.Logger" /> <interceptor name="myOtherLogging" class="jp.ymatsukawa.interceptors.OtherLogger" /> <interceptor-stack name="myStackLogging"> <interceptor-ref name="myLogging" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="myStackLogging" /> <action name="index" class="jp.ymatsukawa.top.Index"> <interceptor-ref name="myOtherLogging" /> <result name="success">/index.jsp</result> </action> </package> </struts>
default-interceptor-ref(myLogging)
> action.interceptor-ref(myOtherLogging)
が実行されると思いきや
action.interceptor-ref(myOtherLogging)
のみ実行される
[参考元]
https://struts.apache.org/docs/how-do-we-configure-an-interceptor-to-be-used-with-every-action.html