1. 程式人生 > >Spring MVC執行的流程

Spring MVC執行的流程

前端 客戶端 字符 mvc框架 pattern control ring -o web.xml

1.Spring MVC應用的開發步驟

  a.在web.xml文件中定義前端控制器DispatcherServlet來攔截用戶請求。由於Web應用是基於請求/響應架構的應用,所以 不管哪個MVC Web框架,都需要在web.xml中配置該框架的核心Servlet或Filter,這樣才可以讓該框架介入到Web應用中。

 <servlet>
      <!-- Serlvet的名稱 -->
    <servlet-name>springmvc</servlet-name>
    <!-- Serlvet對應的java類 -->
    <
servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <!-- 當前Serlvet的參數信息 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springmvc-config.xml</param-value> </
init-param> <!-- 在Web應用啟動時立即加載Serlvet --> <load-on-startup>1</load-on-startup> </servlet> <!-- 讓Spring MVC的前端控制器攔截所有請求 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping
>

  b.如果需要以POST方式提交請求,則定義包含表單數據的JSP頁面。如果僅僅是以GET方式發送請求,則無需經過這一步

  c.定義處理用戶請求的Handle類,可以實現Controller接口或使用@Controller註解。前端控制器負責接收請求,並將請求分發給對應的Handle,即實現Controller接口的java類,而該java類負責調用後臺業務邏輯代碼來處理請求。

  在Spring MVC框架中,控制器實際上是由兩個部分共同組成,即攔截所有用戶請求和處理請求的通用代碼都由前端控制器DispatcherServlet完成,而實際的業務控制(諸如調用後臺業務邏輯代碼,返回處理結果等)則由Controller處理。

  d.配置Handle. java領域的絕大部分MVC框架都非常喜歡使用xml文件來進行配置管理,這在以前是一種思維定勢。即配置哪個請求對應哪個Controller進行處理,從而讓前端控制器根據該配置來創建合適的Controller實例,並調用該Controller的業務控制方法。

    配置方法一:

<!-- 配置Handle,映射"/hello"請求 -->
    <bean name="/hello" class="org.fkit.controller.HelloController"/>

    配置方法二:

@Controller
public class HelloController{
 @RequestMapping(value="/hello")
     public ModelAndView hello(){

  e. 編寫視圖資源。

  當Handle處理用戶請求結束後,通常會返回一個ModelAndView對象,該對象中應該包含返回的視圖名或視圖名和模型,這個視圖名就代表需要顯示的物理視圖資源。如果Handle需要把一些數據傳給視圖資源,則可以通過模型對象。

2.Spring MVC執行流程

  a. 用戶向服務器發送請求,請求被Spring的前端控制器DispatcherSerlvet截獲

  b. DispatcherServlet對請求URL進行解析,得到URI(請求資源標識符)。然後根據該URI,調用HandlerMapping獲得該Handler配置的所有相關的對象,包括Handler對象以及Handler對象對應的攔截器,這些對象會被瘋轉到一個HandlerExecutionChain對象進行解析

  c. DispatcherServlet根據獲得的Handler,選擇一個合適的HandlerAdapter,用於處理多種Handler,調用Handler實際處理請求的方法。

  d. 提取請求中的模型數據,開始執行Handler(Controller)。在填充Handler的入參過程中,根據配置,Spring將幫你做一些額外的工作。

    >>消息轉換: 將請求消息(如Json,xml等數據)轉換成一個對象,將對象轉換為指定的響應信息

    >>數據轉換: 對請求消息進行數據轉換,如Spring轉換成Integer,Double等

    >>數據格式化: 對請求消息進行數據格式化,如將字符串轉化為格式化數字或格式化日期等

    >>數據驗證: 驗證數據的有效性(長度,格式等),驗證結果存儲到BindingResult或Error中

  e.Handler執行完成後,向DispatcherSerlvet返回一個ModelAndView對象,應該包含視圖名或視圖名和模型

  f, 根據返回的ModelAndView對象,選擇一個合適的ViewResovler(視圖解析器)返回給DispatcherServlet

  g. ViewResovler結合Model和View來渲染視圖

  h. 將視圖渲染結果返回給客戶端

  以上8個步驟,DispatcherServlet,HandlerMapping,HandlerAdapter,ViewResolver等對象協同工作,完成Spring MVC請求->響應的整個工作流程,這些對象所完成的工作對於開發者來說都是不可見的,開發者並不需要關心這些對象是如何工作的,只需要在Handler(Controller)當中完成對請求的業務處理。

  

Spring MVC執行的流程