对handlerexecutionchain类的深入理解

发布时间 - 2026-01-11 02:09:48    点击率:

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 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 大学网站设计制作软件有哪些,如何将网站制作成自己app?  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  网站制作免费,什么网站能看正片电影?  如何在自有机房高效搭建专业网站?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Bootstrap CSS布局之列表  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Laravel如何创建自定义Facades?(详细步骤)  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  中山网站制作网页,中山新生登记系统登记流程?  Bootstrap整体框架之JavaScript插件架构  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  详解jQuery中基本的动画方法  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  zabbix利用python脚本发送报警邮件的方法  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  IOS倒计时设置UIButton标题title的抖动问题  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何在云指建站中生成FTP站点?  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Laravel如何实现模型的全局作用域?(Global Scope示例)  PHP正则匹配日期和时间(时间戳转换)的实例代码  如何快速生成ASP一键建站模板并优化安全性?  Thinkphp 中 distinct 的用法解析  如何在云虚拟主机上快速搭建个人网站?  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  如何在Tomcat中配置并部署网站项目?  如何快速搭建虚拟主机网站?新手必看指南  如何快速生成凡客建站的专业级图册?  JavaScript实现Fly Bird小游戏  b2c电商网站制作流程,b2c水平综合的电商平台?  Laravel怎么使用Intervention Image库处理图片上传和缩放  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  详解阿里云nginx服务器多站点的配置  lovemo网页版地址 lovemo官网手机登录  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制