1. 程式人生 > >spring MVC 生命週期

spring MVC 生命週期

                               Spring MVC 的生命週期

其實就是跟蹤前臺傳送請求到後臺再到響應的一個過程

下圖是請求所經歷的所有的站點

下面根據請求經過站點的順序,開始分析:

1、剛剛離開瀏覽器的請求

首先,請求一般會存在兩種資訊:一種是包含請求的URL,一種則是內容資訊(如:提交的表單資訊)

此過程是請求進入到一個前端控制器DispatcherServlet

DispatcherServlet其實它本質上就是一個單例的Servlet,它的功能是將請求委託給應用程式的其他元件來執行實際的處理。

2、前端控制器:該把請求傳送到哪個控制器

一個典型的應用程式中可能會有多個控制器。

DispatcherServlet需要知道應該把當前的請求傳送到哪個控制器下,這個時候它回去查詢一個或多個處理器對映(handler mapper)。

處理器對映會根據請求所攜帶的URL來進行決策,然後將結果返回給DispatcherServlet。

3、終於到了控制器

DispatchServlet經過第二站已經從處理器對映那知道了應該將請求傳送到哪個控制器下。

DispatchServlet將當前的請求傳送至指定的控制器下,請求會將內容資訊交給控制器,並耐心等待控制器將內容處理後的結果。

請注意:設計良好的控制器很少甚至基本上不會做處理內容資訊的工作,而是將其委託給一個或多個服務物件去處理。

4、處理完了,該回去了

控制器完成資訊業務邏輯處理後,通常會產生一些資訊,這些資訊需要返回給使用者並在瀏覽器上顯示。

這些資訊被稱為模型(Model)。

我們不能把直接把模型返回,需要經過以使用者友好的方式進行格式化(通常情況下是HTML),所以資訊需要傳送給一個檢視(View),通常會是JSP。

控制器所做的最後一件事就是將資料打包,並且標示出用於渲染輸出的檢視名。它接下來會將請求連同模型和檢視名傳送回DispatchServlet。

注意:傳遞給DispatchServlet的檢視名並不直接表示某個特定的JSP。實際上,它都不能確定檢視就是JSP。它僅僅是傳遞了一個邏輯名稱,這個結果將用來查詢產生結果的真正檢視。

5、真正的檢視在那裡

由上一步我們會知道DispatchServlet獲得了檢視名,確切的說是邏輯檢視名。

DispatchServlet使用檢視解析器,檢視解析器對邏輯檢視名進行解析,匹配為一個特定檢視的實現。

然後將這個特定的檢視返回給DispatchServlet。

6、檢視的實現

由上一步我們知道,DispatcherServlet已經知道是哪個檢視。

這一步主要將檢視進行實現,在這裡它交付資料模型。

7、渲染輸出

檢視將使用模型資料渲染輸出,這個輸出會通過響應物件傳遞給客戶端。