zoukankan      html  css  js  c++  java
  • springmvc处理器拦截器

    处理器拦截器(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";
    }
    }

    好了这就是拦截器。

    学习使我快乐! 一起成长
  • 相关阅读:
    Redis-10 Bitmap位图基本操作
    Redis学习-09 hyperloglog基本操作
    Redis学习-08 Geospatial地理位置详解
    Redis学习-07 Zset有序集合
    Redis学习-06 Hash哈希基本操作
    部分知识路径
    Docker 容器中安装vi、ifconfig、ping命令
    Java new一个对象的过程超级详解
    SVN
    创建ssm项目
  • 原文地址:https://www.cnblogs.com/zhizhuoDEZHUZHU/p/9618678.html
Copyright © 2011-2022 走看看