拦截器,过滤器

特别提醒:请认真读,你会对过滤器和拦截器的执行逻辑有更好的理解。

阅读前提:你需要对过滤器和拦截器的代码逻辑有大概的了解。

过滤器:与web.xml中配置,依赖于web容器,利用方法回调。作用于request和response本身所携带的数据。

拦截器:一般配置于框架中,如Struts,spring,依赖于Java本身的特性,利用Java反射机制。作用于被请求的action,同时也可以执行过滤器中所进行的操作,拦截器可以获取被请求action的上下文,假如说action是一部手机,那么这部手机在拦截器眼中就是组成这部手机的一堆零件,从一般的角度我们只能看到手机华丽的外表(即action这个类的整体业务逻辑),但是拦截器就像工程师,可以任意修改和组装手机的内部结构,同时也可以添加额外的部件和功能,这其实也是Java反射机制的特性。


过滤器---拦截器的执行逻辑(重点在此)

过滤器的主要逻辑 在doFilter这个方法中,这个方法中之后又会调用 filterChain.doFilter(request, response)这个方法,这个filterChain.doFilter(request, response)方法的目的就是讲当前处理完的request和response传给下一个filter(过滤器)或者拦截器,就这样一级一级地传下去。然后我们要想到一个问题,在正常的程序执行过程中,如果调用了某个方法,那么当前程序必须等待被调用方法执行完并且返回数据以后才能继续执行,现在回到多个过滤器的情境下,request和response被一级一级的传到了action,此时action处理完业务以后返回一个字符串选择相应的返回页面,并将页面存放在response的输出流当中,这个时候最后一级action执行完毕并返回数据,然后action的上一级监测到他的下一级action执行完毕并返回了数据,那么他会继续执行,然后也执行完毕并返回数据;依次往上一级返,最终到达了第一个过滤器,这个过滤器也监测到他的下一级执行完毕,然后他自己继续执行方法调用之后的代码,执行完以后怎么办呢?我们必须想到,这第一个过滤器的执行肯定也是被他的上级调用了才会执行,至于上级是谁我们暂时就不用关心了。现在再看下边的图片来理解。(这里要注意:虽然有多个过滤器和拦截器,但是他们操作的是同一组request和response,因此表面上看下一级没有向上一级返回这一组数据,事实上最顶级的那个过滤器得到的是所有过滤器和拦截器修改以后的response和request,如果不理解这个说明你的基础还有些欠缺,建议重返基础然后再学高级,不要急于求成)。


个人觉得这个图本身有一定的误导性,好好琢磨上边的叙述,然后结合图例理解。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值