springmvc 處理的過程詳解

架構流程

1.     用戶發送請求至前端控制器DispatcherServlet

2.     DispatcherServlet收到請求調用HandlerMapping處理器映射器。

3.     處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一併返回給DispatcherServlet。

4.     DispatcherServlet通過HandlerAdapter處理器適配器調用處理器。

5.     執行處理器(Controller,也叫後端控制器)。

6.     Controller執行完成返回ModelAndView

7.     HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet。

8.     DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。

9.     ViewReslover解析後返回具體View

10.  DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)。

11.  DispatcherServlet響應用戶。

上面大致上對SpringMVC框架結構做了一個粗略的解釋,下面我則會做一個更加細緻入微的講解。

1.     瀏覽器發送請求,請求具體發到誰呢?先發到前端控制器,也就是說所有的請求都給發到前端控制器,前端控制器是所有請求的入口,但前端控制器不能處理業務請求,它只是一個請求的轉發。

2.     誰來處理業務請求呢?Handler處理器來真正處理業務請求,那麼問題來了,前端控制器如何來找到這個Handler處理器呢?處理器映射器記錄的就是請求的url和處理的方法之間的映射關係,這個映射關係是怎麼建立起來的呢?就是通過@RequestMapping這個註解來建立起來的,這個映射關係就相當於一個Map(key-value這種形式),key就是請求的url,value就是處理的Handler。現在,前端控制器拿到這個請求之後,要找到對應的Handler,怎麼找呢?就要找處理器映射器,問它請求誰來處理?

3.     處理器映射器會根據你請求的url來找對應的處理器,找不到就會報錯,如果找到之後,這時,它就會返回一個處理器執行鏈,這個處理器執行鏈裏面除了有Handler之外,還有攔截器(這兒我們可以開發自己的攔截器),然後返回給前端控制器。

4.     前端控制器依然不能處理這個業務請求,它這時做的還有另外一件事情,因爲返回Handler,它也不知道這個Handler是什麼類型,因爲在spring mvc中Handler除了可以是註解形式的之外,其實還可以是非註解形式的(非註解形式我們一般不用),前端控制器並不知道這個Handler到底是什麼類型的,那就沒辦法執行它,那總得找個東西執行,這時它就會把這個事交給另外一個組件來處理,這個組件就叫處理器適配器,這個處理器適配器就是來適配不同類型的Handler。它就會根據你不同類型的Handler來選擇不同類型的適配器來執行它。

5.     假如當前Handler是註解形式的,那麼它就會選擇註解形式的處理器適配器來執行這個Handler。Handler就執行了,也就是說我們Controller類中的那個方法就執行了,方法執行之後,裏面的業務就處理了。

6.     業務處理之後,最後返回一個ModelAndView。處理器適配器拿到這個結果是沒有用的,它的作用就是執行這個Handler,把這個Handler執行完之後,它的事就做完了。

7.     做完之後,拿到這個返回結果,那麼它會原封不動地把這個返回結果扔給前端控制器,這時處理器適配器的事就做完了。

8.     前端控制器拿到這個ModelAndView,它還是沒有辦法處理,它還是不能返回html,這時它要找到相應的jsp,因爲ModelAndView即包含模型又包含視圖,這個視圖指定我們要用誰來渲染這個數據。我們要渲染數據,這時它就要找一個視圖解析器來解析這個視圖,由於這個視圖也有很多種(我們最常見的視圖是jsp,除了jsp,其實還有其他的,比如說還可以是報表,還可以是pdf,還可以是freemaker等),它會找不同的視圖解析器來處理。因爲現在我們最常用的視圖是jsp,所以它就找到jsp對應的視圖解析器。

9.     找到這個視圖解析器,它來把這個視圖解析,解析完了之後它會返回一個View對象。

10.  最後我們再調用這個視圖解析器的渲染視圖這個過程,渲染視圖這個過程其實就是對於我們的jsp來說,就是把這個數據渲染成html。

11.  最終渲染成html之後,就響應給用戶。

 

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