#【整理】JavaEE基本框架(Struts2+Spring+MyBatis三層,Struts MVC)之間的關系  [visio文件下載](http://files.cnblogs.com/p2227/JavaEE_Frameworks.7z) ##概述 一個JavaEE的項目,頁面用JSP,后台用了Struts2+Spring+MyBatis,數據庫用的是Oracle,這么多技術名詞,他們之間的關系如何,整體是怎么運作的,用什么東西進行關聯?這是開發過程中任何一個成員都必須要了解的。即使你只關注某一個方面,例如前端。 ##Web端 `Struts`其實是JavaEE常用的MVC框架,統籌Servlet(C)、視圖層(V)和后台Action及Action中的Model之間的關系。用戶通過**http請求**去訪問Servlet,Struts就會給你指定好類,並把request中的數據按照一定的規則放在Model中。當Action中的Model數據發生變化,通過response返回的JSP頁面上也能通過el表達式或者其他庫去訪問到這些變化。我們就不用把心思花在通訊協議及一些數據格式(JSON和Java實體類)之間的處理上。 ##三層架構 在Web1.0時代,我們的業務邏輯都是交給后台去處理的,也就是Action層、Manager、Dao層所組成的JavaEE后台。我們推薦action層處理去視圖之間的關系,這樣當你用客戶端和瀏覽器訪問同一個應用時,只需要在action層上下工夫即可。manager層是真正的java邏輯,用各種java類、庫去處理數據。dao層關注數據庫層面的邏輯,這樣當你訪問Oracle或者MSSQL數據庫時,只需要關注dao層即可。`Spring`統籌這三者之間的關系,通過IoC等概念去解決這三層之間的耦合關系。 ##數據庫 在Dao層,我們關注后台內存中的變量與數據庫持久層之間的通訊,我們一般用**jdbc**去進行通訊的,這是方式。內容則是由`MyBatis`去處理,通過mybatis去寫SQL接收變量,接收返回的數據或者數據集。 ## Web 2.0時代的MVC 進入Web2.0時代,我們在Struts統籌的視圖層中,也包含了較多的業務邏輯,特別是**不涉及到密碼、權限等敏感數據,以提高用戶體驗為宗旨**的邏輯。所以在這一層上也要有以MVC的概念去統籌各代碼的關系,使之條理化的框架如`angular`。HTML/CSS是視圖,業務邏輯的javascript是控制器,記錄數據的javascript(或者叫JSON)是模型。這一層與后台之間的以包裝了http請教的`ajax`技術去實現。 ##最后的話 另外一個方面,數據庫的存儲過程等東西表明,這里面也有較復雜的邏輯。一個軟件項目各個層面的領域發展,都達到一定高度,有一定復雜性。JavaEE的框架也是其中一種組織代碼的框架,但從中抽象化出來的原理,理解了,去看其他類似框架時,也就能舉一反三。