63 - 责任链模式之过滤器、拦截器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了63 - 责任链模式之过滤器、拦截器相关的知识,希望对你有一定的参考价值。

参考技术A 职责链模式常用在框架的开发中,为框架提供扩展点,让框架的使用者在不修改框架源码的情况下,基于扩展点添加新的功能。实际上,更具体点来说,职责链模式最常用来开发框架的过滤器和拦截器。本文通过 Servlet Filter、Spring Interceptor 这两个 Java 开发中常用的组件,具体讲讲它在框架开发中的应用

struts2入门之拦截器

1、拦截器的执行时间:在action对象创建之后,在具体的方法执行之前;

2、拦截器底层实现原理:用到AOP思想和责任链模式;AOP:面向切面编程,通俗的讲就是当某个功能模块要增加某一项功能时,尽可能不去修改源代码而是通过其他的方式来达到相同的效果,比如通过配置文件等方式;责任链模式和过滤链模式有点相似,过滤链模式是指比如,一个请求由多个过滤器进行过滤,每个过滤器进行放行之后才能到下一个过滤器,最后实现目的;但是责任链模式,比如要执行多个操作,有添加,修改,删除三个操作,首先执行添加操作,添加操作完成后,做类似于放行的操作;然后执行修改操作,修改完成后又做个类似于放行的操作;最后执行删除操作。

3、拦截器和过滤器的区别:

  过滤器原则上是可以过滤掉任何内容的,比如html、jsp、图片等,它是在服务器创建的时候就有了;

  拦截器只能拦截action中的方法,或者说只能拦截action。

4、自定义拦截器:(show my codes)另外说一下步骤:创建一个类继承MethodFilterInterceptor,然后实现里面未实现的方法,如下:

 

 1 import com.opensymphony.xwork2.ActionInvocation;
 2 import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
 3 
 4 public class MyIncepter extends MethodFilterInterceptor {
 5 
 6     @Override
 7     protected String doIntercept(ActionInvocation arg0) throws Exception {
 8         // 这里面进行逻辑判断
 9         // 如果可以通过,就执行
10         // arg0.invoke();
11         // 如果不能通过,就返回你将要跳转的页面
12         return null;
13     }
14 
15 }

最后配置action和这个自定义拦截器的联系如下:

 1 <package name="demo1" extends="struts-default" namespace="/">
 2         <!-- 自定义拦截器 -->
 3         <interceptors>
 4             <interceptor name="interceptor1" class="com.cczhao.struts.MyInceptor"></interceptor>
 5         </interceptors>
 6         <action>
 7             <!-- 调用自己的拦截器 -->
 8             <interceptor-ref name="interceptor1">
 9                 <!-- 自定义该action中的某些方法不拦截 -->
10                 <param name="excludeMethods">login,add,update</param>
11             </interceptor-ref>
12             <!-- 倘若你在该action中用到了struts2的默认拦截器了,自己又定义了拦截器,这里需要引用一下struts2的默认拦截器,否则,只会调用自己的拦截器,而不调用struts2默认拦截器-->
13             <interceptor-ref name="defaultStack"></interceptor-ref>
14             <result name="success">/hello.jsp</result>
15         </action>
16     </package>

 注意上面配置自定义拦截器和action的关系的时候,着重看我的注释。。。

 

以上是关于63 - 责任链模式之过滤器、拦截器的主要内容,如果未能解决你的问题,请参考以下文章

行为型设计模式之责任链模式

struts2入门之拦截器

Head First设计模式之责任链模式

浅谈Java五大设计原则之责任链模式

设计模式之策略模式与责任链模式详解和应用

JDK设计模式之——责任链