中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

去哪找人做網(wǎng)站seo技術(shù)網(wǎng)網(wǎng)

去哪找人做網(wǎng)站,seo技術(shù)網(wǎng)網(wǎng),網(wǎng)站開(kāi)發(fā)和網(wǎng)站建設(shè),怎么看網(wǎng)站域名前言: 前面我們分析了 Spring MVC 的工作流程源碼,其核心是 DispatcherServlet#doDispatch 方法,我們前面分析了獲取 Handler 的方法 DispatcherServlet#getHandler 方法,本篇我們重點(diǎn)分析一下獲取當(dāng)前請(qǐng)求的適配器 HandlerAdapt…

前言:

前面我們分析了 Spring MVC 的工作流程源碼,其核心是 DispatcherServlet#doDispatch 方法,我們前面分析了獲取 Handler 的方法 DispatcherServlet#getHandler 方法,本篇我們重點(diǎn)分析一下獲取當(dāng)前請(qǐng)求的適配器 HandlerAdapter 的實(shí)現(xiàn)原理,具體方法入口是 DispatcherServlet#getHandlerAdapter。

Spring MVC 知識(shí)傳送門(mén):

詳解 Spring MVC(Spring MVC 簡(jiǎn)介)

Spring MVC 初始化源碼分析

Spring MVC 工作流程源碼分析

Spring MVC 源碼分析之 DispatcherServlet#getHandler 方法

** DispatcherServlet#getHandlerAdapter方法源碼分析**

DispatcherServlet#getHandlerAdapter方法就是從 handlerAdapters 中查詢匹配當(dāng)前請(qǐng)求的 Handler,只要找到了就不在循環(huán)直接返回,我們我們重點(diǎn)關(guān)注adapter.supports(handler) 這行代碼,這里實(shí)際調(diào)用的是接口的抽象類 AbstractHandlerMapping 中的 getHandler 方法,下面接著分析。

//org.springframework.web.servlet.DispatcherServlet#getHandlerAdapter
protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException {this.handlerAdapters 為空判斷 DispatcherServlet 初始化時(shí)注冊(cè)的 handlerAdaptersif (this.handlerAdapters != null) {//迭代遍歷Iterator var2 = this.handlerAdapters.iterator();while(var2.hasNext()) {HandlerAdapter adapter = (HandlerAdapter)var2.next();//找到匹配當(dāng)前 handler的 adapterif (adapter.supports(handler)) {//找到就返回return adapter;}}}//如果最后都沒(méi)找到 拋出異常throw new ServletException("No adapter for handler [" + handler + "]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler");
}

AbstractHandlerMethodAdapter#supports 方法源碼分析

AbstractHandlerMethodAdapter#supports 沒(méi)有什么復(fù)雜的邏輯,只是判斷了 handler 是否是 HandlerMethod 類型,至于 AbstractHandlerMethodAdapter#supportsInternal 方法它默認(rèn)返回 fasle,也就是說(shuō)只要 handler 是 HandlerMethod 類型,就算匹配成功。

//org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter#supports
public final boolean supports(Object handler) {//handler 是否是 HandlerMethod 類型 // this.supportsInternal 抽象方法 由子類實(shí)現(xiàn)  RequestMappingHandlerAdapter#supportsInternal 默認(rèn)返回 truereturn handler instanceof HandlerMethod && this.supportsInternal((HandlerMethod)handler);
}
//org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter#supportsInternal
protected abstract boolean supportsInternal(HandlerMethod var1);//org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#supportsInternal
protected boolean supportsInternal(HandlerMethod handlerMethod) {return true;
}

HandlerExecutionChain#applyPreHandle 方法源碼分析

HandlerExecutionChain#applyPreHandle 方法的主要左右就是調(diào)用攔截器的 preHandle 方法,如果有某個(gè)攔截器的 preHandle 方法返回 false,就會(huì)逆向調(diào)用返回 true 的攔截器的 triggerAfterCompletion 方法。

//org.springframework.web.servlet.HandlerExecutionChain#applyPreHandle
boolean applyPreHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {//獲取所有攔截器數(shù)組HandlerInterceptor[] interceptors = this.getInterceptors();//為空判斷if (!ObjectUtils.isEmpty(interceptors)) {//循環(huán)調(diào)用 攔截器的 preHandle 方法//this.interceptorIndex 記錄當(dāng)前攔截器的位置for(int i = 0; i < interceptors.length; this.interceptorIndex = i++) {HandlerInterceptor interceptor = interceptors[i];//判斷攔截器的 preHandle 方法返回值if (!interceptor.preHandle(request, response, this.handler)) {//攔截器 preHandle 方法返回 false 則反向調(diào)用返回 true 的那些攔截器的 afterCompletion 方法this.triggerAfterCompletion(request, response, (Exception)null);//返回 falsereturn false;}}}return true;
}//org.springframework.web.servlet.HandlerExecutionChain#triggerAfterCompletion
void triggerAfterCompletion(HttpServletRequest request, HttpServletResponse response, @Nullable Exception ex) throws Exception {//獲取所有攔截器HandlerInterceptor[] interceptors = this.getInterceptors();//為空判斷if (!ObjectUtils.isEmpty(interceptors)) {//反向遍歷 這里是的 interceptorIndex 上面記錄了的 --i 就是反向遍歷for(int i = this.interceptorIndex; i >= 0; --i) {HandlerInterceptor interceptor = interceptors[i];try {//調(diào)用攔截器的 afterCompletion 方法interceptor.afterCompletion(request, response, this.handler, ex);} catch (Throwable var8) {logger.error("HandlerInterceptor.afterCompletion threw exception", var8);}}}}

HandlerExecutionChain#applyPostHandle 方法源碼分析

攔截器的 preHandle 方法調(diào)用完成后,就會(huì)調(diào)用 handle 方法處理具體請(qǐng)求(后面分析),handle 方法調(diào)用完成后就會(huì)調(diào)用攔截器的 applyPreHandle 方法, HandlerExecutionChain#applyPreHandle 方法的主要左右就是逆向調(diào)用攔截器的 postHandle 方法。

//org.springframework.web.servlet.HandlerExecutionChain#applyPostHandle
void applyPostHandle(HttpServletRequest request, HttpServletResponse response, @Nullable ModelAndView mv) throws Exception {//獲取所有攔截器HandlerInterceptor[] interceptors = this.getInterceptors();//為空判斷if (!ObjectUtils.isEmpty(interceptors)) {for(int i = interceptors.length - 1; i >= 0; --i) {//逆向調(diào)用攔截器的 postHandle 方法HandlerInterceptor interceptor = interceptors[i];interceptor.postHandle(request, response, this.handler, mv);}}}

本篇主要分析了 Spring MVC 工作流程中比較簡(jiǎn)單的幾個(gè)關(guān)鍵點(diǎn),HandlerAdapter 的適配過(guò)程、攔截器的前置后置處理等,這些在流程中比較簡(jiǎn)單的環(huán)節(jié)就放在一起分析了,希望可以幫助到有需要的朋友。

歡迎提出建議及對(duì)錯(cuò)誤的地方指出糾正。

http://www.risenshineclean.com/news/38391.html

相關(guān)文章:

  • 人大網(wǎng)站建設(shè)方案湖南省人民政府
  • 機(jī)械類畢業(yè)設(shè)計(jì)代做網(wǎng)站推薦官網(wǎng)seo關(guān)鍵詞排名系統(tǒng)
  • 哪里有做雜志的免費(fèi)模板下載網(wǎng)站網(wǎng)絡(luò)服務(wù)合同
  • 做網(wǎng)站買空間谷歌廣告開(kāi)戶
  • 浙江建筑信息監(jiān)管平臺(tái)seo建站公司
  • 做網(wǎng)站視頻 上傳到哪兒百度手機(jī)版下載
  • 網(wǎng)站招工費(fèi)怎么做會(huì)計(jì)分錄企業(yè)推廣策劃
  • 幫人做網(wǎng)站在徐州被敲詐五萬(wàn)網(wǎng)站開(kāi)發(fā)軟件
  • 網(wǎng)站收錄做關(guān)鍵詞排名百度網(wǎng)站優(yōu)化
  • 自助微信網(wǎng)站芭蕉視頻app無(wú)限次數(shù)
  • 互聯(lián)網(wǎng)網(wǎng)站建設(shè)情況統(tǒng)計(jì)表關(guān)鍵詞資源
  • 哈爾濱微網(wǎng)站建設(shè)太原seo優(yōu)化
  • 哪些網(wǎng)站做批發(fā)衣服電子商務(wù)網(wǎng)站建設(shè)與維護(hù)
  • 南通做網(wǎng)站baidu tg做網(wǎng)站公司排名
  • 電子商城網(wǎng)站開(kāi)發(fā)教程網(wǎng)絡(luò)推廣引流是做什么工作
  • bootstrap微網(wǎng)站模板下載新聞播報(bào)最新
  • 網(wǎng)站域名備案資料seo客服
  • 青島正規(guī)的網(wǎng)站建設(shè)公司沈陽(yáng)網(wǎng)頁(yè)建站模板
  • 企業(yè)宣傳網(wǎng)站制作外鏈系統(tǒng)
  • 做創(chuàng)意ppt網(wǎng)站有哪些網(wǎng)頁(yè)在線生成
  • asp汽車租憑網(wǎng)站源碼搜索引擎推廣的關(guān)鍵詞
  • 西安 網(wǎng)站搭建深圳seo網(wǎng)絡(luò)優(yōu)化公司
  • wordpress tag 去掉優(yōu)化公司排行榜
  • 無(wú)錫企業(yè)網(wǎng)站的建設(shè)競(jìng)價(jià)廣告是怎么推廣的
  • 引流軟件下載站網(wǎng)推和地推的區(qū)別
  • 網(wǎng)站建設(shè)的日常工作有什么做個(gè)公司網(wǎng)站多少錢
  • 購(gòu)物網(wǎng)站的功能網(wǎng)站建設(shè)策劃書(shū)
  • 網(wǎng)站后臺(tái)管理系統(tǒng)欄目位置天津疫情最新消息
  • 甘肅疫情遭中央批評(píng)原因西安seo優(yōu)化培訓(xùn)
  • 做相親網(wǎng)站常用的seo查詢工具