`

spring mvc中的拦截器小结

阅读更多
在spring mvc中,拦截器其实比较简单了,下面简单小结并demo下。

preHandle:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器(如我们上一章的Controller实现);
     返回值:true表示继续流程(如调用下一个拦截器或处理器);
             false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应;
postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。
afterCompletion:整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中的finally,但仅调用处理器执行链中preHandle返回true的拦截器的afterCompletion。

  下面是简单的DEMO

1)

@Controller
public class HelloWorldController {

	
	@RequestMapping(value = "/hello", method = RequestMethod.GET)
	public String sayHello() {
		return "hello";
	}
}


   这个是一个简单的controller了


2) 拦截器
 
 public class HelloWorldInterceptor implements HandlerInterceptor  {
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		
		System.out.println("Pre-handle");
		
		return false;
	}
	
	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println("Post-handle");
	}
	
	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		System.out.println("After completion handle");
	}
}


3) spring mvc配置文件
 
<?xml  version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc.xsd">
		
	<context:annotation-config />
	<context:component-scan base-package="net.viralpatel.spring3.controller"/>
	
	<mvc:interceptors>
      <bean class="net.viralpatel.spring3.interceptor.HelloWorldInterceptor" />
	</mvc:interceptors> 
	
  <bean id="jspViewResolver"
	class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
  </bean>
</beans>



  其中使用了<mvc:interceptors>注册了拦截器

4) 运行后,输出:
Pre-handle
Post-handle
After completion handle

   如果在拦截器中的prehandler中返回false,则根本不会渲染到view层了,直接只输出:
Pre-handle,假如注册了两个拦截器,
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">  
    <property name="interceptors">  
        <list>  
           <ref bean="handlerInterceptor1"/>  
          <ref bean="handlerInterceptor2"/>  
        </list>  
    </property>  
</bean>  


   
  则拦截器的执行顺序就是此处添加拦截器的顺序;会输出:
HandlerInterceptor1 preHandle 
HandlerInterceptor2 preHandle 
 
HandlerInterceptor2 postHandle 
HandlerInterceptor1 postHandle 

HandlerInterceptor2 afterCompletion 
HandlerInterceptor1 afterCompletion 
    总结下,就是在哪个拦截器的prehandler方法中返回false,则该拦截器posthandler和aftercomplete方法了。
 
参考:http://jinnianshilongnian.iteye.com/blog/1670856
15
2
分享到:
评论
5 楼 qsa1024 2014-03-31  
学习 正好用的上
4 楼 shen84121062 2013-11-22  
徒弟,如果你不配置拦截器的路径的话他的默认路径是/*  但是/*拦截的是/a  如果路径是/a/b 他是不拦截的,所以最好写上/** 就是所有都拦截
3 楼 wo_niu 2013-11-06  
如果是fasle,不会执行执行posthandler和aftercomplete
2 楼 qianshidechenzbl 2013-07-06  
不错不错不错不错
1 楼 在世界的中心呼喚愛 2013-03-21  
“    总结下,就是在哪个拦截器的prehandler方法中返回false,则该拦截器posthandler和aftercomplete方法了。
  ”

如果是fasle,会执行aftercomplete吧!

相关推荐

    spring mvc 搭建(java web)

    - 这个文件主要用来配置Spring MVC的核心组件,如视图解析器、拦截器等。 - 通常情况下,还需要配置处理器映射器、处理器适配器等。 5. **配置SpringContext.xml** - 这个文件用于配置Spring框架的基础配置,如...

    拦截器和控制器的区别

    4、拦截器可以利用依赖注入,因此在spring框架程序中,优先拦截器 5、拦截器是包裹在过滤器中使用的。 复习 converter 转换器 i18n struts2 spring MVC 拦截器 interceptor 过滤器 filter web.xml ...

    MVC小结

    例如,Spring MVC是Java领域的一个流行框架,它提供了丰富的工具和功能来简化开发流程,支持模型绑定、数据验证、拦截器等特性,使得基于MVC的应用程序开发更加高效。 **总结** MVC模式通过将应用分为模型、视图和...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与视图解析 13.5.1. 视图解析器 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.5.3.1. RedirectView 13.5.3.2. redirect:前缀 13.5.3.3. forward:...

    Spring in Action(第二版 中文高清版).part2

    11.3.4 使用注释声明拦截器 11.4 小结 第12章 访问企业服务 12.1 从JNDI中获取对象 12.1.1 使用传统的JNDI 12.1.2 注入JNDI对象 12.1.3 在Spring 2中注入JNDI对象 12.2 发送电子邮件 12.2.1 配置邮件发送...

    Spring攻略(第二版 中文高清版).part1

    8.3 用处理程序拦截器拦截请求 297 8.3.1 问题 297 8.3.2 解决方案 298 8.3.3 工作原理 298 8.4 解析用户区域 302 8.4.1 问题 302 8.4.2 解决方案 302 8.4.3 工作原理 302 8.5 外部化区分区域的...

    Spring中文帮助文档

    13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与视图解析 13.5.1. 视图解析器(ViewResolver) 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.6. 本地化解析器 13.6.1. ...

    Spring in Action(第二版 中文高清版).part1

    11.3.4 使用注释声明拦截器 11.4 小结 第12章 访问企业服务 12.1 从JNDI中获取对象 12.1.1 使用传统的JNDI 12.1.2 注入JNDI对象 12.1.3 在Spring 2中注入JNDI对象 12.2 发送电子邮件 12.2.1 配置邮件发送...

    Struts2+Hibernate+Spring项目小结――Struts2部分总结

    在Struts2中,我们可以通过自定义拦截器来扩展框架功能。例如,可以创建一个专门用于处理表单验证失败情况的拦截器,它会在验证失败后自动填充页面的初始值。 4、Struts2的Result类型 在处理验证失败后的返回结果时...

    Spring攻略(第二版 中文高清版).part2

    8.3 用处理程序拦截器拦截请求 297 8.3.1 问题 297 8.3.2 解决方案 298 8.3.3 工作原理 298 8.4 解析用户区域 302 8.4.1 问题 302 8.4.2 解决方案 302 8.4.3 工作原理 302 8.5 外部化区分区域的...

    Spring.3.x企业应用开发实战(完整版).part2

    15.7.2 装配拦截器 15.7.3 异常处理 15.8 小结 第5篇 测试及实战 第16章 实战型单元测试 16.1 单元测试概述 16.1.1 为什么需要单元测试 16.1.2 单元测试之误解 16.1.3 单元测试之困境 16.1.4 单元测试基本概念 16.2...

    Spring3.x企业应用开发实战(完整版) part1

    15.7.2 装配拦截器 15.7.3 异常处理 15.8 小结 第5篇 测试及实战 第16章 实战型单元测试 16.1 单元测试概述 16.1.1 为什么需要单元测试 16.1.2 单元测试之误解 16.1.3 单元测试之困境 16.1.4 单元测试基本概念 16.2...

    Spring API

    13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与视图解析 13.5.1. 视图解析器(ViewResolver) 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.6. 本地化解析器 13.6.1. ...

    Spring 2.0 开发参考手册

    13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与视图解析 13.5.1. 视图解析器 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.6. 本地化解析器 13.6.1. AcceptHeaderLocaleResolver 13.6.2....

    spring chm文档

    13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与视图解析 13.5.1. 视图解析器 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.6. 本地化解析器 13.6.1. AcceptHeaderLocaleResolver 13.6.2....

    springmvc学习笔记-前端控制器、上传、异常、开发心得小结等.zip

    本学习笔记将涵盖前端控制器、文件上传、异常处理以及开发过程中的心得小结。 1. **前端控制器(DispatcherServlet)** 前端控制器是SpringMVC的核心组件,负责接收所有HTTP请求,然后根据请求的类型和映射规则...

    Struts2 in action中文版

    9.2.1 让Spring管理动作、拦截器和结果的创建 203 9.2.2 使用自动连线将依赖注入到动作、拦截器和结果 205 9.3 为什么在Struts 2中使用JPA 207 9.3.1 使用JPA和Hibernate建立项目 208 9.3.2 基于Spring管理JPA编写...

    web开发框架总结

    框架提供了拦截器机制,允许开发者添加自定义行为,如验证、日志和事务管理。此外,Struts 2支持多种结果类型和模板技术,如FreeMarker和JSP,增强了视图层的灵活性。 接下来,Hibernate是一个对象关系映射(ORM)...

    Spring Security3 中文版 张卫滨 推荐

    - **小结**:总结了Spring Security在保护Web应用方面的核心价值。 ### 第二章:Spring Security起步 这一章重点介绍了如何快速集成Spring Security到现有的项目中。 - **安全的核心概念**:深入浅出地解释了...

    开发struts2+spring

    #### 12.7 小结 本章主要介绍了如何使用MyEclipse开发Struts2+Spring应用。通过一系列的实际操作,不仅学习了Struts2的基本用法,还了解了如何将其与Spring框架进行整合。通过这些示例,开发者可以更加深入地理解这...

Global site tag (gtag.js) - Google Analytics