码迷,mamicode.com
首页 > 其他好文 > 详细

struts(拦截器)

时间:2015-01-17 17:56:57      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

1. Struts2的拦截器只能拦截Action,拦截器是AOP的一种思路,可以使我们的系统架构更松散(耦合度低),可以插拔,容易互换,代码不改变的情况下很容易满足

    客户需求其实体现了OCP

2. 如何实现拦截器?(整个拦截器体现了责任链模式,Filter也体现了责任链模式)

    * 继承AbstractInterceptor(体现了缺省适配器模式)

    * 实现Interceptor

    范例:

     public class MyLogInterceptor extends AbstractInterceptor {

            @Override

             public String intercept(ActionInvocation invocation) throws Exception {

                   System.out.println("开始记录日志");

                   //继续执行(调用后面的拦截器(取决于actionInvocation放置拦截器的迭代器中是否存在拦截器)

                   //如果存在拦截器就执行拦截器,否则执行Action)

                   String resultCode = invocation.invoke();

                   System.out.println("结束记录日志");

                   return resultCode;

              }

       }

       invocation.invoke()表示若有下一个拦截器,执行下一个拦截器或若没有执行对应的action中的方法。

3. 如果自定了拦截器,缺省拦截器会失效,必须显示引用Struts2默认的拦截器。如果自定了拦截器,必须显示引用Struts2默认的拦截器:

    <interceptor-ref name="myLogInterceptor"/>

    <!-- 引用Struts2默认的拦截器 -->

    <interceptor-ref name="defaultStack"/>

4. 拦截器栈,多个拦截器的和。

    <interceptors>

              <!-- 自定义拦截器 -->

              <interceptor name="myInter" class="com.mumu.util.MyInterception"></interceptor>

              <interceptor-stack name="myStack">

                        <interceptor-ref name="myInter"></interceptor-ref> 

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

               </interceptor-stack>

    </interceptors> 

    <!-- 配置默认拦截器,使所有包中的action都生效 -->

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

5. 定义缺省拦截器<default-interceptor-ref>,所有的Action都会使用

6. 拦截器的执行原理,在ActionInvocation中有一个成员变量Iterator,这个Iterator中保存了所有的拦截器,每次都会取得Iterator进行next,如果找到了拦截器就会执行,

    否则就执行Action,都执行完了拦截器出栈

     (其实出栈就是拦截器的intercept方法弹出栈,一个个开始返回结果。) 

7. 全局拦截器(放在<package>下面)和方法拦截器(放置在action中)。拦截器的定义放在<package>下面,用

    <interceptors>

            <!-- 自定义拦截器 -->

            <interceptor name="myInter" class="com.mumu.util.MyInterception"></interceptor>

    </interceptors>

8. excludeMethods表示不拦截哪些方法。includeMethods表示拦截哪些方法。注意:多个方法用逗号分隔

    配置拦截器:

    <interceptor-ref name="myInter">
               <param name="excludeMethods">login</param>
    </interceptor-ref>

struts(拦截器)

标签:

原文地址:http://www.cnblogs.com/Jtianlin/p/4230761.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!