Spring 中不能处理用户请求,但能够用来提供过滤做用的一种Servlet规范。在请求进入容器以后,还未进入Servlet以前进行预处理,而且在请求结束返回给前端这之间进行后期处理。具体则是经过截取用户端的请求与响应信息,并对之进行过滤,即在Servlet被调用以前检查Request对象,修改Request Header和Request内容;在Servlet被调用以后检查Response对象,修改Response Header和Response内容。前端
过滤器也能起到拦截请求并做出相应的行动。好比: 能够进行(BA)认证过滤,登录过滤等。java
经过实现Filter接口,也能够经过实现AbstractFilter抽象类。web
初始化操做,FilterConfig用来获取web.xml中关于初始化的配置(init-param)。spring
完成实际的过滤操做, 当客户请求访问与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器。服务器
过滤器销毁时被调用, 即释放过滤器占用的资源。app
注意事项: 同一个Url定义多个过滤器时,服务器会按照定义前后顺序组成过滤器链,前后执行filter的doFilter方法。ide
|
过滤器(Filter)
|
拦截器(Interceptor)
|
---|---|---|
原理 | 基于函数回调 | 基于java的反射机制 |
是否依赖Servlet容器 | 是 | 否 |
是否能访问action上下文、值栈里的对象 | 否 | 是 |
在action的生命周期中,是否屡次被调用 | 否,仅在容器初始化时被调用一次 | 是 |
拦截范围 | 全部请求 | 仅能对action请求 |
是否能够获取Ioc容器中的各个bean(是否属于Spring的组件) | 否 | 是,在拦截器里注入一个service,便可以调用业务逻辑。 |
使用范围不一样 | 只能用于Web程序中 | 不只能用于Web中,也能够用于Application、Swing程序中 |
规范不一样 | Servlet容器支持的 | Spring容器支持的 |
深度不一样 | Servlet先后 | 深刻到方法先后、异常抛出先后 |
相关连接:函数