`

springmvc入门基础之拦截器

阅读更多

接:http://alog2012.iteye.com/admin/blogs/2040477

Spring为我们提供了:
org.springframework.web.servlet.HandlerInterceptor接口,
org.springframework.web.servlet.handler.HandlerInterceptorAdapter适配器,
实现这个接口或继承此类,可以非常方便的实现自己的拦截器。
 
有以下三个方法:
 
Action之前执行:
 public boolean preHandle(HttpServletRequest request,
   HttpServletResponse response, Object handler);
 
生成视图之前执行
 public void postHandle(HttpServletRequest request,
   HttpServletResponse response, Object handler,
   ModelAndView modelAndView);
 
最后执行,可用于释放资源
 public void afterCompletion(HttpServletRequest request,
   HttpServletResponse response, Object handler, Exception ex)
  
分别实现预处理、后处理(调用了Service并返回ModelAndView,但未进行页面渲染)、返回处理(已经渲染了页面)
在preHandle中,可以进行编码、权限控制等处理;
在postHandle中,有机会修改ModelAndView;
在afterCompletion中,可以根据ex是否为null判断是否发生了异常,进行日志记录。
参数中的Object handler是下一个拦截器。

下面是一个自定义的拦截器,实现了 HandlerInterceptor 。

public class MyIntercepor implements HandlerInterceptor {

	/**
	 * 执行时机:视图已经被解析完毕,类似try catch 后的finally
	 */
	@Override
	public void afterCompletion(HttpServletRequest arg0,
			HttpServletResponse arg1, Object arg2, Exception ex)
			throws Exception {
		System.out.println("afterCompletion...");
		ex.printStackTrace();
		System.out.println("================");
	}

	/**
	 * 执行时机:controller执行完,视图解析器没有把视图解析成页面, 对视图做统一的修改,主要体现在Model上
	 */
	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2, ModelAndView mv) throws Exception {
		System.out.println("postHandler...");
		Map<String, Object> map = mv.getModel();
		map.put("test", "append something");
	}

	/**
	 * 执行时机:在执行controller之前来执行
	 * 返回值类型:boolean
	 * 		true:代表放行可以访问controller,
	 * 		false:不可以访问controller
	 */
	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2) throws Exception {
		System.out.println("preHander...");
		return true;
	}

}

 

 

Spring MVC并没有总的拦截器,不能对所有的请求进行前后拦截。

Spring MVC的拦截器,是属于HandlerMapping级别的,可以有多个HandlerMapping ,每个HandlerMapping可以有自己的拦截器。
当一个请求按Order值从小到大,顺序执行HandlerMapping接口的实现类时,哪一个先有返回,那就可以结束了,后面的HandlerMapping就不走了,本道工序就完成了。就转到下一道工序了。
拦截器会在什么时候执行呢? 一个请求交给一个HandlerMapping时,这个HandlerMapping先找有没有处理器来处理这个请求,如何找到了,就执行拦截器,执行完拦截后,交给目标处理器。
如果没有找到处理器,那么这个拦截器就不会被执行。

 

在spring MVC的配置文件中配置有三种方法:

方案一,(近似)总拦截器,拦截所有url

<mvc:interceptors>
	<mvc:interceptor>
		<!-- 某一模块的拦截:/{命名空间}/{RequestMapping}[**]; 拦截所有的请求/** -->
		<mvc:mapping path="/**" />
		<bean class="org.study1.mvc.interceptor.MyIntercepor"></bean>
	</mvc:interceptor>
</mvc:interceptors>

   
为什么叫“近似”,前面说了,Spring没有总的拦截器。
<mvc:interceptors/>会为每一个HandlerMapping,注入一个拦截器。总有一个HandlerMapping是可以找到处理器的,最多也只找到一个处理器,所以这个拦截器总会被执行的。起到了总拦截器的作用。
如果是REST风格的URL,静态资源也会被拦截。
 
方案二, HandlerMappint上的拦截器。
如果是REST风格的URL,静态资源就不会被拦截。因为我们精准的注入了拦截器。

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">       
 <property name="interceptors">       
     <list>       
         <bean class="org.study1.mvc.interceptor.MyIntercepor"></bean>      
     </list>       
 </property>       
</bean>   

 如果使用了<mvc:annotation-driven />, 它会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter 这两个bean,所以就没有机会再给它注入interceptors属性,就无法指定拦截器。
当然我们可以通过人工配置上面的两个Bean,不使用 <mvc:annotation-driven />,就可以 给interceptors属性 注入拦截器了。

更加详细的参见:http://elf8848.iteye.com/blog/875830/ “十九”

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    springMVC快速入门基础代码

    **SpringMVC快速入门基础代码详解** SpringMVC是Spring框架的一个模块,专门用于构建Web应用程序。...随着对SpringMVC的深入学习,你将能够利用更多的特性,如拦截器、国际化、异常处理、AOP等,构建更复杂的Web应用。

    springmvc拦截器入门实例.zip

    了解了这些基础知识后,你可以通过运行这个入门实例,逐步学习如何配置拦截器,编写拦截器逻辑,并将其与控制器结合使用。在实践中,你会更深入地理解 SpringMVC 框架如何通过拦截器提高应用程序的可扩展性和灵活性...

    springmvc入门程序(下载后你不会后悔的)

    2. **处理流程**:SpringMVC采用了更轻量级的前端控制器设计,而Struts2采用拦截器链。 3. **学习曲线**:SpringMVC的学习曲线相对较平缓,因为它更依赖于现有的Java编程经验;而Struts2有一套较为复杂的概念体系。 ...

    springmvc的入门例子

    Spring MVC 是一个强大的Java Web...随着对框架更深入的理解,可以逐渐引入更复杂的功能,如拦截器、数据验证、异常处理、国际化等。Spring MVC的强大之处在于它的灵活性和可扩展性,能够适应各种规模的Web项目需求。

    SpringMVC入门demo

    SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的请求-响应模型。...在实际项目中,你还可以利用SpringMVC的注解驱动特性、拦截器、异常处理、数据绑定等功能,构建更加复杂和灵活的Web应用。

    springMvc入门级项目

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用来处理 Web ...随着经验的增长,你还可以探索更多的特性,如拦截器(Interceptor)、异常处理、国际化支持、RESTful API 设计等。

    springmvc入门简单实现

    8. **Interceptor**:拦截器允许在请求被处理之前和之后执行额外的逻辑,比如权限检查、日志记录等。 在"springmvc入门简单实现"这个主题中,你可以按照以下步骤进行学习: 1. **环境搭建**:首先确保安装了Java和...

    SpringMVC入门案例源码

    7. **AOP(面向切面编程)**:SpringMVC利用Spring的AOP功能,可以实现如日志记录、权限验证等功能的拦截器(Interceptor)。 8. **MVC注解驱动**:Spring 3.0引入了注解驱动的开发模式,使得开发者无需编写大量的...

    SpringMVC入门最简洁工程

    **SpringMVC 入门最简洁工程** SpringMVC 是 Spring 框架的一个模块,专为构建基于Java的企业级Web应用...随着经验的增长,你还可以探索更多高级特性,如拦截器、数据绑定、异常处理等,进一步提升你的SpringMVC技能。

    SpringMVC入门很简单之表单标签

    10. **拦截器(Interceptor)**:SpringMVC支持拦截器,可以在请求处理前后执行自定义逻辑,例如登录检查、日志记录等。 以上就是SpringMVC入门中的表单处理相关知识点。通过这些基础,开发者可以轻松地构建表单...

    一个简单的springMVC入门项目

    这个名为"一个简单的springMVC入门项目"的压缩包文件可能是为了帮助初学者了解和掌握SpringMVC的基本概念和操作流程。让我们深入探讨一下SpringMVC的核心组件和关键功能。 1. **DispatcherServlet**:作为SpringMVC...

    springMVC入门实例

    你可以在这里声明Controller beans,配置拦截器,以及设置视图解析器的属性。 4. **@Controller注解** `@Controller`是SpringMVC中的核心注解,用于标记处理HTTP请求的类。例如,你可能有一个名为`HelloController...

    SpringMVC学习(一)——SpringMVC入门小程序

    在“SpringMVC学习(一)——SpringMVC入门小程序”中,我们首先会接触到SpringMVC的基本概念。这通常包括以下几个核心组件: 1. **DispatcherServlet**:这是SpringMVC的前端控制器,负责接收HTTP请求,并根据配置...

    SpringMVC 快速入门

    通过这个快速入门教程,你可以掌握 SpringMVC 的基本使用方法,为进一步深入学习和开发基于 SpringMVC 的 Web 应用打下坚实的基础。在实践中,你可以尝试集成其他 Spring 模块,如 Spring Security(安全控制)、...

    springmvc入门helloworld

    Spring MVC 是一款强大的Java Web应用...在实际开发中,你还可以学习更多高级特性,如拦截器、异常处理、数据验证、AOP(面向切面编程)等。随着经验的增长,你将能熟练运用Spring MVC构建大型、高性能的企业级应用。

    Springmvc入门实例

    **Spring MVC 入门实例详解** Spring MVC 是一个基于 Java 的模型-视图-控制器(MVC)架构,是 ...随着对 Spring MVC 的深入学习,你将掌握更多高级特性,如拦截器、AOP、数据绑定、国际化等,实现更复杂的业务逻辑。

    SpringMVC 入门教程.pdf

    - 拦截器可以对请求和响应进行预处理和后处理,例如登录检查、日志记录等。 10. **异常处理** - 可以通过 `@ExceptionHandler` 注解自定义异常处理,提供统一的错误页面。 11. **视图解析器(ViewResolver)** ...

    springMVC入门框架(非注解)

    12. **拦截器**:Spring MVC允许添加自定义拦截器,对请求进行预处理和后处理,比如登录检查、权限验证等。 13. **测试**:Spring MVC提供了MockMVC工具,方便进行单元测试和集成测试,模拟HTTP请求并验证...

    springmvc入门实例

    此外,Spring MVC还支持数据绑定、异常处理、拦截器、国际化等功能,使得开发复杂Web应用变得更为便捷。通过深入学习和实践这个入门实例,你将能够更好地理解和运用Spring MVC框架,为构建高效、可维护的Java Web...

    SpringMVC 入门 框架搭建demo,

    **SpringMVC 入门与框架搭建** SpringMVC 是 Spring 框架...随着对 SpringMVC 的深入学习,你可以了解到更多高级特性,如拦截器、异常处理、数据绑定、AOP 集成等,这些都能帮助你构建更高效、更健壮的 Web 应用程序。

Global site tag (gtag.js) - Google Analytics