帶着萌新看springboot源碼04


  繼續開頭說些廢話,我也不知道什么鬼,每次寫着寫着經常會寫到其他地方去了,太容易分神了。

  這次說一下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+鼠標左鍵,嘿嘿)

 

  打開DispatcherServlet這個類的doDispatcher方法

  到這里,就完成一部分了,再之后,ModelAndView返回到前端控制器,我們再來看看視圖解析器

   

  打開這個配置類,並找到視圖解析器的組件

 

接下來,我們就看看上圖中 ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();這里是如何設置視圖解析器的。打開這個類並找方法initServletContext(獲取容器中的所有視圖解析器,這點很是關鍵,那是不是我寫一個視圖解析器放進容器,在這里是不是也會取到呢?答案當然是可以取到,這也是后面我們自己定制一個視圖解析器的方法,而且,從這里可以看到,我們要自己定制一個組件,只需要實現相應組件的接口,然后丟到容器里就可以了,是不是很簡單!)

 

   viewResolver這個集合肯定很有用,果然,后面馬上就用到了

 

   到這里,大概的過程就走了一遍了,后面的就是模板引擎去渲染頁面響應了,沒什么說的,具體的還是要自己走走源碼就差不多了(估計不會去走源碼,咳咳)。

  其實說了這么多,大家也發現了,暫時springboot重點就是那些xxxAutoConfiguration,有了這些自動配置類,才能讓我們去關注邏輯,而不是那些機械化的配置。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM