• 欢迎访问web前端中文站,JavaScript,CSS3,HTML5,web前端demo
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏web前端中文站吧

SpringMVC拦截器教程

JAVA web前端中文站 2年前 (2017-07-31) 803次浏览 已收录 0个评论

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

更多精彩内容请看 web 前端中文站
http://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

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


web 前端中文站 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SpringMVC 拦截器教程
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址