介绍
过滤器(Filter)
- 过滤器是Java Web中奖传入的request、response提前过滤掉一些信息或提前设置一些参数,然后再传入到Servlet或action进行业务逻辑处理。如过滤非法url、过滤非法字符等。
- 过滤器依赖于servlet容器,可以对几乎所有请求进行过滤,但一个过滤器实例只能在容器初始化时调用一次。
拦截器(Interceptor)
- 拦截器是面向切面编程的,在service或一个方法前后调用一个方法,如调用方法前打印日志、动态代理。
- 拦截器依赖于web框架,如spring mvc框架。
- 一个拦截器在一个controller生命周期内可以多次调用,可以对静态资源的请求进行拦截处理。
包含关系
1、拦截器(Interceptor)只对action请求起作用 即对外访问路径,而过滤器(Filter)则可以对几乎所有的请求都能起作用 包括css js等资源文件 2、拦截器(Interceptor)是在Servlet和Controller控制器之间执行,而过滤器(Filter)是在请求进入Tomcat容器之后 但是在请求进入Servlet之前执行。web.xml加载顺序:context- param -> listener -> filter -> servlet。在请求结束返回时也是一样,是在Servlet处理完之后返回给前端之间执行。
比较
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调。 2、拦截器不依赖与servlet容器,过滤器依赖于servlet容器。 3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。 5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。 6、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。拦截器可以获取ioc中的service bean实现业务逻辑。
特性 | 过滤器(Filter) | 监听器(Listener) | 拦截器(Interceptor) |
---|
入参 | web请求 | 系统级别参数、对象 | Action(部分web请求 | 实现 | 函数回调 | 事件 | 反射机制(动态代理) | 应用场景 | 1、设置字符编码 2、URL级别的权限访问控制 3、过滤敏感词汇 4、压缩响应信息 | 1、统计网站在线人数 2、清除过期session | 1、拦截未登录用户 2、审计日志 | 是否依赖servlet容器 | 依赖 | - | 不依赖 | servlet提供支持 | Filter接口 | 1、ServletContextListener抽象接口 2、HttpSessionListener抽象接口 | - | Spring提供支持 | - | - | HandlerInterceptor MethodInterceptor | 级别 | 系统级 | 系统级 | 非系统级 |
|