SpringMVC(1) - 簡介
Spring Web model-view-controller(MVC)框架是圍繞DispatcherServlet設計的,DispatcherServlet將請求分派給處理器,具有可配置的處理器對映器,檢視解析器,區域設定,時區和主題解析器以及對上傳檔案的支援。 預設處理器基於@Controller和@RequestMapping註解,提供各種靈活的處理方法。 隨著Spring 3.0的引入,@Controller機制還允許通過@PathVariable註解和其他功能建立RESTful Web站點和應用程式。
注:
“Open for extension ...” Spring Web MVC和Spring中的一個關鍵設計原則是“Open for extension,closed for modification”原則(Open-Closed Principle 開-閉原則:對擴充套件開放,對修改關閉)。
Spring Web MVC核心類中的一些方法標記為final。 作為開發人員,無法覆蓋這些方法來提供自己的行為。 這不是隨意的,而是特別考慮到這一原則。
在Spring Web MVC中,可以將任何物件用作命令或表單支援物件; 不需要實現特定於框架的介面或基類。 Spring的資料繫結非常靈活:例如,它將型別不匹配視為可由應用程式評估的驗證錯誤,而不是系統錯誤。 因此,不需要將業務物件的屬性以字串型別複製到表單物件中,只需處理無效提交或正確轉換字串。 相反,通常最好直接繫結到業務物件。
Spring的檢視解析器非常靈活。 Controller通常負責準備帶有資料的模型Map並選擇檢視名稱,但它也可以直接寫入響應流並完成請求。 通過副檔名或Accept頭內容型別協商,通過bean名稱,屬性檔案甚至自定義ViewResolver實現,可以高度配置檢視名稱解析。 模型(MVC中的M)是一個Map介面,它允許完全抽象檢視技術。 可以直接與基於模板的渲染技術(如JSP,Velocity和Freemarker)整合,也可以直接生成XML,JSON,Atom和許多其他型別的內容。 模型Map簡單地轉換為適當的格式,例如JSP請求屬性,Velocity模板模型。
1. Spring Web MVC特性
Spring的Web模組包含許多獨特的Web支援功能:
- 明確的角色分離。每個角色,如控制器、校驗器、命令物件、表單物件、模型物件、DispatcherServlet、處理器對映,檢視解析器等, 都可以用專門的物件來完成。
- 像JavaBeans一樣強大而直接地配置框架和應用程式類。此配置功能包括跨上下文輕鬆引用,例如從Web控制器到業務物件和校驗器。
- 適配性,非侵入性和靈活性。定義我們需要的任何控制器方法簽名,可以使用以下引數註解之一(例如@RequestParam、@RequestHeader、@PathVariable等)。
- 可重複使用的業務程式碼,無需重複。將現有業務物件用作命令或表單物件,而不是繼承它們以擴充套件特定的框架基類。
- 可定製的繫結和校驗。型別不匹配作為應用程式級驗證錯誤,這些錯誤會保留錯誤值、本地化日期和數字繫結等,而不是通過獲取字串形式的表單物件,再通過手動解析轉換為業務物件。
- 可定製的處理器對映和檢視解析器。處理器對映和檢視解析器策略的範圍從簡單的基於URL的配置到複雜的、專門的解析策略。 Spring比那些被授權特定技術的Web MVC框架更靈活。
- 靈活的模型轉移。具有 name/value Map的模型傳輸支援與任何檢視技術輕鬆整合。
- 可自定義的區域設定、時區和主題解析器,支援帶或不帶Spring標籤庫的JSP,支援JSTL,支援Velocity而無需額外的橋接等。
- 一個簡單但功能強大的JSP標籤庫,稱為Spring標籤庫,為資料繫結和主題等功能提供支援。就標記程式碼方面而言,自定義標籤有最大的靈活性。
- Spring 2.0中引入的JSP表單標籤庫,使得在JSP頁面中編寫表單變得更加容易。
- 生命週期範圍限定為當前HTTP請求或HTTP會話的Bean。這不是Spring MVC本身的特定功能,而是Spring MVC使用的WebApplicationContext容器。
2. 整合其他MVC框架
如果不想使用Spring的Web MVC,但打算利用Spring提供的其他解決方案,可以輕鬆地將選擇的Web MVC框架與Spring整合。只需通過其ContextLoaderListener啟動Spring根應用程式上下文,並通過其ServletContext屬性(或Spring的各自輔助方法)從任何操作物件中訪問它。不涉及“外掛”,因此不需要專門的整合。從Web層的角度來看,只需將Spring用作庫,將根應用程式上下文例項作為入口點。
即使沒有Spring的Web MVC,註冊bean和Spring的服務也可以觸手可及。在這種情況下,Spring不會與其他Web框架競爭。它簡單地解決了純web MVC框架沒有的許多方面,從bean配置到資料訪問和事務處理。因此,可以使用Spring中間層(或)資料訪問層來豐富應用程式,即使只是想使用JDBC或Hibernate的事務抽象。