版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
首先,回顧下我們是怎么添加一個HTTP1234567publicclassoWorldController(path="hi",method=publicStringreturn}請求的Path:那么,假設(shè)讓你自己去實現(xiàn)HTTP代代123456789publicclassMap<RequestKey,Method>mapper=newpublicObjecthandle(HttpRequesthttpRequest){RequestKeyrequestKey=getRequestKey(httpRequest);Methodmethod=Object[]args=resolveArgsAccordingToMethod(httpRequest,returnmethod.invoke(controllerObject,}需要有一個地方(例如Map)去從HTTPpath/method到具體執(zhí)行方法的映射除此之外,你還需要一個東西,就是利用底層通信層來解析出你的HTTP請求。只有解析出請求了,才能知道path/method等信息,才有后續(xù)的執(zhí)行,否則也是“巧婦難為無米所以綜合來看,你大體上需要這些過程才能完成一個請求的解析和處理。那么接下來我們就按照處理順序分別看下SringBoot是如何實現(xiàn)的,對應(yīng)的一些關(guān)鍵實現(xiàn)又長什么樣。首先,解析HTTP請求。對于Spring而言,它本身并不提供通信層的支持,它是依賴于Tomcat、JettySpringBoot接依賴了Tomcat。依賴關(guān)系圖如下:可以通過下面的配置從默認(rèn)的Tomcat切換到Jetty:<!--UseJettyinstead--TomcatSpringBootTomcat關(guān)于Tomcat說白了,就是調(diào)用下述代碼行就會啟動1SpringApplication.run(Application.class,那為什么使用的是Tomcat123456789classServletWebServerFactoryConfigurationBeanMethods=@ConditionalOnClass({Servlet.class,Tomcat.class,UpgradeProtocol.class})@ConditionalOnMissingBean(value=ServletWebServerFactory.class,search=SpublicstaticclassEmbeddedTomcat{return}} BeanMethods=@ConditionalOnClass({Servlet.class,Server.class,Loader.class,@ConditionalOnMissingBean(value=ServletWebServerFactory.class,search=publicstaticclassEmbeddedJettypublicJettyServletWebServerFactoryObjectProvider<JettyServerCustomizer>serverCustomizers)return 2729//30TomcatJAR,所以下面的條件會成立,進而就依賴上了11@ConditionalOnClass({Servlet.class,Tomcat.class,UpgradeProtocol.class有了Tomcat后,當(dāng)一個HTTP請求時,會觸發(fā)Tomcat底層提供的NIO通信來完123456789publicvoidrun(){while(true){的if(wakeupCounter.getAndSet(-1)>0){keyCount=selector.selectNow();}elsekeyCount= SelectionKeysk=iNioSocketWrappersocketWrapper=processKey(sk,} 26上述代碼會完成請求的和處理,最終在processKey中把請求丟入線程池去在上述調(diào)用中,最終會進入SpringBoot的處理,即DispatcherServlet(上述調(diào)用棧沒有繼續(xù)截取完整調(diào)用,所以未顯示)。可以說,DispatcherServletHTTP請求的調(diào)度程序,為每一個Web請求映射一個請求的處理執(zhí)行體(API我們可以看下它的是什么?它本質(zhì)上就是一種Servlet,所以它是由下面的Servlet核最終它執(zhí)行到的是下面的doServiceprotectedvoiddoService(HttpServletRequestrequest,HttpServletResponsedoDispatch(request,41123456789protectedvoiddoDispatch(HttpServletRequestrequest,HttpServletResponse////1.分發(fā):DeterminehandlerforthecurrentHandlerExecutionChainmappedHandler=////Determinehandleradapterforthecurrentrequest.HandlerAdapterha=getHandlerAdapter(mappedHandler.getHandler());////2.執(zhí)行:Actuallyinvokethemv=ha.handle(processedRequest,response,//}尋找方法參考Dispachererlet#etanler,具體的查找遠(yuǎn)比開始給出的Map查找來得復(fù)雜,但是無非還是一個根據(jù)請求尋找候選執(zhí)行方法的過程,這里我們可以通過一個調(diào)試視圖感受下這種對應(yīng)關(guān)系:Map,其實就是上述調(diào)試視圖中的RequestMapHandlerMap。HTTP樣一個疑惑:Handler的映射是如何構(gòu)建出來的呢?說白了,關(guān)鍵就是RequestMapHandlerMap這個Bean的構(gòu)建過程afterPropertiesSet HandlerMethodMap#processCandidateBean方法protectedvoidprocessCandidateBean(StringbeanName)if(beanType!=null&&isHandler(beanType))4456}}isHandler(beanType12345protectedbooleanisHandler(Class<?>beanType)return(AnnotatedElementUtils.hasAnnotation(beanType,Controller.class)AnnotatedElementUtils.hasAnnotation(beanType,}這里你會發(fā)現(xiàn),判斷的關(guān)鍵條件是,是否標(biāo)記了合適的注解(Controller或者RequestMap)。只有標(biāo)記了,才能添加到Map信息。換言之,Spring在構(gòu)建RequestMapHandlerMap時,會處理所有標(biāo)記Controller和RequestMap的注解,然后解析它們構(gòu)建出請求到處理的映射關(guān)系。以上即為SpringBoot處理一個HTTP請求的過程,無非就是綁定一個內(nèi)嵌容(To
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年某物業(yè)國企單位招聘外包制人員備考題庫及答案詳解一套
- 北京大學(xué)2026年度應(yīng)屆畢業(yè)生公開招聘備考題庫(一)參考答案詳解
- 興山縣2026年“招才興業(yè)”事業(yè)單位人才引進公開招聘備考題庫華中農(nóng)業(yè)大學(xué)站有答案詳解
- 2026年新鄉(xiāng)市誠城卓人學(xué)校教師招聘備考題庫完整答案詳解
- 企業(yè)質(zhì)量管理體系制度
- 2026年西安鑫垚陶瓷復(fù)合材料股份有限公司招聘備考題庫及一套參考答案詳解
- 2026年衡東縣城鄉(xiāng)發(fā)展投資集團有限公司公開招聘工作人員21人備考題庫及一套參考答案詳解
- 天水公開招聘2026屆協(xié)議培養(yǎng)師范畢業(yè)生141人備考題庫及參考答案詳解1套
- 2026年青海兩彈一星干部學(xué)院招聘備考題庫及答案詳解一套
- 2026年韶關(guān)學(xué)院招聘備考題庫附答案詳解
- 2026《初中英語?優(yōu)翼學(xué)練優(yōu)》八上早讀本
- 金瓶梅課件教學(xué)
- 種子室內(nèi)檢驗技術(shù)-種子純度鑒定(種子質(zhì)量檢測技術(shù)課件)
- 抑郁病診斷證明書
- 心電監(jiān)測技術(shù)操作考核評分標(biāo)準(zhǔn)
- 歷史時空觀念的教學(xué)與評價
- 維克多高中英語3500詞匯
- 《LED顯示屏基礎(chǔ)知識培訓(xùn)》
- 第五屆全國輔導(dǎo)員職業(yè)能力大賽案例分析與談心談話試題(附答案)
- LY/T 2501-2015野生動物及其產(chǎn)品的物種鑒定規(guī)范
- GB/T 6529-2008紡織品調(diào)濕和試驗用標(biāo)準(zhǔn)大氣
評論
0/150
提交評論