【SpringMVC學習01】宏觀上把握SpringMVC框架

springmvc是一個基於mvc的web框架,是spring框架的一個模塊,所以springmvc和spring無需通過中間整合層進行整合。我們先來看下spring的一個架構模型,看springmvc在spring框架中所處的位置: 
spring框架 
  從圖中可以看出,springmvc是spring的一個web框架,所以上圖中描述的是spring web mvc,它和struts2的功能差不多,下面我們來深入到springmvc內部,看它的幹了些啥,先看一個圖: 
springmvc執行流程 
  這個圖描述了springmvc的整個執行的流程,乍一看有點暈乎,待我一步步分析,最後弄個流程圖出來就明白了。 
  結合上圖,我描述一下springmvc的執行流程:

  1. 向服務器發送Http request請求,請求被前端控制器(DispatcherServlet捕獲。
  2. 前端控制器根據xml文件中的配置(或者註解)對請求的URL進行解析,得到請求資源標識符(URI)。然後根據該URI,調用處理器映射器(HandlerMapping獲得處理該請求的Handler以及Handler對應的攔截器,最後以 HandlerExecutionChain 對象的形式返回。
  3. 前端控制器根據獲得的Handler,選擇一個合適的處理器適配器(HandlerAdapter去執行該Handler。
  4. 處理器適配器提取request中的模型數據,填充Handler入參,執行處理器(Handler(也稱之爲Controller).
  5. Handler(Controller)執行完成後,向處理器適配器返回一個ModelAndView對象,處理器適配器再向前端控制器返回該ModelAndView對象(ModelAndView只是一個邏輯視圖)。
  6. 根據返回的ModelAndView,前端控制器請求一個適合的視圖解析器(ViewResolver(必須是已經註冊到Spring容器中的ViewResolver)去進行視圖解析,然後視圖解析器向前端控制器返回一個真正的視圖View(jsp)。
  7. 前端控制器通過Model解析出ModelAndView中的參數進行解析,最終展現出完整的View並通過Http response返回給客戶端。

  上面描述了一下springmvc的執行流程,如果還是有點模糊的話,我用下面這個流程圖來表示一下,也爲了自己更好的理解整個執行流程:

用戶用戶DispatcherServletDispatcherServletHandlerMappingHandlerMappingHandlerAdapterHandlerAdapterHandlerHandlerViewResolverViewResolverHttp request請求讀取配置文件或註解解析請求的url根據解析結果調用處理器映射器返回請求對應的Handler選擇一個合適的處理器適配器提取request中的模型數據填充Handler入參執行返回ModelAndView返回ModelAndView選擇一個合適的視圖解析器解析ModelAndView返回真正的視圖View通過Model解析出ModelAndView中的參數解析參數,展現完整的viewHttp response返回

  經過這麼一分析,現在對springmvc的執行流程有了宏觀上的瞭解了,從上面的分析可以看出,springmvc有幾個主要的組件,下面結合我們編程,來分析一下這幾個組件:

  1. 前端控制器DispatcherServlet(不需要程序員開發)。 
    作用:接收請求,響應結果,相當於轉發器,中央處理器。有了DispatcherServlet減少了其它組件之間的耦合度。
  2. 處理器映射器HandlerMapping(不需要程序員開發)。 
    作用:根據請求的url查找Handler。
  3. 處理器適配器HandlerAdapter(不需要程序員開發)。 
    作用:按照特定規則(HandlerAdapter要求的規則)去執行Handler。
  4. 處理器Handler(需要程序員開發)。 
    注意:編寫Handler時按照HandlerAdapter的要求去做,這樣適配器纔可以去正確執行Handler
  5. 視圖解析器ViewResolver(不需要程序員開發)。 
    作用:進行視圖解析,根據邏輯視圖名解析成真正的視圖(view)
  6. 視圖View(需要程序員開發jsp)。 
    View是一個接口,實現類支持不同的View類型(jsp、freemarker、pdf…) 
    【注】:不需要程序員開發的,需要程序員自己做一下配置即可。

  現在看來,其實真正需要程序員開發的就兩大塊:一個是Handler,一個是jsp,這樣的話,其實和struts2就差不多了,所以不要被上面那個一系列的流程給繞傻了。 
  整個springmvc的架構就總結到這吧,後面就要開始走進springmvc的世界了。

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