zoukankan      html  css  js  c++  java
  • JAVA三大神器对比分析=及使用方法总结(Filter/Listener/Interceptor)

    首先来对比一下使用,分析一下

    属性对比 Filter Interceptor Listener
    本质 是Servlet规范中的一个高级特性 , 不处理客户端请求, 只是用于对Request/Respose进行修改 是处在Spring容器,不依赖servlet容器,被spring管理  
    实现方式 基于回调函数 基于java的反射(动态代理) 监听事件触发
    触发时机 request请求之后<>servlet之前    
    作用范围 拦截几乎所有的请求(包含静态资源) 只能拦截action请求(不能拦截静态资源的请求)  
    是否能访问action上下文及值栈的对象 不能 可以  
    是否能获取spring容器中的对象 不能 可以  
    调用的次数 在容器初始化时被调用一次 在action的生命周期内可以多次调用  
    应用场景

    过滤铭感词汇

    设置字符编码

    URL级别的权限访问控制

    压缩响应信息等

    登录验证:用户是否登录之类

    权限验证:是否有访问权限

    日志记录:统计访问量等

    处理cookie,本地化, 国际化,主题

    性能监控: 处理时长等

    通用行为:涉及到多个处理器

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    测试, 过滤器的执行顺序

    1.过滤器是JAVAEE标准, 采用函数回调的方式进行, 是在进入容器之后, 还未进入servlet之前进行的预处理, 并且在请求结束返回给前端这之间进行后期处理

     chain.doFilter(request,response), 调用servlet的doService()方法是在chain.doFilter方法中进行的

    2.拦截器其实是被包裹在过滤器之中的

     

     

     Spring的拦截器与Servlet的过滤器有相似之处, 比如二者都是AOP编程思想的体现, 都能实现权限检查, 日志记录等, 不同的是

    使用范围: 过滤器是Servlet规范规定的, 只能用于Web程序中, 而拦截器既可以用于Web程序, 也可以用于Application,Swing程序中

    规范不通: 过滤器是在Servlet规范中定义的, 是Servlet容器支持的, 而拦截器是Spring容器内, 是Spring框架支持的

    深度不同: Filte只在Serlvet前后起作用, 而拦截器能够深入到方法前后, 异常抛出前后灯, 因此拦截器的使用具有更大的弹性, Spring构架中要优先使用拦截器

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    UI自动化实现多浏览器运行
    【转】C#操作XML方法集合
    日拱一卒
    敏捷开发- planning会议中的开会趣事
    敏捷开发- 可行走的骨骼
    敏捷开发- 测试人员何去何从
    Nunit & Specflow
    [转]根本原因分析(Root Cause Analysis)
    Selenium 中抓取dropdown
    网页模板
  • 原文地址:https://www.cnblogs.com/binyue-sunmk/p/14081791.html
Copyright © 2011-2022 走看看