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
相关文章:
韩国服务器如何优化跨境访问实现高效连接?
网站制作网站,深圳做网站哪家比较好?
SQL查询语句优化的实用方法总结
微信小程序 input输入框控件详解及实例(多种示例)
如何快速搭建高效服务器建站系统?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
专业网站建设制作报价,网页设计制作要考什么证?
如何快速搭建高效香港服务器网站?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
网站企业制作流程,用什么语言做企业网站比较好?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
定制建站如何定义?其核心优势是什么?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
招贴海报怎么做,什么是海报招贴?
如何快速完成中国万网建站详细流程?
建站OpenVZ教程与优化策略:配置指南与性能提升
专业商城网站制作公司有哪些,pi商城官网是哪个?
北京企业网站设计制作公司,北京铁路集团官方网站?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
C#怎么使用委托和事件 C# delegate与event编程方法
C#如何在一个XML文件中查找并替换文本内容
如何快速搭建高效简练网站?
如何选择网络建站服务器?高效建站必看指南
详解jQuery中基本的动画方法
建站之星如何快速解决建站难题?
制作营销网站公司,淘特是干什么用的?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
已有域名和空间如何搭建网站?
如何在万网自助建站平台快速创建网站?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
C#如何使用XPathNavigator高效查询XML
广州营销型建站服务商推荐:技术优势与SEO优化解析
如何在宝塔面板中修改默认建站目录?
如何在IIS服务器上快速部署高效网站?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
如何规划企业建站流程的关键步骤?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
油猴 教程,油猴搜脚本为什么会网页无法显示?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
如何选购建站域名与空间?自助平台全解析
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
*请认真填写需求信息,我们会在24小时内与您取得联系。