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

  • 相关阅读:
    C# 动态生成word文档
    C# 利用SharpZipLib生成压缩包
    C# 程序异常关闭时的捕获
    轻松学习UML之用例图,时序图
    轻松学习UML之类图,状态图
    C# 一款属于自己的音乐播放器
    C# MessageBox自动关闭
    C# 用户控件之温度计
    Html富文本编辑器
    java工作流引擎证照库类型的流程设计 实现方案与演示案例
  • 原文地址:https://www.cnblogs.com/jwen1994/p/11210901.html
Copyright © 2011-2022 走看看