大家好,这里是教授.F
前菜:
拦截器是由springmvc来接管的,过滤器使用服务器来接管的。
● 自定义拦截器的三个方法[自定义的拦截器必须实现 HandlerInterceptor 接口]
1. preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求request 进行处理。
2. postHandle():这个方法在目标方法处理完请求后执行
3. afterCompletion():这个方法在完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。
执行流程:
1. 如果 preHandle 方法 返回 false, 则不再执行目标方法, 可以在此指定返回页面
2. postHandle 在目标方法被执行后执行. 可以在方法中访问到目标方法返回的ModelAndView 对象
3. 若 preHandle 返回 true, 则 afterCompletion 方法 在渲染视图之后被执行.
4. 若 preHandle 返回 false, 则 afterCompletion 方法不会被调用
5. 在配置拦截器时,可以指定该拦截器对哪些请求生效,哪些请求不生效
注意事项和细节:
1、默认配置是都所有的目标方法都进行拦截, 也可以指定拦截目标方法, 比如只是拦截hi
2、mvc:mapping 支持通配符, 同时指定不对哪些目标方法进行拦截
3、拦截器需要配置才生效,不配置是不生效的.
4、如果 preHandler() 方法返回了 false, 就不会执行目标方法(前提是你的目标方法被拦截了), 程序员可以在这里根据业务需要指定跳转页面.
以上是单个拦截器的执行流程,如果是多个拦截器,那执行流程又是怎么样呢???
如果在A拦截器返回false,那直接跳回B。如果是B拦截器返回false,那知识跳回A的after。