更新时间:2024年01月24日10时52分 来源:传智教育 浏览次数:
如果想对包下的Action使用相同的拦截器,则需要为该包中的每个Action都重复指定同一个拦截器,这样写显然过于频繁。为了解决此问题,Struts2中支持使用默认拦截器,它可以对其指定的包中的所有Action都起到拦截作用。一旦为某一个包指定了默认拦截器,并且该包中的Action未显示指定拦截器,则会使用默认拦截器。反之,若此包中的Action显示的指定了某个拦截器,则该默认拦截器将会被屏蔽。此时,如果还想使用默认拦截器,则需要用户手动配置该默认拦截器的引用。
配置默认拦截器需要使用:
<default-interceptor-ref>
元素,此元素为:
<package>
元素的子元素。其语法格式如下所示:
<default-interceptor-ref name="拦截器(栈)的名称"/>
在上述语法格式中,name属性的值必须是已经存在的拦截器或拦截器栈的名称。下面用该语法格式配置一个默认拦截器,示例代码如下所示:
<package name="default" namespace="/" extends="struts-default"> <!--声明拦截器--> <interceptors> <interceptor name="interceptor1" class="interceptorClass"/> <interceptor name="interceptor2" class="interceptorClass"/> <!--定义一个拦截器栈myStack,该拦截器栈包含两个拦截器和一个拦截器栈--> <interceptor-stack name="myStack"> <interceptor-ref name="interceptor1"/> <interceptor-ref name="interceptor2"/> <interceptor-ref name="defaultStack"/> </interceptors> <!--配置包下的默认拦截器,既可以是拦截器,也可以是拦截器栈--> <default-interceptor-ref name="myStack"/> <action name="login" class="com.ithiema.aciton.LoginAction"> <result name="input">/login.jsp</result> </aciton> </package>
在上述代码中,指定了包下面的默认拦截器为一个拦截器栈,该拦截器栈将会作用于包下所有的Action。
注意:每一个包下只能定义一个默认拦截器,如果需要多个拦截器作为默认拦截器,则可以将这些拦截器定义为一个拦截器栈,再将这个拦截器栈作为默认拦截器即可。