SpringMVC拦截器教程

接着前面的两篇关于SpringMVC拦截器的原理和实现机制。本文将进入实战,深入的学习SpringMVC的拦截器。

更多精彩内容请看 web前端中文站
www.lisa33xiaoq.net 可按Ctrl + D 进行收藏

先来看看SpringMVC拦截器的实现。

 package com.lisa33xiaoq.net.chapter5.web.interceptor;   //省略import   public class HandlerInterceptor1 extends HandlerInterceptorAdapter {  //此处一般继承HandlerInterceptorAdapter适配器即可       @Override       public boolean preHandle(HttpServletRequest request,    HttpServletResponse response, Object handler) throws Exception {           System.out.println("===========HandlerInterceptor1 preHandle");           return true;       }       @Override       public void postHandle(HttpServletRequest request,    HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {           System.out.println("===========HandlerInterceptor1 postHandle");       }       @Override       public void afterCompletion(HttpServletRequest request,    HttpServletResponse response, Object handler, Exception ex) throws Exception {           System.out.println("===========HandlerInterceptor1 afterCompletion");       }   }

以上是HandlerInterceptor1实现,HandlerInterceptor2同理 只是输出内容为“HandlerInterceptor2”。

下面是控制器部分。

 package com.lisa33xiaoq.net.chapter5.web.controller;   //省略import   public class TestController implements Controller {       @Override       public ModelAndView handleRequest(HttpServletRequest req,    HttpServletResponse resp) throws Exception {           System.out.println("===========TestController");           return new ModelAndView("test");       }   }  

Spring配置文件chapter5-servlet.xml

 <bean name="/test" class="com.lisa33xiaoq.net.chapter5.web.controller.TestController"/>   <bean id="handlerInterceptor1"    class="com.lisa33xiaoq.net.chapter5.web.interceptor.HandlerInterceptor1"/>   <bean id="handlerInterceptor2"    class="com.lisa33xiaoq.net.chapter5.web.interceptor.HandlerInterceptor2"/> 
 <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">       <property name="interceptors">           <list>              <ref bean="handlerInterceptor1"/>             <ref bean="handlerInterceptor2"/>           </list>       </property>   </bean>  

interceptors:指定拦截器链,拦截器的执行顺序就是此处添加拦截器的顺序;

视图页面WEB-INF/jsp/test.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>   <%System.out.println("==========test.jsp");%>   test page

在控制台输出 test.jsp

启动服务器测试
输入网址:http://localhost:9080/springmvc-chapter5/test
控制台输出:

===========HandlerInterceptor1 preHandle  
===========HandlerInterceptor2 preHandle  
===========TestController  
===========HandlerInterceptor2 postHandle  
===========HandlerInterceptor1 postHandle  
==========test.jsp  
===========HandlerInterceptor2 afterCompletion  
===========HandlerInterceptor1 afterCompletion 

到此一个正常流程的演示完毕。和图5-1一样,接下来看一下中断的流程。

中断流程

拦截器
HandlerInterceptor3和HandlerInterceptor4 与 之前的 HandlerInteceptor1和HandlerInterceptor2一样,只是在HandlerInterceptor4的preHandle方法返回false:

 @Override   public boolean preHandle(HttpServletRequest request,   HttpServletResponse response, Object handler) throws Exception {       System.out.println("===========HandlerInterceptor1 preHandle");   onse.getWriter().print("break");//流程中断的话需要我们进行响应的处理       return false;//返回false表示流程中断      }

控制器流程中断不会执行到控制器,使用之前的TestController控制器。

Spring配置文件chapter5-servlet.xml

 <bean id="handlerInterceptor3"    class="com.lisa33xiaoq.net.chapter5.web.interceptor.HandlerInterceptor3"/>   <bean id="handlerInterceptor4"    class="com.lisa33xiaoq.net.chapter5.web.interceptor.HandlerInterceptor4"/>  

interceptors:指定拦截器链,拦截器的执行顺序就是此处添加拦截器的顺序;

视图页面流程中断,不会执行到视图渲染。

启动服务器测试
输入网址:http://localhost:9080/springmvc-chapter5/test
控制台输出:

===========HandlerInterceptor3 preHandle  
===========HandlerInterceptor4 preHandle  
===========HandlerInterceptor3 afterCompletion  

此处我们可以看到只有HandlerInterceptor3的afterCompletion执行,对应前面的的中断流程的处理流程了。
而且页面上会显示我们在HandlerInterceptor4 preHandle 直接写出的响应“break”。

附上本文完整源代码下载链接:http://pan.baidu.com/s/1i5qrVBv 密码:fo9v

【注:本文源自网络文章资源,由站长整理发布】

0
如无特殊说明,文章均为原作者原创,转载请注明出处

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论

Hi,请填写昵称和邮箱!

取消评论
代码 贴图 加粗 链接 删除线 签到