这篇文章主要为大家详细介绍了SpringMVC实现自定义拦截器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
SpringMVC实现自定义拦截器
1 拦截器(interceptor)的作用
Spring MVC的拦截器类似于Servlet开发中的过滤器,用于处理器的预处理和后处理。
拦截器按照一定的顺序连接成链,称为拦截链。当访问被拦截的方法或字段时,拦截器链中的拦截器将按照之前定义的顺序被调用。拦截器也是AOP的具体实现。
2 拦截器和过滤器区别
关于拦截器和过滤器的区别,如图:
3.实现过程
步骤分析:
1.创建拦截器类以实现HandlerInterceptor接口。
2.配置拦截器
3.测试拦截器的拦截效果。
3.1创建拦截器类实现HandlerInterceptor接口public class MyInterceptor implements HandlerInterceptor { /** * preHandle: 在目标方法执行之前 进行拦截 return false:不放行 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle1...."); return true; } /** * postHandle: 在目标方法执行之后,视图对象返回之前,执行的方法 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle1...."); } /** * afterCompletion:在流程都执行完成后,执行的方法 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion1...."); }}
3.2配置拦截器lt;!-- 配置拦截器--gt; lt;mvc:interceptorsgt; lt;mvc:interceptorgt; lt;!--对哪些资源执行拦截操作 path="/**"表示对controller层所有方法进行拦截 --gt; lt;mvc:mapping path="/**" /gt; lt;bean class="com.weihong.interceptor.MyInterceptor" /gt; lt;/mvc:interceptorgt; lt;/mvc:interceptorsgt;
3.3测试拦截器的拦截效果 @RequestMapping("/target") public String targetMethed(){ System.out.println("目标方法执行了"); return "interceptor"; }
3.4编写jsp页面lt;htmlgt;lt;headgt; lt;titlegt;Titlelt;/titlegt;lt;/headgt;lt;bodygt; lt;h3gt;success~~~~~~lt;/h3gt; lt;% System.out.println("视图执行了....");%gt;lt;/bodygt;lt;/htmlgt;
3.5测试结果
4. 拦截器链
中开发的拦截器可以单独使用,也可以同时使用多个拦截器组成一个拦截链。开发步骤与单个拦截器相同,只是注册时注册了多个拦截器。注意,这里的注册顺序代表拦截器执行的顺序。
同上,编写另一个MyHandlerInterceptor2操作来测试执行序列:
lt;!--配置拦截器--gt;lt;mvc:interceptorsgt; lt;mvc:interceptorgt; lt;!--拦截器路径配置--gt; lt;mvc:mapping path="/**"/gt; lt;!--自定义拦截器类--gt; lt;bean class="com.lagou.interceptor.MyInterceptor1"gt;lt;/beangt; lt;/mvc:interceptorgt; lt;mvc:interceptorgt; lt;!--拦截器路径配置--gt; lt;mvc:mapping path="/**"/gt; lt;!--自定义拦截器类--gt; lt;bean class="com.lagou.interceptor.MyInterceptor2"gt;lt;/beangt; lt;/mvc:interceptorgt;lt;/mvc:interceptorsgt;
5. 知识小结
拦截器中的方法描述如下:
总结
本文到此为止
精彩评论