相信很多人都認同JavaWeb開發是遵從MVC開發模式的,遵從三層架構進行開發的,是的,大家都這么認同。但是相信大家都會有過這樣一個疑問,if(MVC三層模式==三層架構思想)out.println(“請繼續觀看……”)
1.MVC(Model-View-Controller)設計模式:
首先讓我們了解下MVC(Model-View-Controller)的概念:
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用于映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。
Model(模型):數據模型,提供要展示的數據,因此包含數據和行為,主要提供了模型數據查詢和模型數據的狀態更新等功能,包括數據和業務。主要使用的技術:數據模型:實體類(JavaBean),數據訪問:JDBC,Hibernate等,
View(視圖):負責進行模型的展示,一般就是我們見到的用戶界面,比如JSP,Html等
Controller(控制器):接收用戶請求,委托給模型進行處理(狀態改變),處理完畢后把返回的模型數據返回給視圖,由視圖負責展示。主要使用的技術:servlet,Struts中的Action類等。
MVC是一個框架模式,它強制性的使應用程序的輸入、處理和輸出分開。使用MVC應用程序被分成三個核心部件:模型、視圖、控制器。它們各自處理自己的任務。最典型的MVC就是JSP + servlet + javabean的模式。

2.三層架構(UI-BLL-DAL)思想介紹:
三層架構(3-tier architecture) 通常意義上的三層架構就是將整個業務應用劃分為:表現層(User Interface layer)、業務邏輯層(Business Logic Layer)、數據訪問層(Data access layer)。區分層次的目的即為了“高內聚低耦合”的思想。在軟件體系架構設計中,分層式結構是最常見,也是最重要的一種結構。微軟推薦的分層式結構一般分為三層,從下至上分別為:數據訪問層、業務邏輯層(又或稱為領域層)、表示層。
表現層(UI):通俗講就是展現給用戶的界面,用于顯示數據和接收用戶輸入的數據,為用戶提供一種交互式操作的界面。
業務邏輯層(BLL):針對具體問題的操作,也可以說是對數據層的操作,對數據業務邏輯處理。對于數據訪問層而言,它是調用者;對于表示層而言,它卻是被調用者。也將業務邏輯層稱為領域層。
數據訪問層(DAL):該層所做事務直接操作數據庫,針對數據的增、刪、改、查。如果要加入ORM的元素,那么就會包括對象和數據表之間的mapping,以及對象實體的持久化。也稱為是持久層。數據訪問層中包含實體層(Model 實體層)
JavaWeb中典型的三層架構是:Jsp+Struts/Spring+Hibernate的開發模式
3.MVC和三層架構的區別與轉化:
- MVC與三層架構的概念區別:
MVC是一種設計模式,我們可以用它來創建在域對象和UI表示層對象之間的區分。它是根據項目的具體需求來決定是否適用于該項目。
三層架構是一個分層式的軟件體系架構設計,它可適用于任何一個項目。
三層架構和MVC設計模式側重點不一樣,三層是一種籠統的架構思想,沒有限制具體的設計;而MVC就比較具體的說明它的設計方法。我們從接手一個項目開始,首先,我們需要進行架構設計,一般我們采用的就是分層式的架構設計,即我們的三層架構。然后,在確定了架構以后,我們再根據項目的具體需求去考慮是否需要應用一些設計模式,比如是否應用我們的MVC模式,抽象工廠模式等等。
三層側重的是整體的一個解耦,而MVC側重的是web系統的解耦,即側重jsp和Servlet的一個解耦。
- MVC與三層架構的劃分層次區別:
三層架構將整個項目劃分為:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。
MVC :即Model(模型),View(視圖),Controller(控制)。
下圖可以說明他們的區別與聯系:通過圖中可以看到不是一一對應的關系:V是UI,C是BLL,M是DAL的觀點是錯誤的。

- 兩者間的轉化:
在我們項目中選擇了三層架構的基礎上在根據具體需求決定是否需要使用MVC,于是我們常說的MVC中總是伴隨著三層架構,也就造成了兩者的容易混淆。其實,通過上圖我們可以看到MVC將三成架構中的UI分成了控制層和試圖層。將三層架構中的數據訪問層和業務邏輯層整合成了模型層。
4. 針對三層架構的MVC模式開發講解SSH框架:
4.1 ssh介紹:
SSH多個框架(struts2+spring+hibernate)的集成,是目前較流行的一種企業及Web應用程序開源集成框架。
- Struts2:
Struts2是流行和成熟的基于MVC設計模式的Web應用程序框架。 Struts2不只是Struts1下一個版本,它是一個完全重寫的Struts架構。Struts對Model,View和Controller都提供了對應的組件。但是在ssh開發過程中主要用Struts作為三層架構中的表現層,也就是MVC中的View和Control層。
Struts2提供了表單提交參數封裝成POJO類,提交參數的類型轉換,輸入校驗,文件的上傳下載,程序的國際化,Struts2標簽,以及對AJAX的支持。
- Hibernate:
Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用,說的簡單點:就是功能更加強大的JDBC。
Hibernate實現了對象到數據庫端的封裝。就是常說的ORM(Object Relation Mapping),它的出現使得編程更加的面向對象,在傳統的編程上,我們要將對象存儲到關系數據庫中,需要寫很多代碼來實現,而且需要考慮跨數據庫的平臺的問題。有了Hibernate可以方便的實現從對象轉換到關系數據庫。這就是對象持久化。
- Spring:
主要包含兩個重要功能:IOC和AOP,也就是常說的依賴注入和面向切面編程。當然還有Spring的事務功能,不過這一功能是在結合前面兩者的功能實現的。
IOC:依賴注入(控制反轉),是一種設計模式。一層含義是控制權的轉移:由傳統的在程序中控制依賴轉移到由容器來控制;第二層是依賴注入:將相互依賴的對象分離,在spring配置文件中描述他們的依賴關系。他們的依賴關系只在使用的時候才建立。簡單來說就是不需要NEW一個對象了。
AOP這是一種面向切面的編程思想,這種思想使得編程思想上得到了歷史性的進步。它將程序的執行過程切割成不同的面,在面之間可以插入我們想執行的邏輯。
4.2 ssh的層次劃分:
一進行javaWeb開發很多時候我們按照這樣的層次進行劃分:
1、在表示層中,首先通過JSP頁面實現交互界面,負責傳送請求(Request)和接收響應(Response),然后Struts根據配置文件(struts-config.xml)將ActionServlet接收到的Request委派給相應的Action處理,然后action進行對請求處理并轉發給JSP頁面。
2、在業務邏輯層中,管理服務組件的Spring IoC容器負責向Struts2提供具體的Action對象,提供業務模型(Model)組件和該組件的協作對象數據處理(DAO)組件完成業務邏輯,并提供事務處理、緩沖池等容器組件以提升系統性能和保證數據的完整性。
3、在數據訪問層中,則依賴于Hibernate的對象化映射和數據庫交互,處理DAO組件請求的數據,并返回處理結果,給業務邏輯層。
按照MVC模式時:Jsp對應著表現層,struts2對應控制層,Spring和Hibernate對應模型層。
分層不是絕對的,每個人的見解是不一樣的,僅供參考;

從MVC說道ssh整合開發上就介紹到這里,下部分主要是對ssh框架的整合,會介紹怎么使用ssh取開發一個簡單的web應用。
來自一條小鯊魚wpeace(rlovep.com)