常用框架之Spring MVC

本篇介紹Spring MVC,部分內容摘抄自《Spring實戰》,僅作筆記。

Spring MVC基於模型-視圖-控制器(Model-View-Controller,MVC)模式實現,能夠幫我們構建像Spring框架那樣靈活和松耦合的Web應用程序。其中模型封裝了應用程序數據,通常由POJO組成;視圖主要用於呈現模型數據,例如JSP等;控制器主要用於處理用戶請求,並且構建合適的模型並將其傳遞到視圖呈現。

跟蹤Spring MVC的請求

Spring將請求在調度Servlet、處理器映射(handler mapping)、控制器以及視圖解析器(view resolver)之間移動。下圖展示了請求使用Spring MVC所經歷的所有站點。

每當用戶在Web瀏覽器中點擊鏈接或提交表單的時候,請求就開始工作了。在請求離開瀏覽器時,會帶有用戶所請求內容的信息,至少會包含請求的URL,也可能還帶有其他信息,例如用戶提交的表單信息。

請求經過的第一站是DispatcherServlet,即Spring MVC的前端控制器。前端控制器是常用的Web應用程序模式,在這裏一個單實例的Servlet將請求委託給應用程序的其他組件來進行實際的處理。DispatcherServlet的任務是將請求發送給Spring MVC控制器(controller)。控制器是一個用於處理請求的Spring組件。在典型的應用程序中可能會有多個控制器,DispatcherServlet需要知道應該將請求發送給哪個控制器。

DispatcherServlet會查詢一個或多個處理器映射(handler mapping)來確定請求的下一站在哪裏。處理器映射會根據請求鎖所攜帶的URL信息來進行決策。一旦選擇了合適的控制器,DispatcherServlet會將請求發送給選中的控制器。

到了控制器,請求會卸下其負載(用戶提交的信息)並耐心等待控制器處理這些信息。設計良好的控制器本身只處理很少甚至不處理工作,而是將業務邏輯委託給一個或多個服務對象進行處理。

控制器在完成邏輯處理後,通常會產生一些信息,這些信息需要返回給用戶並在瀏覽器上顯示。這些信息被稱爲模型(model)。不過僅僅給用戶返回原始的信息是不夠的,這些信息需要以用戶友好的方式進行格式化,一般會是HTML。所以信息需要發送給一個視圖(view),通常會是JSP。

控制器所做的最後一件事就是將模型數據打包,並且標識出用於渲染輸出的視圖名。它接下來會將請求連同模型和視圖名發送回DispatcherServlet。這樣,控制器就不會和特定的視圖相耦合,傳遞給DispatcherServlet的視圖名並不直接表示某特定的JSP。實際上,它甚至不能確定視圖就是JSP。它僅僅傳遞了一個邏輯名稱,這個名字將會用來查找產生結果的真正視圖、DispatcherServlet將會使用視圖解析器(view resolver)來將邏輯視圖名匹配爲一個特定的視圖實現。

請求的最後一站是視圖的實現,在這裏它交付模型數據,請求的任務就完成了。

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