文章出處
文章列表
springmvc是一個基于mvc的web框架,是spring框架的一個模塊,所以springmvc和spring無需通過中間整合層進行整合。我們先來看下spring的一個架構模型,看springmvc在spring框架中所處的位置:
從圖中可以看出,springmvc是spring的一個web框架,所以上圖中描述的是spring web mvc,它和struts2的功能差不多,下面我們來深入到springmvc內部,看它的干了些啥,先看一個圖:
這個圖描述了springmvc的整個執行的流程,乍一看有點暈乎,待我一步步分析,最后弄個流程圖出來就明白了。
結合上圖,我描述一下springmvc的執行流程:
- 向服務器發送Http request請求,請求被前端控制器(DispatcherServlet)捕獲。
- 前端控制器根據xml文件中的配置(或者注解)對請求的URL進行解析,得到請求資源標識符(URI)。然后根據該URI,調用處理器映射器(HandlerMapping)獲得處理該請求的Handler以及Handler對應的攔截器,最后以 HandlerExecutionChain 對象的形式返回。
- 前端控制器根據獲得的Handler,選擇一個合適的處理器適配器(HandlerAdapter)去執行該Handler。
- 處理器適配器提取request中的模型數據,填充Handler入參,執行處理器(Handler)(也稱之為Controller).
- Handler(Controller)執行完成后,向處理器適配器返回一個ModelAndView對象,處理器適配器再向前端控制器返回該ModelAndView對象(ModelAndView只是一個邏輯視圖)。
- 根據返回的ModelAndView,前端控制器請求一個適合的視圖解析器(ViewResolver)(必須是已經注冊到Spring容器中的ViewResolver)去進行視圖解析,然后視圖解析器向前端控制器返回一個真正的視圖View(jsp)。
- 前端控制器通過Model解析出ModelAndView中的參數進行解析,最終展現出完整的View并通過Http response返回給客戶端。
上面描述了一下springmvc的執行流程,如果還是有點模糊的話,我用下面這個流程圖來表示一下,也為了自己更好的理解整個執行流程:
經過這么一分析,現在對springmvc的執行流程有了宏觀上的了解了,從上面的分析可以看出,springmvc有幾個主要的組件,下面結合我們編程,來分析一下這幾個組件:
- 前端控制器DispatcherServlet(不需要程序員開發)。
作用:接收請求,響應結果,相當于轉發器,中央處理器。有了DispatcherServlet減少了其它組件之間的耦合度。- 處理器映射器HandlerMapping(不需要程序員開發)。
作用:根據請求的url查找Handler。- 處理器適配器HandlerAdapter(不需要程序員開發)。
作用:按照特定規則(HandlerAdapter要求的規則)去執行Handler。- 處理器Handler(需要程序員開發)。
注意:編寫Handler時按照HandlerAdapter的要求去做,這樣適配器才可以去正確執行Handler- 視圖解析器ViewResolver(不需要程序員開發)。
作用:進行視圖解析,根據邏輯視圖名解析成真正的視圖(view)- 視圖View(需要程序員開發jsp)。
View是一個接口,實現類支持不同的View類型(jsp、freemarker、pdf…)
【注】:不需要程序員開發的,需要程序員自己做一下配置即可。
現在看來,其實真正需要程序員開發的就兩大塊:一個是Handler,一個是jsp,這樣的話,其實和struts2就差不多了,所以不要被上面那個一系列的流程給繞傻了。
整個springmvc的架構就總結到這吧,后面就要開始走進springmvc的世界了。
轉自http://blog.csdn.net/eson_15
文章列表
全站熱搜