小編帶着小白看springboot源碼4

好了繼續上回說道,這次說一下springboot對於springmvc的大概整個流程,以請求動態網頁爲例 。

1.梳理一下springmvc的大概流程

首先是客戶端(瀏覽器)發送請求到前端控制器(dispatcherServlet)-------------->前端控制器就會去調用處理器映射器(HandlerMapping),去尋找真正的Handler(其實就是controller),返回執行器鏈(HandlerExecutionChain,本質上就是目標Handler和一些攔截器組成的)給前端控制器----------->前端控制器就去調用處理器適配器(HandlerAdapter)去執行這個Handler,返回模型數據和視圖(ModelAndView)給前端控制器------------->前端控制器從ModelAndView中獲取邏輯視圖(可以理解爲controller返回的字符串),前端控制器調用視圖解析器(ViewResolver)找到真正的視圖(可以理解爲就是加了一個前後綴,例如上節將的去類路徑下找 “/template/xxx.html”)-------------->將真正的視圖返回到前端控制器------------>模板引擎去渲染解析真正的視圖響應客戶端(ssm中就是去把裏面寫的jsp標籤內容以及html標籤內容,都變成servlet,編譯成字節碼文件,運行,然後響應客戶端)

2.springboot的流程

其實吧,springboot暫時可以理解爲ssm中的springmvc+spring,雖然說這個理解不準確,但是有助於理解,不然腦中就只有一個印象:springboot很牛逼,做web應用特快,不需要配置,還是一個框架。。emmmm.....

所以,以前springmvc配置的東西,springboot裏面也有,前端控制器,映射器,適配器,視圖解析器等在springboot中也有,就看你會不會找。(不用想,肯定在那xxxAutoConfiguration中!不然加載那麼多自動配置類吃多了啊....)

好,第一步,我們先來找找前端控制器,在那些自動配置類中,有個叫做DispatcherServletAutoConfiguration,打開這個類(ctrl+鼠標左鍵,嘿嘿)
小編帶着小白看springboot源碼4

打開DispatcherServlet這個類的doDispatcher方法
小編帶着小白看springboot源碼4
小編帶着小白看springboot源碼4
小編帶着小白看springboot源碼4
到這裏,就完成一部分了,再之後,ModelAndView返回到前端控制器,我們再來看看視圖解析器

打開這個配置類,並找到視圖解析器的組件
小編帶着小白看springboot源碼4
小編帶着小白看springboot源碼4
接下來,我們就看看上圖中 ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();這裏是如何設置視圖解析器的。打開這個類並找方法initServletContext(獲取容器中的所有視圖解析器,這點很是關鍵,那是不是我寫一個視圖解析器放進容器,在這裏是不是也會取到呢?答案當然是可以取到,這也是後面我們自己定製一個視圖解析器的方法,而且,從這裏可以看到,我們要自己定製一個組件,只需要實現相應組件的接口,然後丟到容器裏就可以了,是不是很簡單!)
小編帶着小白看springboot源碼4
小編帶着小白看springboot源碼4
viewResolver這個集合肯定很有用,果然,後面馬上就用到了
小編帶着小白看springboot源碼4
小編帶着小白看springboot源碼4
到這裏,大概的過程就走了一遍了,後面的就是模板引擎去渲染頁面響應了,沒什麼說的,具體的還是要自己走走源碼就差不多了(估計不會去走源碼,咳咳)。不會走源碼的可點擊鏈接學習:https://ke.qq.com/course/260263?flowToken=100687
其實說了這麼多,大家也發現了,暫時springboot重點就是那些xxxAutoConfiguration,有了這些自動配置類,才能讓我們去關注邏輯,而不是那些機械化的配置。

下一節就說說我們往這些組件添加更多功能,因爲由於一些特殊原因,springboot自動配置的功能不能滿足我們的要求。或者乾脆了說,我們想要把springboot某個組件替換掉,用我們自己寫的組件,多好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章