`
CoderDream
  • 浏览: 471222 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

【张冰Struts2学习笔记】0403.struts.xml配置详解之三 拦截器配置

阅读更多

struts.xml 配置详解之三 拦截器配置

 

1.      拦截器( Interceptor )配置

拦截器能在action 被调用之前和被调用之后执行一些“代码”。Struts2 框架的大部分核心功能都是通过拦截器来实现的,如防止重复提交、类型转换、对象封装、校验、文件上传、页面预装载等等,都是在拦截器的帮助下实现的。

每一个拦截器都是独立装载的(pluggable) ,我们可以根据实际的需要为每一个action 配置它所需要的拦截器,例如,一个action 需要用来类型装换、文件上传,那么我们可以给它设置相应的两个拦截器。

1.1 、拦截器配置

代码清单 1 struts.xml 片段

< package name = "loginTest" extends = "struts-default">    

      < interceptors >

           <!-- 定义名为 timer 的拦截器 -->

           < interceptor name = "timer"

           class = "com.opensymphony.xwork2.interceptor.TimerInterceptor" />

           <!-- 定义名为 params 的拦截器 -->

           < interceptor name = "params"

class = "com.opensymphony.xwork2.interceptor.ParametersInterceptor" />

      </ interceptors >

 

      < action name = "login" class = "com.coderdream.action.LoginAction">

           < result name = "success"> /msg/loginSuc.jsp </ result >

          <!-- login action 指定拦截器引用,当 login action 被调用时,

                timer params 拦截器也会被调用 -->      

           < interceptor-ref name = "timer" />

           < interceptor-ref name = "params" />

      </ action >

</ package >

1.2 、拦截器栈配置

拦截器栈注意点:

1、 拦截器栈即引用其他拦截器,也可以引用其他拦截器栈;

2、 引用其他拦截器栈必须是当前包中 的栈,或者是“父”包中 的栈,如某包继承在默认包,则可以引用默认包中的栈;

代码清单 2 struts.xml 片段

< package name = "loginTest" extends = "struts-default">

      < interceptors >

           <!-- 定义名为 loginStack 的拦截器栈,拦截器栈可以包含其他拦截器栈,

           同时,该栈必须在本包或者 包中,如此处的 “struts-default” 包中 -->

           < interceptor-stack name = "loginStack">

                 < interceptor-ref name = "timer" />

                 < interceptor-ref name = "params" />

                 < interceptor-ref name = "basicStack" />

           </ interceptor-stack >

      </ interceptors >

 

      < action name = "login" class = "com.coderdream.action.LoginAction">

           < result name = "success"> /msg /loginSuc.jsp

          </ result >

           < result name = "input"> /msg /loginFail.jsp

          </ result >

           <!-- login actin 指定拦截器引用,引用名既可以是拦截器名,

                也可以是拦截器栈名 -->

           < interceptor-ref name = "loginStack" />

      </ action >

</ package >

1.3 、默认拦截器栈引用

代码清单 3 struts.xml 片段

< package name = "loginTest" extends = "struts-default">

      < interceptors >

           <!-- 定义名为 loginStack 的拦截器栈 -->

           < interceptor-stack name = "loginStack">

                 < interceptor-ref name = "timer" />

                 < interceptor-ref name = "params" />

                 < interceptor-ref name = "basicStack" />

           </ interceptor-stack >

      </ interceptors >

     

      <!-- 定义默认拦截器栈的引用 -->

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

 

      <!-- 包中的所有 action 都将使用默认的拦截器栈引用 -->

      < action name = "login" class = "com.coderdream.action.LoginAction">

           < result name = "success"> /msg/loginSuc.jsp </ result >

      </ action >

      < action name = "user" class = "com.coderdream.action.UserAction">

           < result name = "success"> /msg/userSuc.jsp </ result >

      </ action >

</ package >

struts 的默认配置文件的默认包中,定义了默认拦截器栈的引用:

代码清单 4 struts-default.xml 片段

< package name = "struts-default" abstract = "true">

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

</ package >

所以,如果在action 中定义了其他的拦截器引用,那么这个action 将不再使用默认的拦截器引用。

代码清单 5 struts.xml 片段

< package name = "loginTest" extends = "struts-default">    

      < action name = "login" class = "com.coderdream.action.LoginAction">

           < result name = "success"> /msg/loginSuc.jsp </ result >

          <!-- login action 指定拦截器引用,默认的拦截器不再起作用 -->      

           < interceptor-ref name = "timer" />

      </ action >

</ package >

 

我的联系方式: 85337464

我的博客: http://coderdream.iteye.com

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics