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构架中要优先使用拦截器

 

 

 

 

 

 

 

 

 

 

posted @ 2020-12-04 09:54  冰月华林  阅读(220)  评论(0编辑  收藏  举报