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小时内与您取得联系。