SpingMVC提供了拦截器级制;允许运行目标方法之前进行一些拦截工作,或者目标方法运行之后进行其他处理;
Filter是javaWeb定义的,HandlerInterceptor是SpingMVC提供的
- preHandle:在目标方法运行之前调用,返回boolean,return true (chain.doFilter())放行,return false 不放行
- postHandle:在目标方法运行之后调用,
- afterCompletion():在请求整个完成之后,就是来到目标页面之后,chain.doFilter()放行之后,资源响应之后
1) 拦截器是一个接口,实现了HandlerInterceptor接口
2)SpringMVC中配置拦截器
4)拦截器的正常运行流程
拦截器的perHandle–>目标方法–>拦截器的postHandle–>页面–>afterCompletion
5) 其他流程:
1》只要perHandle不放行就没有以后的流程
2》只要放行了,afterCompletion一定执行
6)多个拦截器
在Springmvc匹配中,哪个在前面哪个先运行
正常流程
异常流程
1.不放行,一条线上哪一环上不放行之后的都没有了,但是如果第二个不放行,第一个放行了,之前的afterCompletion都会执行
拦截器的perHandle按照顺序执行,拦截器的postHandle是逆序执行,afterCompletion也是逆序执行,
什么时候用Filter什么时候用拦截器?
如果某些功能需要其他组件配合完成,我们就使用拦截器;
拦截器脱离了SpringMVC就无法使用,Filter只要是java中就可以;