您的位置:首页 > 编程语言 > Java开发

Struts2使用12 -- 拦截器2 -- 配置

2009-11-05 12:29 441 查看
 

如果要在Action中激活依赖注入功能(或其他任何由拦截器提供的功能),就必须要对Action进行配置。和其他元素一样,许多拦截器都已经提供了默认的配置项。你只需要确认一下Action所在的Package继承了“struts-default”package。
在配置一个新的拦截器之前,首先要对它进行定义。<interceptors … />和<interceptor … />标签都要直接放到<package>标签里面。像我们上面提到的那些拦截器,它们的配置项就是这样的:

<interceptors>
       …
       <interceptor name="autowiring"
class="…xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
</interceptors>
我们同时还要确保Action中应用了所需的拦截器。这可以通过两种方式来实现。第一种是把拦截器独立的分配给每一个Action:

<action name="my" class="MyAction" >
       <result>view.jsp</result>
       <interceptor-ref name="autowiring"/>
</action>
在这种情况下,Action所应用的拦截器是没有数量限制的。但是拦截器的配置顺序必须要和执行的顺序一样。
第二种方式是在当前的Package下面配置一个默认的拦截器:
<default-interceptor-ref name="autowiring"/>
这个声明也是直接放在<package … /> 标签里面,但是只能有一个拦截器被配置为默认值。
现在拦截器已经被配置好了,每一次Action所映射的URL接到请求时,这个拦截器就会被执行。但是这个功能还是很有限的,因为在大多数情况下,一个Action都要对应有多个拦截器。实际上,由于Struts2的很多功能都是基于拦截器完成的,所以一个Action对应有7、8个拦截器也并不稀奇。可以想象的到,如果要为每一个Action都逐一配置各个拦截器的话,那么我们很快就会变得焦头烂额。因此一般我们都用拦截器栈(interceptor stack)来管理拦截器。下面是struts-default.xml文件中的一个例子:

<interceptor-stack name="basicStack">
    <interceptor-ref name="exception"/>
    <interceptor-ref name="servletConfig"/>
    <interceptor-ref name="prepare"/>
    <interceptor-ref name="checkbox"/>
    <interceptor-ref name="params"/>
    <interceptor-ref name="conversionError"/>
</interceptor-stack>
这个配置节点是放在<package … /> 节点中的。每一个 <interceptor-ref … />标签都引用了在此之前配置的拦截器或者是拦截器栈。
我们已经看到了如何在Action中应用拦截器,而拦截器栈的用法也是一模一样的,而且还是同一个标签:

<action name="my" class="MyAction" >
       <result>view.jsp</result>
       <interceptor-ref name="basicStack"/>
</action>
默认拦截器的情况也是一样的——只需要把单个拦截器的名字换成拦截器栈的名字就可以了。
<default-interceptor-ref name="basicStack"/>
由上面的种种情况可以得出,当配置初始的拦截器与拦截器栈时,必须要确保它们的名字是唯一的。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息