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 中配置多个拦截器,每个拦截器都可以指定一个匹配的映射路径,以限制拦截器的作用范围。

  • 相关阅读:
    网页导出PDF文件
    图片翻转导航
    瀑布流之ajax
    楼梯效果
    数码时钟
    数字字母随机验证码
    kafka shell
    zookeeper shell
    正则
    Linux(一)
  • 原文地址:https://www.cnblogs.com/jwen1994/p/11210901.html
Copyright © 2011-2022 走看看