应用场景
过滤器的应用:字符编码转换,敏感词过滤、登陆权限验证、资源访问权限等
拦截器的应用:AOP、需要有一些业务逻辑(需要注入Bean等)
区别
- 过滤器配置再web.xml中、拦截器配置springmvc的配置文件中(即在DispatcherServlet的contextConfigLocation属性指定文件所在位置,默认加载的是:/WEB-INF/servlet名称-servlet.xml(springmvc-servlet.xml))
- 过滤器基于函数回调、拦截器基于反射
- 过滤器几乎对所有请求起作用,拦截器只对目标执行方法(action方法)起作用
- 过滤器:对请求进行预处理、再交给Servlet处理并且生成响应,最后Filter再对服务器响应进行后处理
拦截器:可以再方法执行前调用(preHandle)、方法执行后(postHandle)、视图页面渲染后(afterCompletion)
执行流程
过滤器初始化-》(客户端请求过来)dofilter处理请求-》到达dispatchServlet,在目标方法执行前preHandle-》(放行,返回true)执行目标方法-》(正常返回,异常则不执行)postHandle-》(无论目标方法是否执行或者执行是否出现异常,都会执行)afterCompletion-》dofilter处理响应-》客户端加载页面