全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

对handlerexecutionchain类的深入理解

HandlerExecutionChain类比较简单,好理解。

/*
 * 处理器执行链由处理器对象和拦截器组成。
 */
public class HandlerExecutionChain {

下面是类的部分属性。

private final Object handler; //处理器对象。

  private HandlerInterceptor[] interceptors; //拦截器数组

  private List<HandlerInterceptor> interceptorList; //拦截器列表
/**
   * Apply preHandle methods of registered interceptors.
   * @return {@code true} if the execution chain should proceed with the
   * next interceptor or the handler itself. Else, DispatcherServlet assumes
   * that this interceptor has already dealt with the response itself.
   * 执行已经注册的拦截的 preHandle()方法。如果返回true,则执行链可以执行下一个拦截器的preHandle()方法或 handler 自身。
   * 否则,
   */
  boolean applyPreHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {
    HandlerInterceptor[] interceptors = getInterceptors();
    if (!ObjectUtils.isEmpty(interceptors)) {
      for (int i = 0; i < interceptors.length; i++) {
        HandlerInterceptor interceptor = interceptors[i];
        if (!interceptor.preHandle(request, response, this.handler)) {
          triggerAfterCompletion(request, response, null);
          return false;
        }
        this.interceptorIndex = i;
      }
    }
    return true;
  }
/*
   * 执行已经注册的拦截器 postHandle()方法。
   */
  void applyPostHandle(HttpServletRequest request, HttpServletResponse response, ModelAndView mv) throws Exception {
    HandlerInterceptor[] interceptors = getInterceptors();
    if (!ObjectUtils.isEmpty(interceptors)) {
      for (int i = interceptors.length - 1; i >= 0; i--) {
        HandlerInterceptor interceptor = interceptors[i];
        interceptor.postHandle(request, response, this.handler, mv);
      }
    }
  }
/**
   * 这个方法只会执行preHandle()方法已经成功执行并且返回true的拦截器中的postHandle()方法。
   */
  void triggerAfterCompletion(HttpServletRequest request, HttpServletResponse response, Exception ex)
      throws Exception {

    HandlerInterceptor[] interceptors = getInterceptors();
    if (!ObjectUtils.isEmpty(interceptors)) {
      for (int i = this.interceptorIndex; i >= 0; i--) {
        HandlerInterceptor interceptor = interceptors[i];
        try {
          interceptor.afterCompletion(request, response, this.handler, ex);
        }
        catch (Throwable ex2) {
          logger.error("HandlerInterceptor.afterCompletion threw exception", ex2);
        }
      }
    }
  }

以上这篇对handlerexecutionchain类的深入理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# handlerthread的理解  # 拦截器  # 给大家  # 只会  # 希望能  # 这篇  # 小编  # 大家多多  # 器中  # preHandle  # interceptors  # lt  # List  # gt  # interceptorList  # Apply  # chain  # execution  # interceptor  # proceed  # true 


相关文章: 香港网站服务器数量如何影响SEO优化效果?  ,巨量百应是干嘛的?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  装修招标网站设计制作流程,装修招标流程?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  如何零基础在云服务器搭建WordPress站点?  专业商城网站制作公司有哪些,pi商城官网是哪个?  如何通过cPanel快速搭建网站?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  免费视频制作网站,更新又快又好的免费电影网站?  东莞专业制作网站的公司,东莞大学生网的网址是什么?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  建站之星代理平台如何选择最佳方案?  如何快速重置建站主机并恢复默认配置?  宝塔建站助手安装配置与建站模板使用全流程解析  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  ,交易猫的商品怎么发布到网站上去?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  如何快速搭建高效WAP手机网站吸引移动用户?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  建站之星安装失败:服务器环境不兼容?  黑客如何利用漏洞与弱口令入侵网站服务器?  制作网站的公司有哪些,做一个公司网站要多少钱?  如何通过主机屋免费建站教程十分钟搭建网站?  为什么Go需要go mod文件_Go go mod文件作用说明  如何在阿里云虚拟主机上快速搭建个人网站?  小程序网站制作需要准备什么资料,如何制作小程序?  如何基于云服务器快速搭建网站及云盘系统?  建站主机空间推荐 高性价比配置与快速部署方案解析  如何通过远程VPS快速搭建个人网站?  css网站制作参考文献有哪些,易聊怎么注册?  济南企业网站制作公司,济南社保单位网上缴费步骤?  制作网站的基本流程,设计网站的软件是什么?  如何快速上传建站程序避免常见错误?  黑客如何通过漏洞一步步攻陷网站服务器?  想学网站制作怎么学,建立一个网站要花费多少?  怎么将XML数据可视化 D3.js加载XML  建站主机核心功能解析:服务器选择与网站搭建流程指南  nginx修改上传文件大小限制的方法  中山网站推广排名,中山信息港登录入口?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  网站制作模板下载什么软件,ppt模板免费下载网站?  如何用狗爹虚拟主机快速搭建网站?  Swift中循环语句中的转移语句 break 和 continue  如何快速搭建自助建站会员专属系统? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。