过滤器和拦截器之间的关系和区别

1.过滤器和拦截器的区别
   1)原理不同:拦截器是基于java的反射机制,而过滤器是基于函数回调
   2)作用对象不同:拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用
   3)调用次数不同:在action的生命周期,拦截器可以多次被调用,而过滤器只能在容器初始化
       时被调用一次
   4) 拦截器不依赖于servlet容器,过滤器依赖于servlet容器
   5) 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问
   6)拦截器可以获取IOC容器中的各个bean,而过滤器不行,这点很重要,在拦截器里注入一个
      service,可以调用业务逻辑。
2.描述
   过滤器是javaEE标准,采用函数回调的方式进行。是在请求进入容器之后,还未进入servlet之
前进行预处理,并且在请求结束返回个前端这之间进行后期处理。
   拦截器是被包裹在 过滤器之中的。
总结:拦截器主要在请求权限鉴定方面有很大用处。


3.过滤器的概念
--过滤器在请求与响应的哪个阶段发挥作用
--多个过滤器的使用
  3.1 什么样的需求让过滤器出现?
    1)针对所有的servlet,产品经理想要了解从请求到响应之间的时间差
    2)针对某些特定给的页面,客户希望只有特定几个用户才可以浏览
    3)基于安全方面的考虑,用户输入的特定字符必须过滤并替换为无害的字符
    4)请求与响应的编码从Big5改用UTF-8
    3.1.1 分析这些需求:
运行servlet的service前,记录起始时间,servlet的service的方法运行后,记录结束时间并计算时间差
运行servlet的service前,验证是否为允许的用户
    运行servlet的service前,对请求参数尽心字符过滤与替换
运行servlet的service前,对请求和响应对象设置编码格式
    总结:经过分析,发现这些需求,可以在真正运行servlet的service方法前与servlet的service
 方法后中间进行实现。
    3.1.2 这些需求有哪些?
1)5)性能评测(开发阶段才需要,上线后去掉):例如计算时间差
2)用户验证
3)字符替换
  4)编码转换
5)压缩--->响应
       这类的需求应该设计为独立的元件,随时可以加入到应用程序当中,也随时可以移除,或随时
    可以修改设置而不用修改原有的程序。
---->servlet/jsp提供过滤器机制让你实现这些元件服务
    3.1.3 灵活的使用规则
1)可以根据需求替换过滤器或调整过滤器的顺序
2)也可以针对不同的url使用不同的过滤器
  3)甚至在不同的servlet间请求转发或包含是使用过滤器
4.实现和设置过滤器
   如何编写一个过滤器
1)必须实现Filter接口
该接口只有一个方法:boolean isLoggable(LogRecord record) 检查是否应该发布给定的日志记录。 
  init(FilterConfig filterConfig)
filterConfig:类似于servlet接口init()方法参数上的ServletConfig,代表过滤器在web.xml
         中配置的信息。
  doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
· 类似于servlet接口的service()方法,在请求来到容器,容器发现调用Servlet的service之前,
可以应用某个过滤器,调用它的doFilter方法。 
执行完doFilter()后,决定是否决定调用FilterChain的doFilter()方法
如果调用FilterChain的doFilter()方法,就会执行下一个过滤器;如果没有
    下一个过滤器,就调用请求目标servlet的service()。
如果因为某个情况(例如用户没有通过验证)而没有调用FilterChain的doFilter()
    则请求不会继续交给接下来的过滤器或目标servlet,这就是所谓的拦截请求(拦截器)。
只需要知道FilterChain运行后会以堆栈顺序返回即可。
  destroy()
   
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值