对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门面模式与底层机制

