概述
傳統的Model1和Model2
在Model1的模式下,整個Web應用幾乎所有是由JSP頁面組成,接受和處理用戶請求,並對請求處理後直接作出響應;JSP身兼View和Controller兩個角色,將控制邏輯和表現邏輯糅合在一塊兒。
缺點:
1.代碼的複用性低。
2.增長了應用擴展和維護的難度。前端
Model2是基於MVC架構的設計模式,具體實現以下如:
MVC的思想是將一個應用分紅三個基本部分,模型(Model)、視圖(View)、控制器(Controller),這三個部分以最少的耦合協同工做,從而提升應用程序的可擴展性和可維護性。
1.模型(Model):JavaBean
2.視圖(View):JSP頁面
3.控制器(Controller):Servletweb
MVC模式使得Model2具備組件化特色,更能適用於大規模應用的開發(但增長了開發的複雜度)。
MVC優點
MVC並非Java語言和Web應用特有的設計思想,它是全部面向對象程序設計語言都應該遵照的規範。
在經典的MVC模式中,事件由控制器處理,控制器根據事件的類型改變模型或視圖,反之亦然。
MVC的特色:
1.多個視圖能夠對應一個模型。按MVC的設計模式,一個模型對應多個視圖,能夠減小代碼的複製及代碼的維護量。一旦模型發生改變,也易於維護。
2.模型返回的數據與顯示邏輯分離。模型數據能夠應用任何的顯示技術。
3.應用被分爲三層,下降了各層之間的耦合,提供了應用的可擴展性。
4.控制層的概念也頗有效,因爲把不一樣的模型和不一樣的視圖組合在一塊兒,完成不一樣的請求。所以,控制層能夠說包含了用戶請求的權限的概念。
5.MVC更符合軟件工程化管理的精神。不一樣的層各司其職,每一層的組件具備相同的特徵,這有利於經過工程化和工具化的方法產生管理程序代碼。
注:經典MVC思想與Web應用的MVC思想存在必定差異,主要緣由是Web應用是一種請求/響應模式。若是用戶不對應用發出請求,視圖沒法主動更新本身。
Spring MVC
Spring框架提供了構建Web應用程序的全功能MVC模塊:Spring MVC。
Spring MVC提供了一個DispatcherServlet做爲前端控制器來分發請求,同時提供靈活的配置處理程序映射、視圖解析、語言環境和主題解析,並支持文件上傳。Spring MVC包含多種視圖技術,分離了控制器、模型對象、分派器和處理程序對象的角色,使他們更容易進行定製。
Spring MVC特色:
1.具備強大的靈活性、非侵入性、可配置性。
2.提供了前端控制器DispatcherServlet,無需額外開發控制器對象。
3.分工明確,包括控制器、驗證器、命令對象、模型對象、處理程序映射視圖解析器等,每個功能實現由一個專門的對象負責完成。
4.能夠自動綁定用戶輸入,並正確轉換數據類型。
5.使用一個名稱/值得Map對象實現更加靈活的模型數據傳輸。
6.內置常見的校驗器,能夠校驗用戶輸入,若是校驗不經過,則重定向回輸入表單。輸入校驗可選,支持編程方式和聲明方式。
7.支持國際化,支持根據用戶區域顯示多國語言,而且國際化的配置很是簡單。
8.支持多種視圖技術。
9.提供簡單而強大的JSP標籤庫,支持數據綁定功能。
Spring MVC的使用
Spring MVC的DispatcherServlet是一個Servlet,繼承自HTTPServlet,因此使用時須要配置在Web應用的web.xml文件中:
spring
1 <servlet> 2 <!-- Servlet的名稱 --> 3 <servlet-name>springmvc</servlet-name> 4 <!-- Servlet對應的Java類 --> 5 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 6 <!-- 當前Servlet的參數 --> 7 <init-param> 8 <!-- Servlet參數的名稱 --> 9 <param-name>contextConfigLocation</param-name> 10 <!-- Servlet參數的值:Spring MVC的配置文件路徑 --> 11 <param-value>classpath:springmvc-config.xml</param-value> 12 </init-param> 13 <!-- Web應用啓動時當即加載Servlet --> 14 <load-on-startup>1</load-on-startup> 15 </servlet> 16 <!-- Servlet的映射聲明 --> 17 <servlet-mapping> 18 <!-- 請求對應的Servlet的名稱 --> 19 <servlet-name>springmvc</servlet-name> 20 <!-- 監聽當前域的全部請求 --> 21 <url-pattern>/</url-pattern> 22 </servlet-mapping>