1. 當DispatcherServlet接到請求時,他先回查找適當的處理程序來處理請求。DispatcherServlet經過一個或者多個處理程序映射,將每一個請求映射處處理程序中。處理程序映射配置在web應用程序的上下文中,是實現了HandlerMapping接口的Bean。它負責爲請求返回一個適當的處理程序(也就是Controller)。處理程序映射一般根據請求的URL將請求映射處處理程序(Controller)。
2. 一旦DispatcherServlet選擇了適當的控制器,它就會調用這個控制器來處理請求。
3. 控制器處理完請求後,會將模型和視圖名(有時候是視圖對象)返回給DispatcherServlet。模型包含了控制器要傳遞給視圖進行顯示的屬性。若是返回的是視圖名稱,它會被解析成視圖對象再進行呈現。綁定模型和視圖的基本類是ModelAndView
4. 當DispatcherServlet接收到模型和視圖名稱時,它會將邏輯視圖名稱解析成視圖對象再進行呈現。DispatcherServlet從一個或者多個視圖解析器中解析視圖。視圖解析器配置在Web應用程序上下文中,是實現了ViewResolver接口的Bean。它的任務是根據邏輯視圖名稱返回試圖對象。
5. 一旦DispatcherServlet將視圖名稱解析稱爲試圖對象,它就會呈現視圖對象,並傳遞控制器返回的模型。視圖的任務是將模型屬性展現給用戶。
DispatcherServlet接到請求後如何映射到Controller呢?
在Spring MVC中,Web請求被Web應用程序上下文中聲明的一個或者多個處理程序映射Bean(是吸納了HandlerMapping接口的Bean)映射到Controller。Spring MVC提供了幾種HandlerMapping實現:
1. BeanNameUrlHandlerMapping(默認狀況),他根據Controller Bean名稱中指定的URL模式將請求映射處處理程序上。
eg. <bean name="/welcome.htm" class="com.kevin.controller.WelcomeController">...</bean>
當你訪問http://******/welcome.htm這個URL時,DispatcherServlet經過BeanNameUrlHandlerMapping映射就找到了WelcomeController。
2. ControllerClassNameHandlerMapping,它是按控制器類名稱映射請求。
3. SimpleUrlHandlerMapping,用定製的映射定義來映射請求。
下面咱們就來看一下Controller。
Controller接口是Spring MVC中全部控制器類的基本接口。經過實現這個接口,你能夠建立本身的控制器。在handleRequest()方法中,能夠隨意地處理Web請求。
AbstractController:若是你想讓控制器具有一些基本的特性,如過濾受支持的HTTP方法(GET,POST和HEAD),以及在HTTP響應中生成cache-control頭部等,你可讓它擴展AbstractController類。
ParameterizableViewController:用來建立帶有參數化視圖的控制器。
SimpleFormController:它支持命令對象的概念(commandName),而且能夠將表單域的值綁定到命令對象的同名屬性上。
AbstractWizardFormController:爲嚮導表單的處理定義了基本的任務。嚮導表單有多個單頁,所以必須爲嚮導表單控制器定義多個頁面視圖。而後這個控制器能夠跨越全部這些表單頁面來管理表單狀態。嚮導表單會有多個動做,不像SimpleFormController只有單個提交動做。AbstractWizardFormController會根據特殊的請求參數決定用戶的動做,一般是用提交按鈕的名稱來指定動做的。
_finished: 完成嚮導表單。
_cancel: 取消嚮導表單。
_targetx: 進入目標頁面,這裏的x是從0開始的頁面索引。
MultiActionController:容許你將多個相關的動做分組到一個控制器中。
常見的視圖類型:
幾種常見的ViewResolver的解析:
1. InternalResourceViewResolver: 根據URL解析視圖。經過添加前綴和後綴的方法,將每一個視圖名稱都映射到一個URL上。
2. XmlViewResolver: 從XML配置文件中解析視圖。將視圖聲明成Spring的Bean,並按他們的Bean Name進行解析。
3. ResourceBundleViewResolver: 從ResourceBundle中解析視圖。
4. 用多個視圖解析器解析視圖, 須要注意的是,您須要爲你配置的視圖解析器配置解析的優先級。<property name="order" value="0"/> value越小,優先級越高。前端