SpringMVC(1) - 簡介

https://docs.spring.io/spring/docs/4.3.20.RELEASE/spring-framework-reference/htmlsingle/#mvc-introduction

 

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的事務抽象。

 

 

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