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

  • 相关阅读:
    Nginx 301重定向域名
    linux中set的用法
    Linux下Oracle中SqlPlus时上下左右键乱码问题的解决办法
    PLSQL Developer连接远程oracle配置
    linux vnc 安装
    关于innodb_thread_concurrency参数 并发控制
    MySQL auto_increment的坑
    MongoDB常用操作命令大全
    MySQL集群Percona XtraDB Cluster安装搭建步骤详解
    3台服务器Redis高可用哨兵模式实现(转)
  • 原文地址:https://www.cnblogs.com/jwen1994/p/11210901.html
Copyright © 2011-2022 走看看