拦截器与过滤器

过滤器:依赖于Servlet容器,主要用来完成一些通用的操作,比如编码的过滤、判断用户的登录状态等。过滤器使得Servlet开发者能够在请求到达Servlet之前截取请求,在Servlet处理请求之后修改应答。

Servlet过滤器只能提供过滤作用。它能够在Servlet被调用之前检查Request对象,修改Request Header和Request内容;在Servlet被调用之后检查Response对象,修改Response Header和Response内容。其特点为:(1)可以检查和修改ServletRequst和ServletResponse对象;(2)可以指定和特定的URL关联,只有当客户请求访问该URL时,才会触发过滤器;(3)可以串联在一起,形成管道效应,协同修改请求和响应请求。其适用的场景有认证过滤、登录和审核过滤、图像转换过滤、数据压缩过滤、加密过滤、令牌过滤、资源访问触发事件过滤、乱码处理。

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

过滤器和拦截器的区别:

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

(6)拦截器作用域小于过滤器 :拦截器只拦截action,拦截器是Struts2的核心功能;拦截器是在struts.xml配置文件中进行配置的,自定义拦截器后,要将Struts2默认拦截器在struts.xml中重新配置。
          过滤器属于Servlet,配置在web.xml中,过滤器可以作用于一切页面,控制器等等元素。

         简言之:拦截器拦截action,过滤器拦截web请求

过滤器和拦截器的相同点:

(1)都是按照配置时的顺序执行

(2)都有init()和destroy()方法

(3)都是单实例的

执行顺序:过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);过滤通过后,拦截器将检查用户提交数 据的验证,接着把处理后的数据发给对应的Action;Action处理完成返回后, 再向上返回到过滤器的后续操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值