处理器拦截器(interceptor)是做什么用的?

想知道处理拦截器做什么用的,你要先了解下处理·流程链·。

前端控制器(dispatcherServlet)接收到请求,通过handleMapping映射处理器获取处理流程链,处理流程链包括,拦截器interceptor和处理器controller。

在没有配置拦截器的情况下,直接由处理器处理请求,如果配置了拦截器,就是拦截器对HandlerController(处理器)方法执行前后的一个处理。

我的理解就是拦截器有点像aop的概念,面向切面的意思。下面演示下springmvc是怎样实现控制器的。

 拦截器的使用场景

 处理所有请求共性问题:

1、乱码问题:用request,response参数去设置编码;

2、解决权限验证问题(是否登陆,取session对象查看);

拦截器与过滤器的区别

1、拦截器Interceptor依赖于框架容器,基于反射机制,只过滤请求;

2、过滤器Filter依赖于Servlet容器,基于回调函数,过滤范围大;


首先,实现接口HandlerInterceptor,并实现他的三个方法,afterCompletion,postHandler,preHandler。

//Interceptor拦截者
public class MyInterceptor implements HandlerInterceptor {
// 整个请求处理完毕回调方法,返回视图之后调用。

// 常用于作于资源的销毁,流等.类似于析构函数.
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("----------------执行after");
}
// 后处理回调方法,返回视图之前调用。

//modelAndView:可以通过modelAndView参数改变显示的视图,或者修改发往视图的方法
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("--------------------执行post");
}
// 预处理回调方法,实现处理器的预处理。
// 返回true,执行下一个拦截器或者处理器,返回false中断执行。

//Object arg2 表示的是被拦截的请求的目标对象

// 可以做权限校验,在返回false时可以用response做出响应处理。
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("-------------执行pre");
return true;
}

}


然后到spring.xml中注册拦截器(拦截路径,表示拦截哪些请求的url,启用拦截器,表示给哪个类启用这个拦截器)

<!-- 拦截器配置 学习-http://elim.iteye.com/blog/1750680 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截路径 -->
<mvc:mapping path="/myController/*" />
<!-- 启用拦截器 -->
<bean class="com.xxx.util.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>


下面是被拦截的类

@Controller
@RequestMapping("/myController")
public class MyController {
@RequestMapping("/toSuccess")
public String toSuccessPage() {
System.out.println("执行mycontroller的success方法");
return "success";
}
}

好了这就是拦截器。

springmvc处理器拦截器的更多相关文章

  1. SpringMVC处理器拦截器 Interceptor

    拦截器概念 Java 里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种 ...

  2. springmvc中拦截器与springmvc全局异常处理器的问题

    最近在做一个练手的小项目, 系统架构中用了springmvc的全局异常处理器, 做了系统的统一异常处理. 后来加入了springmvc的拦截器, 为了一些需求, 在拦截器中的 preHandle 方法 ...

  3. SpringMVC学习--拦截器

    简介 Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理. 拦截器定义 定义拦截器,实现HandlerInterceptor接 ...

  4. SpringMVC 学习-拦截器 HandlerInterceptor 类

    一.拦截器 HandlerInterceptor 类的作用 SpringMVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理. 二.怎么使用呢? 1. ...

  5. 转 :关于springmvc使用拦截器

    原博客: http://elim.iteye.com/blog/1750680 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的 ...

  6. 初学springMVC的拦截器

    springMvc拦截器的执行顺序! 拦截器的各个方法的作用: /** * 登录验证拦截器 */      public class Intercepter implements HandlerInt ...

  7. SpringMVC的拦截器讲解

    Spring MVC 的处理器拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理. 用户可以自己定义一些拦截器来实现特定的功能. 谈到拦截器,还要向大家提一个词 ...

  8. SpringMVC:拦截器

    SpringMVC:拦截器   概述 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.开发者可以自己定义一些拦截器来实现特定的功能. 过 ...

  9. springmvc的拦截器

    什么是拦截器                                                         java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...

随机推荐

  1. SharePoint 2013 - Breadcrumb

    By default SharePoint 2013 doesn’t have a breadcrumb (like the 2010 version used to have). This was ...

  2. EL表达式的内置对象

    在EL表达式中,无需创建就可以使用的对象称之为EL隐藏(隐含.内置)对象.在EL中一共有11个隐藏对象,它们都与Map相似.其中10是Map,一个是 PageContext. 参数隐藏对象 这些隐藏对 ...

  3. Hadoop ->> Hadoop是什么?

    Hadoop是什么? 1)Hadoop是一个分布式计算平台,程序员可以在不需要知道底层结构的情况下实现集群并行运算: 2)Hadoop不只是一个软件或者系统,它代表的是一个生态圈,一个做大数据分析计算 ...

  4. 【Leetcode】【Easy】Remove Duplicates from Sorted List

    Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...

  5. 【java开发系列】—— Tomcat编译报错

    由于之前Eclipse里面有一个可移植性的web工程,但是在我很久没用后,再次登录这个IDE的时候就发现了问题. 首先,我的电脑里面有两个版本的JDK,1.6和1.7.两个版本的Tomcat6和7以及 ...

  6. SAP S4CRM 1811 服务订单API介绍

    Jerry在今年2月28日,SAP Customer Management for S/4HANA 1.0正式问世这个具有纪念意义的日子,同时发布了中英文版的博客进行介绍. 英文版发在SAP社区上,至 ...

  7. bootstrap-multiselect.js如何动态更新select里的数据

    在使用jQuery的bootstrap-multiselect插件时可能会遇到一个问题 就是想要动态的去更新select里的数据 比如我们要使一个id=select的选择框实现多选 那么先用ajax获 ...

  8. Shell脚本学习之expect命令

     转载:http://blog.csdn.net/leexide/article/details/17485451 目录(?)[-] 一概述 二expect的安装 一Tcl 安装 二expect 安装 ...

  9. Python:函数的命名空间、作用域与闭合函数

    1,参数陷阱 如果默认参数的只是一个可变数据类型,那么每一次调用的时候,如果不传值就共用这个数据类型的资源. 2,三元运算 c=a if a>b else b#如果a>b返回a,否则,返回 ...

  10. 初学Pollard Rho算法

    前言 \(Pollard\ Rho\)是一个著名的大数质因数分解算法,它的实现基于一个神奇的算法:\(MillerRabin\)素数测试(关于\(MillerRabin\),可以参考这篇博客:初学Mi ...