一.Springmvc中的拦截器概述及与过滤器filter的区别
1).Springmvc中的拦截器interceptor用于对控制器controller进行预处理和后处理的技术;
2).可以定义拦截器链,拦截器链就是将拦截器按着一定的顺序结成一条链,在访问被拦截的方法时,拦截器链中的拦截器会按着定义的顺序执行。
3).拦截器interceptor与过滤器filter的区别
1.过滤器是servlet中的,任何框架都可以使用过滤器技术;
2.拦截器是Springmvc所独有的
3.过滤器设置/*可以拦截任何资源
4.拦截器只对控制器controller中的方法进行拦截
4).拦截器利用的是AOP思想;
5).自定义拦截器,需要实现HandlerInterceptor接口
二.拦截器的使用:自定义拦截器类实现HandlerInterceptor接口,重写其中三个方法之一的preHandle()方法
1 public class MyInterceptor implements HandlerInterceptor { 2 @Override 3 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { 4 System.out.println("拦截器执行了"); 5 return true;//返回true代表放行,返回false代表不放行程序到此就不会向下走了 6 } 7 }
在springmvc.xml中配置拦截器
<!--配置拦截器interceptor--> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/account/*"/> <!--拦截的路径,路径都是controller中的方法路径--> <mvc:exclude-mapping path="/account/testSpringmvc"/> <!--不拦截的路径--> <bean class="cn.itcast.interceptor.MyInterceptor"/> </mvc:interceptor> </mvc:interceptors>
三.HandlerInterceptor接口中的三个方法分析
1.preHandler() 拦截在controller中方法执行之前,执行,这是拦截器主要用到的方法
可以使用request或者response跳转到指定的页面
return true 代表放行 return false 代表不放行
2.postHandler() 在controller中方法执行后,返回jsp视图执行之前执行此方法
1). 可以使用request或者response跳转到指定的页面
2). 如果指定了跳转的页面,那么controller方法跳转的页面将不会显示。
3.afterCompletion() 在跳转页面后执行此方法
无法通过request或response跳转页面了
四.可以编写配置多个拦截器,拦截顺序按照在springmvc.xml中配置顺序
拦截器执行顺序: