SpringMVC學習(二)——SpringMVC架構及組件
相信大家通過前文的學習,已經對SpringMVC這個框架多少有些理解了。還記得上一篇文章中SpringMVC的處理流程嗎?
這個圖大致描述了SpringMVC的整個處理流程,這個流程圖還是相對來說比較容易懂的,下面我會給出SpringMVC的框架結構圖,這個圖相對來說會更復雜,不過經過我細致入微的講解,相信大家都可以深入理解。
SpringMVC框架結構
SpringMVC框架結構如下圖所示:
下面我會對SpringMVC框架結構作細致入微的講解。
架構流程
- 用戶發送請求至前端控制器DispatcherServlet。
- DispatcherServlet收到請求調用HandlerMapping處理器映射器。
- 處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一並返回給DispatcherServlet。
- DispatcherServlet通過HandlerAdapter處理器適配器調用處理器。
- 執行處理器(Controller,也叫後端控制器)。
- Controller執行完成返回ModelAndView。
- HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet。
- DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。
- ViewReslover解析後返回具體View。
- DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)。
- DispatcherServlet響應用戶。
上面大致上對SpringMVC框架結構做了一個粗略的解釋,下面我則會做一個更加細致入微的講解。
- 瀏覽器發送請求,請求具體發到誰呢?先發到前端控制器,也就是說所有的請求都給發到前端控制器,前端控制器是所有請求的入口,但前端控制器不能處理業務請求,它只是一個請求的轉發。
- 誰來處理業務請求呢?Handler處理器來真正處理業務請求,那麽問題來了,前端控制器如何來找到這個Handler處理器呢?處理器映射器記錄的就是請求的url和處理的方法之間的映射關系,這個映射關系是怎麽建立起來的呢?[email protected]
通過以上的分析大家有沒有更好地理解SpringMVC的架構流程呢?我可能寫的比較繞口,但確是對我來說比較好理解一點,希望對你也是一樣。
組件說明
以下組件通常使用框架提供實現:
- DispatcherServlet:前端控制器
用戶請求到達前端控制器,它就相當於mvc模式中的c,DispatcherServlet是整個流程控制的中心,由它調用其它組件處理用戶的請求,DispatcherServlet的存在降低了組件之間的耦合性。 - HandlerMapping:處理器映射器
HandlerMapping負責根據用戶請求找到Handler即處理器,springmvc提供了不同的映射器實現不同的映射方式,例如:配置文件方式,實現接口方式,註解方式等。 - Handler:處理器
Handler是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下Handler對具體的用戶請求進行處理。由於Handler涉及到具體的用戶業務請求,所以一般情況需要程序員根據業務需求開發Handler。 - HandlAdapter:處理器適配器
通過HandlerAdapter對處理器進行執行,這是適配器模式的應用,通過擴展適配器可以對更多類型的處理器進行執行。 - ViewResolver:視圖解析器
ViewResolver負責將處理結果生成View視圖,ViewResolver首先根據邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成View視圖對象,最後對View進行渲染將處理結果通過頁面展示給用戶。 - View:視圖
SpringMVC框架提供了很多的View視圖類型的支持,包括:jstlView、freemarkerView、pdfView等。我們最常用的視圖就是jsp。一般情況下需要通過頁面標簽或頁面模版技術將模型數據通過頁面展示給用戶,需要由程序員根據業務需求開發具體的頁面。
總結
在SpringMVC的各個組件中,處理器映射器、處理器適配器、視圖解析器稱為springmvc的三大組件。其實真正需要程序員開發的就兩大塊:一個是Handler,一個是jsp,這樣的話,其實和Struts2就差不多了,所以不要被上面那個一系列的流程給繞傻了。
SpringMVC學習(二)——SpringMVC架構及組件