JavaWeb Filter 和 SpringMVC Interceptor

1.Filter

Filter 是java Web 中三大组件(Servlet、Filter、Listener)之一,是属于java web规范的组件。

过滤器是实现对请求资源(jsp、servlet、html)的过滤功能,是一个运行在服务器的程序,优先于请求资源(jsp、servlet、html)之前执行。

当浏览器发送请求给服务器的时候,先执⾏过滤器,然后才访问Web的资源。服务器响应Response,从Web资源抵达浏览器之前,也会途径过滤器。

典型用途如下:

  • 在 HttpServletRequest 到达 Servlet 之前,拦截客户的 HttpServletRequest。
  • 根据需要检查 HttpServletRequest ,也可以修改 HttpServletRequest 头和数据。
  • 在 HttpServletResponse 到达客户端之前,拦截 HttpServletResponse。
  • 根据需要检查 HttpServletResponse,可以修改 HttpServletResponse 头和数据。

2.Interceptor

SpringMVC的Interceptor类似于Servlet开发中的过滤器Filter,用于对处理器(handler)进行预处理和后处理 。(进入到Interceptor 的时候,其实已经执行过 filter 了)

在SpringMVC中的 Http 请求执行过程中,要经过以下几个步骤 :

  1. 由 DispatcherServlet 捕获请求
  2. DispatcherServlet 将接收到的 URL 和对应的 Controller 进行映射
  3. 在请求到达相应的 Controller 之前,由拦截器对请求进行处理
  4. 处理完成之后,进行视图的解析
  5. 返回视图

所以,只有经过 DispatcherServlet 的请求才会被拦截器捕获,而我们自定义的 Servlet 请求则不会被拦截的。

3.Filter与Interceptor的区别

不同点:

①:Interceptor是基于java的反射机制(动态代理)的实现,而Filter是基于函数的回调。

②:Interceptor不依赖于servlet容器,而Filter依赖于servlet容器。

③:Interceptor只对Controller请求起作用,而Filter则可以对几乎所有的请求起作用。

④:Interceptor可以访问Controller上下文、值、栈里面的对象,而Filter不可以。

⑤:在spring容器的生命周期中,Interceptor可以多次被调用,而Filter只能在容器初始化时被调用一次。

⑥:Interceptor可以获取IOC容器中的各个bean,而Filter不行,这点很重要,在Interceptor里注入一个service,可以调用业务逻辑。

⑦:触发时机不同:

Filter是在请求进入容器后,但在进入servlet之前进行预处理,请求结束是在servlet处理完以后。

拦截器 Interceptor 是在请求进入servlet后,在进入Controller之前进行预处理的,Controller 中渲染了对应的视图之后请求结束。

Filter几乎可以对所有进入容器的请求起作用,而Interceptor只会对Controller中请求或访问static目录下的资源请求起作用。

⑧灵活性:从灵活性上说Interceptor功能更强大些,Filter能做的事情,Interceptor都能做,而且可以在请求前,请求后执行,比较灵活。

filter和interceptor并没有本质上的区别,作为一个工具来说,他们两者能够提供的能力基本是一样的。唯一需要注意的就是在执行时机上两者的不同(一个是在servlet执行前后处理,一个是在servlet内部执行),其他方面并没有显著的不同。这这也就意味着我们在实际开发使用时并不需要太过于纠结,毕竟老话说的好:黑猫白猫,抓到老鼠的就是好猫。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值