zoukankan      html  css  js  c++  java
  • Spring MVC 装配拦截器

    当收到请求时,DispatcherServlet 将请求交给处理器映射(HandlerMapping),让它找出对应该请求的 HandlerExecutionChain 对象。在讲解 HandlerMapping 之前,有必要认识一下这个 HandlerExecutionChain 对象。

    HandlerExecutionChain 顾名思义是一个执行链,它包含一个处理该请求的处理器(Handler),同时包括若干个对该请求实施拦截的拦截器(HandlerInterceptor)。当 HandlerMapping 返回 HandlerExecutionChain 后,DispatcherServlet 将请求交给定义在 HandlerExecutionChain 中的拦截器和处理器一并处理。

    HandlerExecutionChain 是负责处理请求并返回 ModelAndView 的处理执行链,其结构如下图所示。请求在被 Handler 执行的前后,链中装配的 Handlerlnterceptor 会实施拦截操作。

    拦截器到底做了什么事情?我们通过考查拦截器的几个接口方法进行了解。
    1)boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler):在请求到达 Handler 之前,先执行这个前置处理方法。当该方法返回 false 时,请求直接返回,不会传递到链中的下一个拦截器,更不会传递到处理器链末端的 Handler 中。只有返回 true 时,请求才向链中的下一个处理节点传递。

    2)void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView modelAndView):在请求被 HandlerAdapter 执行后,执行这个后置处理方法。

    3)void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex):在响应已经被渲染后,执行该方法。

    位于处理器链末端的是一个 Handler,DispatcherServlet 通过 HandlerAdapter 适配器对 Handler 进行封装,并按统一的适配器接口对 Handler 处理方法进行调用。

    <mvc:interceptors>
        <mvc:interceptor>
            <mapping path="/secure/*">
            <bean class="com.smart.web.MyInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

    可以在 smart-servlet.xml 中配置多个拦截器,每个拦截器都可以指定一个匹配的映射路径,以限制拦截器的作用范围。

  • 相关阅读:
    latex
    slab着色,可以减少cache conflict miss概率么?
    内存管理 初始化(八) 至kswapd_init
    内存管理 初始化(七)kmem_cache_init_late 初始化slab分配器(下)
    vmwareubuntu18.04网络配置
    高德地图的一些使用心得
    mongodb聚合管道用法
    python学习链接
    python开发者常犯的10个错误(转)
    vim配置python开发环境(转)
  • 原文地址:https://www.cnblogs.com/jwen1994/p/11210901.html
Copyright © 2011-2022 走看看