首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Struts2拦截器的应用

2012-10-08 
Struts2拦截器的使用如何使用struts2拦截器,或者自定义拦截器。特别注意,在使用拦截器的时候,在Action里面

Struts2拦截器的使用
如何使用struts2拦截器,或者自定义拦截器。特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器):
<interceptor-ref name="checkbox">
  <param name="uncheckedValue">0</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
(必须加,否则出错)


也可以改为对全局Action设置自己需要的拦截器,如下:


在struts.xml里面定义全局的配置设置

   <package name="struts-shop" extends="struts-default">
    <interceptors>
      <interceptor-stack name="myStack">
        <interceptor-ref name="checkbox">
          <param name="uncheckedValue">0</param>
       </interceptor-ref>
      <interceptor-ref name="defaultStack"/>      </interceptor-stack>
    </interceptors>
   <default-interceptor-ref name="myStack"/>(这句是设置所有Action自动调用的拦截器堆栈)
  </package>

struts-action.xml里面配置Action如下:
  <package name="LogonAdmin" extends="struts-shop">(这里扩展struts.xml里面定义的配置就可以了)
  <action name="logon" />

     拦截器的工作原理如上图,每一个Action请求都包装在一系列的拦截器的内部。拦截器可以在Action
执行直线做相似的操作也可以在Action执行直后做回收操作。



每一个Action既可以将操作转交给下面的拦截器,Action也可以直接退出操作返回客户既定的画面。



如何自定义一个拦截器?

自定义一个拦截器需要三步:

1 自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。

2 在strutx.xml中注册上一步中定义的拦截器。

3 在需要使用的Action中引用上述定义的拦截器,为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明
的情况下所有的Action都被这个拦截器拦截。



Interceptor接口声明了三个方法:

<interceptors>     <interceptor-stack name="myStack">        <interceptor-ref name="timer"/>        <interceptor-ref name="logger"/>        <interceptor-ref name="default-stack"/>     </interceptor-stack></interceptors>



<default-interceptor-ref name="myStack"/>



<action name="login"  class="tutorial.Login">

       <result name="input">login.jsp</result>

       <result type="redirect-action">/secure/home</result>

</action>



3 如何访问HttpServletRequest,HttpServletResponse或者HttpSession

有两种方法可以达到效果,使用ActionContext:

Map attibutes = ActionContext.getContext().getSession();

或者实现相应的接口:

HttpSession            SessionAware

HttpServletRequest     ServletRequestAware

HttpServletResponse    ServletResponseAware


文章转载自:http://www.java3z.com/cwbwebhome/article/article2/2933.html?id=1626

热点排行