在struts.xml配置文件中,如果要定义拦截器,需要为拦截器制定一个拦截器。拦截器的定义适用<interceptor../>元素来实现。定义格式:
<interceptor name="拦截器A" class="拦截器实现类A"/>
<interceprot../>元素还可以定义<param.../>参数子元素,用来对拦截器的参数初始化,读者可以参考下面代码;
<!--定义拦截器或者拦截器栈-->
<interceptor name="拦截器A" class ="拦截器实现类A">
<!--定义拦截器参数-->
<param name="参数A">参数A初始化值</param>
<param name="参数B">参数B初始化值 </param>
... ....
</interceptor>
... ...
struts2中还可以定义一个拦截器栈,即有都个拦截器组成的拦截器组来实现特定的拦截功能。例如:可以将用户安全认证拦截器,日志记录拦截器,密码加密拦截器和其他相关拦截器组成一个拦截器栈,在一个业务控制器Action执行之前使用,比如用户注册Action,在执行该Action前来执行该拦截器栈,进行一系列公共功能方面的处理。
在配置文件中定义拦截器栈,使用<interceptor-stack.../>元素,该元素中需要定义子元素<interceptor-ref.../>,即该拦截器栈所包含的拦截器引用。参考下面示例:
<interceptors>
<!--定义拦截器-->
<intercepter name="interceptor1" class="interceptorClass1"/>
<intercepter name="interceptor2" class="interceptorClass2"/>
<intercepter name="interceptor3" class="interceptorClass3"/>
<!--将拦截器加入栈-->
<interceptor-stack name="myinterceptorStack">
<interceptor-ref name="interceptor1"/> 此处name除了可以是一个拦截器外还可以是个拦截器栈的名称
<interceptor-ref name="interceptor2"/> 见下例;
<interceptor-ref name="interceptor2"/>
</interceptor-stack>
</interceptors>
将拦截器栈basicStack包含到myStack栈中;
<!--定义一个名为“MyStack”的拦截器栈,其中包含了一个拦截器栈basicStack-->
<intereptor-stack name="MyStack">
<interceptor-ref name="basicStack"/>
<interceptor-ref name="Myinterceptor"/>
......
</interceptor-stack>
Struts2可以在使用拦截器和初始化拦截器是来定义拦截器参数。一般定义拦截器是使用<param.../>初始化参数值是拦截器的默认参数;而在使用拦截器是(一般在Action定义中使用拦截器)会动态指定拦截器参数值。拦截器参数初始化,如下:
<!--定义一个名为“MyStack”的拦截器栈,其中包含了一个拦截器栈basicStack-->
<interceptor-stack name="MyStack">
<interceptor-ref name="basicStack"/>
<interceptor-ref name="Myinterceptor"/>
<!--初始化拦截器参数-->
<param name="参数A“>参数A初始化值</param>
... ...
</interceptor-stack>
<action name="MyAction" class=“MyActionClass”>
<result name="success">/success.jsp</result>
<!--引用默认拦截器-->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="Myinterceptor"></interceptor-ref>
<!--在使用拦截器是指定拦截器参数-->
<param name="参数A">参数A初始化值</param>
</action>
注意:如果定义拦截器是和使用拦截器时都指定了不同的参数值,那么,使用拦截器时指定的参数值会覆盖定义时代参数值;定义拦截器时指定的但数值为该拦截器的默认参数值。
(注意使用defaultStack 和继承struts-default)