一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 對handlerexecutionchain類的深入理解

對handlerexecutionchain類的深入理解

2020-11-27 10:43Java教程網 Java教程

下面小編就為大家帶來一篇對handlerexecutionchain類的深入理解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

HandlerExecutionChain比較簡單,好理解。

?
1
2
3
4
/*
 * 處理器執行鏈由處理器對象和攔截器組成。
 */
public class HandlerExecutionChain {

下面是類的部分屬性。

?
1
2
3
4
5
private final Object handler; //處理器對象。
 
  private HandlerInterceptor[] interceptors; //攔截器數組
 
  private List<HandlerInterceptor> interceptorList; //攔截器列表
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
   * 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;
  }
?
1
2
3
4
5
6
7
8
9
10
11
12
/*
   * 執行已經注冊的攔截器 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);
      }
    }
  }
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
   * 這個方法只會執行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類的深入理解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品亚洲456在线播放 | 国产成人久久精品推最新 | 91成| 四虎一影院区永久精品 | 国内精品一区二区在线观看 | 午夜久久久久久亚洲国产精品 | 成人国产网站v片免费观看 成人国产精品视频 | 69老司机亚洲精品一区 | 教室眠催白丝美女校花 | 欧美成人三级伦在线观看 | yin乱被cao系列 | 日韩欧美亚洲每日更新网 | 久青草国产在线观看视频 | 免费看美女被靠到爽的视频 | 国产成人综合久久精品红 | 8x在线永久成人影院 | 亚洲sss综合天堂久久久 | 国产剧情一区 | 白丝美女同人18漫画 | 久久精品久久久 | 国产午夜精品一区二区三区不卡 | 国产精品va在线观看无 | 亚洲成人91 | 跪在老师脚下吃丝袜脚 | 国产美女亚洲精品久久久综合 | 99精品国产自产在线观看 | 热久久亚洲 | 日本加勒比在线精品视频 | 天天快乐高清在线观看 | 超爽人人做人人爽 | 男男gaygays国内 | 国产九九| 欧美一区二区三区免费观看视频 | 免费在线看片网站 | 30分钟的高清视频在线观看 | 男同巨黄gay小说好爽 | 草草视频免费看 | 欧美日韩一区二区三区免费不卡 | 国产精品一区二区久久 | 蜜桃成熟3在线观看 | 天堂69亚洲精品中文字幕 |