1. 程式人生 > >springMVC系列(一)——簡介

springMVC系列(一)——簡介

簡介

Spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動型別的輕量級Web框架。是服務到工作者模式的實現。

服務到工作者模式:Front Controller + Application Controller + Page Controller +Context

即,前端控制器+應用控制器+頁面控制器(也有稱其為動作)+上下文,


執行流程如下:


職責:

Front Controller:前端控制器,負責為表現層提供統一訪問點,由前端控制器統一回調相應的功能方法;並且可以為多個請求提供共用的邏輯(如準備上下文等等),將選擇具體檢視和具體的功能處理分離。

Application Controller:應用控制器,前端控制器分離選擇具體檢視和具體的功能處理之後,需要有人來管理,應用控制器就是用來選擇具體檢視技術(檢視的管理)和具體的功能處理(頁面控制器/命令物件/動作管理),一種策略設計模式的應用,可以很容易的切換檢視/頁面控制器,相互不產生影響。

Page Controller(Command):頁面控制器/動作/處理器:功能處理程式碼,收集引數、封裝引數到模型,轉調業務物件處理模型,返回邏輯檢視名交給前端控制器(和具體的檢視技術解耦),由前端控制器委託給應用控制器選擇具體的檢視來展示,可以是命令設計模式的實現。頁面控制器也被稱為處理器或動作。

Context:上下文,將相關資料放置在上下文,從而與協議無關(如Servlet API)的訪問/設定模型資料

在springMVC中

前端控制器是DispatcherServlet;

應用控制器其實拆為處理器對映器(Handler Mapping)進行處理器管理和檢視解析器(View Resolver)進行檢視管理;

頁面控制器/動作/處理器為Controller介面(僅包含ModelAndView handleRequest(request, response) 方法)的實現(也可以是任何的POJO類)。

SpringMVC處理請求流程


圖2-1

具體執行步驟如下:

1、  首先使用者傳送請求————>前端控制器,前端控制器根據請求資訊(如URL)來決定選擇哪一個頁面控制器進行處理並把請求委託給它,即以前的控制器的控制邏輯部分;圖2-1中的1、2步驟;

2、  頁面控制器接收到請求後,進行功能處理,首先需要收集和繫結請求引數到一個物件,這個物件在Spring Web MVC中叫命令物件,並進行驗證,然後將命令物件委託給業務物件進行處理;處理完畢後返回一個ModelAndView(模型資料和邏輯檢視名);圖2-1中的3、4、5步驟;

3、  前端控制器收回控制權,然後根據返回的邏輯檢視名,選擇相應的檢視進行渲染,並把模型資料傳入以便檢視渲染;圖2-1中的步驟6、7;

4、  前端控制器再次收回控制權,將響應返回給使用者,圖2-1中的步驟8;至此整個結束。

SpringMVC架構


核心架構的具體流程步驟如下:

1、  首先使用者傳送請求——>DispatcherServlet,前端控制器收到請求後自己不進行處理,而是委託給其他的解析器進行處理,作為統一訪問點,進行全域性的流程控制;

2、  DispatcherServlet——>HandlerMapping,HandlerMapping將會把請求對映為HandlerExecutionChain物件(包含一個Handler處理器(頁面控制器)物件、多個HandlerInterceptor攔截器)物件,通過這種策略模式,很容易新增新的對映策略;

3、  DispatcherServlet——>HandlerAdapter,HandlerAdapter將會把處理器包裝為介面卡,從而支援多種型別的處理器,即介面卡設計模式的應用,從而很容易支援很多型別的處理器;

4、  HandlerAdapter——>處理器功能處理方法的呼叫,HandlerAdapter將會根據適配的結果呼叫真正的處理器的功能處理方法,完成功能處理;並返回一個ModelAndView物件(包含模型資料、邏輯檢視名);

5、  ModelAndView的邏輯檢視名——>ViewResolver, ViewResolver將把邏輯檢視名解析為具體的View,通過這種策略模式,很容易更換其他檢視技術;

6、  View——>渲染,View會根據傳進來的Model模型資料進行渲染,此處的Model實際是一個Map資料結構,因此很容易支援其他檢視技術;

7、返回控制權給DispatcherServlet,由DispatcherServlet返回響應給使用者,到此一個流程結束。

在此我們可以看出具體的核心開發步驟:

1、  DispatcherServlet在web.xml中的部署描述,從而攔截請求到Spring Web MVC

2、  HandlerMapping的配置,從而將請求對映到處理器

3、  HandlerAdapter的配置,從而支援多種型別的處理器

4、  ViewResolver的配置,從而將邏輯檢視名解析為具體檢視技術

5、處理器(頁面控制器)的配置,從而進行功能處理

參考資料:http://sishuok.com/forum/blogCategory/showByCategory.html?categories_id=101&user_id=2