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

拦截器与过滤器的区别

时间:2017-03-20 00:11:38      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:字母   回调   通过   独立   函数   反射   指定   提交数据   好处   

过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,
或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务
逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都
过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者
去除掉一些非法字符

拦截器,是在面向切面编程的就是在你的service或者一个方法,前调用一个
方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在
你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调
用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

拦截器与过滤器的区别 :
1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2. 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始
化时被调用一次

执行顺序 :过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。个人认为过
滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部
页面的处理);过滤通过后,拦截器将检查用户提交数据的验证,做一些前期的数据处理,
接着把处理后的数据发给对应的Action;Action处理完成返回后,拦截器还可以做其他
过程(还没想到要做啥),再向上返回到过滤器的后续操作。
面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,
面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这
在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样
代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。
但是人们也发现,在分散代码的同时,也增加了代码的重复性。什么意思呢?
比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,
我们就必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为
面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。
也许有人会说,那好办啊,我们可以将这段代码写在一个独立的类独立的方法
里,然后再在这两个类中调用。但是,这样一来,这两个类跟我们上面提到的独立的类
就有耦合了,它的改变会影响这两个类。那么,有没有什么办法,能让我们在需要的时
候,随意地加入代码呢?这种在运行时,动态地将代码切入到类的指定方法、 指定位
置上的编程思想就是面向切面的编程。
一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些
类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切
片中,等到需要时再切入对象中去,从而改变其原有的行为。 这样看来,AOP其实只是
OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则 从纵向上向对象中加入特
定的代码。有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为
三维了,由平面变成立体了。从技术上 来说,AOP基本上是通过代理机制实现的。
AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充。

拦截器与过滤器的区别

标签:字母   回调   通过   独立   函数   反射   指定   提交数据   好处   

原文地址:http://www.cnblogs.com/141116z/p/6582744.html

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