相信不少人都認同JavaWeb開發是聽從MVC開發模式的,聽從三層架構進行開發的,是的,你們都這麼認同。可是相信你們都會有過這樣一個疑問,if(MVC三層模式==三層架構思想)out.println(「請繼續觀看……」)html
首先讓咱們瞭解下MVC(Model-View-Controller)的概念:java
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯彙集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不須要從新編寫業務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。程序員
Model(模型):數據模型,提供要展現的數據,所以包含數據和行爲,主要提供了模型數據查詢和模型數據的狀態更新等功能,包括數據和業務。主要使用的技術:數據模型:實體類(JavaBean),數據訪問:JDBC,Hibernate等,web
View(視圖):負責進行模型的展現,通常就是咱們見到的用戶界面,好比JSP,Html等spring
Controller(控制器):接收用戶請求,委託給模型進行處理(狀態改變),處理完畢後把返回的模型數據返回給視圖,由視圖負責展現。主要使用的技術:servlet,Struts中的Action類等。數據庫
MVC是一個框架模式,它強制性的使應用程序的輸入、處理和輸出分開。使用MVC應用程序被分紅三個核心部件:模型、視圖、控制器。它們各自處理本身的任務。最典型的MVC就是JSP + servlet + javabean的模式。編程
三層架構(3-tier architecture) 一般意義上的三層架構就是將整個業務應用劃分爲:表現層(User Interface layer)、業務邏輯層(Business Logic Layer)、數據訪問層(Data access layer)。區分層次的目的即爲了「高內聚低耦合」的思想。在軟件體系架構設計中,分層式結構是最多見,也是最重要的一種結構。微軟推薦的分層式結構通常分爲三層,從下至上分別爲:數據訪問層、業務邏輯層(又或稱爲領域層)、表示層。設計模式
表現層(UI):通俗講就是展示給用戶的界面,用於顯示數據和接收用戶輸入的數據,爲用戶提供一種交互式操做的界面。markdown
業務邏輯層(BLL):針對具體問題的操做,也能夠說是對數據層的操做,對數據業務邏輯處理。對於數據訪問層而言,它是調用者;對於表示層而言,它倒是被調用者。也將業務邏輯層稱爲領域層。架構
數據訪問層(DAL):該層所作事務直接操做數據庫,針對數據的增、刪、改、查。若是要加入ORM的元素,那麼就會包括對象和數據表之間的mapping,以及對象實體的持久化。也稱爲是持久層。數據訪問層中包含實體層(Model 實體層)
JavaWeb中典型的三層架構是:Jsp+Struts/Spring+Hibernate的開發模式
MVC是一種設計模式,咱們能夠用它來建立在域對象和UI表示層對象之間的區分。它是根據項目的具體需求來決定是否適用於該項目。
三層架構是一個分層式的軟件體系架構設計,它可適用於任何一個項目。
三層架構和MVC設計模式側重點不同,三層是一種籠統的架構思想,沒有限制具體的設計;而MVC就比較具體的說明它的設計方法。咱們從接手一個項目開始,首先,咱們須要進行架構設計,通常咱們採用的就是分層式的架構設計,即咱們的三層架構。而後,在肯定了架構之後,咱們再根據項目的具體需求去考慮是否須要應用一些設計模式,好比是否應用咱們的MVC模式,抽象工廠模式等等。
三層側重的是總體的一個解耦,而MVC側重的是web系統的解耦,即側重jsp和Servlet的一個解耦。
三層架構將整個項目劃分爲:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。
MVC :即Model(模型),View(視圖),Controller(控制)。
下圖能夠說明他們的區別與聯繫:經過圖中能夠看到不是一一對應的關係:V是UI,C是BLL,M是DAL的觀點是錯誤的。
在咱們項目中選擇了三層架構的基礎上在根據具體需求決定是否須要使用MVC,因而咱們常說的MVC中老是伴隨着三層架構,也就形成了二者的容易混淆。其實,經過上圖咱們能夠看到MVC將三成架構中的UI分紅了控制層和試圖層。將三層架構中的數據訪問層和業務邏輯層整合成了模型層。
SSH多個框架(struts2+spring+hibernate)的集成,是目前較流行的一種企業及Web應用程序開源集成框架。
Struts2是流行和成熟的基於MVC設計模式的Web應用程序框架。 Struts2不僅是Struts1下一個版本,它是一個徹底重寫的Struts架構。Struts對Model,View和Controller都提供了對應的組件。可是在ssh開發過程當中主要用Struts做爲三層架構中的表現層,也就是MVC中的View和Control層。
Struts2提供了表單提交參數封裝成POJO類,提交參數的類型轉換,輸入校驗,文件的上傳下載,程序的國際化,Struts2標籤,以及對AJAX的支持。
Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了很是輕量級的對象封裝,使得Java程序員能夠爲所欲爲的使用對象編程思惟來操縱數據庫。 Hibernate能夠應用在任何使用JDBC的場合,既能夠在Java的客戶端程序使用,也能夠在Servlet/JSP的Web應用中使用,說的簡單點:就是功能更增強大的JDBC。
Hibernate實現了對象到數據庫端的封裝。就是常說的ORM(Object Relation Mapping),它的出現使得編程更加的面向對象,在傳統的編程上,咱們要將對象存儲到關係數據庫中,須要寫不少代碼來實現,並且須要考慮跨數據庫的平臺的問題。有了Hibernate能夠方便的實現從對象轉換到關係數據庫。這就是對象持久化。
主要包含兩個重要功能:IOC和AOP,也就是常說的依賴注入和麪向切面編程。固然還有Spring的事務功能,不過這一功能是在結合前面二者的功能實現的。
IOC:依賴注入(控制反轉),是一種設計模式。一層含義是控制權的轉移:由傳統的在程序中控制依賴轉移到由容器來控制;第二層是依賴注入:將相互依賴的對象分離,在spring配置文件中描述他們的依賴關係。他們的依賴關係只在使用的時候才創建。簡單來講就是不須要NEW一個對象了。
AOP這是一種面向切面的編程思想,這種思想使得編程思想上獲得了歷史性的進步。它將程序的執行過程切割成不一樣的面,在面之間能夠插入咱們想執行的邏輯。
一進行javaWeb開發不少時候咱們按照這樣的層次進行劃分:
一、在表示層中,首先經過JSP頁面實現交互界面,負責傳送請求(Request)和接收響應(Response),而後Struts根據配置文件(struts-config.xml)將ActionServlet接收到的Request委派給相應的Action處理,而後action進行對請求處理並轉發給JSP頁面。
二、在業務邏輯層中,管理服務組件的Spring IoC容器負責向Struts2提供具體的Action對象,提供業務模型(Model)組件和該組件的協做對象數據處理(DAO)組件完成業務邏輯,並提供事務處理、緩衝池等容器組件以提高系統性能和保證數據的完整性。
三、在數據訪問層中,則依賴於Hibernate的對象化映射和數據庫交互,處理DAO組件請求的數據,並返回處理結果,給業務邏輯層。
按照MVC模式時:Jsp對應着表現層,struts2對應控制層,Spring和Hibernate對應模型層。
分層不是絕對的,每一個人的看法是不同的,僅供參考;
從MVC說道ssh整合開發上就介紹到這裏,下部分主要是對ssh框架的整合,會介紹怎麼使用ssh取開發一個簡單的web應用。
來自一條小鯊魚wpeace(rlovep.com)