MVC三層模型(struts+spring+hibernate)總結
Posted on 2011-05-20 17:00 哈希 閱讀(317) 評論(0) 編輯 收藏 所屬分類: java 常用框架簡單的說:
struts 控制用的
hibernate 操作數據庫的
spring 用解耦的
詳細的說:
STRUTS 在 SSH 框架中起控制的作用 , 其核心是 Controller, 即 ActionServlet, 而 ActionServlet 的核心就是 Struts-confi g.xml. 主要控制邏輯關系的處理 .
hibernate 是數據持久化層 , 是一種新的對象、關系的映射工具 , 提供了從 Java 類到數據表的映射,也提供了數據查詢和恢復等機制 , 大大減少數據訪問的復雜度。把對數據庫的直接操作 , 轉換為對持久對象的操作 .
SPRING 是一個輕量級的控制反轉 (IoC) 和面向切面 (AOP) 的容器框架 , 面向接口的編程 , 由容器控制程序之間的(依賴)關系,而非傳統實現中,由程序代碼直接操控。這也就是所謂 “ 控制反轉 ” 的概念所在:(依賴)控制權由應用代碼中轉到了外部容器,控制權的轉移,是所謂反轉。依賴注入,即組件之間的依賴關系由容器在運行期決定,形象的來說,即由容器動態的將某種依賴關系注入到組件之中
起到的主要作用是解耦
Struts 、 spring 、 Hibernate 在各層的作用
1 ) struts 負責 web 層 .
ActionFormBean 接收網頁中表單提交的數據,然后通過 Act
在 struts-config.xml 中定義 <act
2 ) spring 負責業務層管理,即 Service (或 Manager).
1 . service 為 act
2 .可以寫一些自己的業務方法。
3 .統一的 javabean 管理方法
4 .聲明式事務管理(http://www.cnblogs.com/rushoooooo/archive/2011/08/28/2155960.html)
5. 集成 Hiberante
3 ) Hiberante ,負責持久化層,完成數據庫的 crud 操作
hibernate 為持久層,提供 OR/Mapping 。
它有一組 .hbm.xml 文件和 POJO, 是跟數據庫中的表相對應的。然后定義 DAO ,這些是跟數據庫打交道的類,它們會使用 PO 。
在 struts+spring+hibernate 的系統中,
對象的調用流程是: jsp-> Act
數據的流向是 ActionFormBean 接受用戶的數據, Act
再調用業務層的 Bean 類,完成各種業務處理后再 forward 。而業務層 Bean 收到這個 PO 對象之后,會調用 DAO 接口方法,進行持久化操作。
spring:Aop管理事務控制,IoC管理各個組件的耦合,DaoTemplate作為常規持久層的快速開發模板!
struts:控制層Act
Hibernate:負責數據庫和對象的映射,負責DAO層(Da
spring整合hibernate和struts,只要在配好了applicationContext.xml,在struts的act
1 SSH在開發中的位置
現在J2EE的開源框架多的數不清楚,目前(已經、正在)比較流行的常用框架大概有struts,spring,hibernate,jsf,webwork,而 struts+spring+hibernate(SSH)這種輕量級架構被譽為“黃金組合”。spring和hibernate更是被許多人認為是未來五年內不會被淘汰的技術,猶如當年的struts,今天的開發中依然被廣泛采用。
2 為什么使用SSH
其實,就算用Java建造一個不是很煩瑣的web應用,也不是件輕松的事情。 在構架的一開始就有很多事情要考慮。從高處看,擺在開發者面前有很多問題:要考慮是怎樣建立用戶接口?在哪里處理業務邏輯? 怎樣持久化的數據。 而這三層構架中,每一層都有他們要仔細考慮的。 各個層該使用什么技術?怎樣的設計能松散耦合還能靈活改變? 怎樣替換某個層而不影響整體構架?應用程序如何做各種級別的業務處理(比如事務處理)?
構架一個Web應用需要弄明白好多問題。 幸運的是,已經有不少開發者已經遇到過這類問題,并且建立了處理這類問題的框架。 一個好框架具備以下幾點:減輕開發者處理復雜的問題的負擔("不重復發明輪子");內部有良好的擴展; 并且有一個支持它的強大的用戶團體。 好的構架一般有針對性的處理某一類問題,并且能將它做好(Do On
他們里面有很我優秀的設計理念及模式應用。比如, struts屬于MVC框架,關鍵是要了解MVC的概念及大致原理,掌握就很容易了;而hibernate屬于orm系統,屬于持久層的解決方案,同樣需要對ORM的概念及原理有一個總體的了解,必要時可以去查查EJB1及EJB2里面用于持久層的Entity Bean的使用。而spring屬于應用程序框架,其核心是IOC容器以及AOP,把這兩個核心概念(也可稱為大模式)了解以后,再加上一定的內力修為,其它就都不難了。Spring中還集成了很多適用東西(不過這些東西80%的在某一個項目中可能一直用不上),比如對JDBC的封裝、自己的MVC、對動態語言的簡潔訪問等,這些你根據自己的項目情況來選擇學習,用到的時候再看看他的文檔,一個項目下來應該就能把握。
3 對于SSH的理解
在SSH框架中,struts用來解決MVC中顯示、請求控制部分,spring主要負責訪問數據庫DAO類的事務控制以及它被人稱譽的IOC思想在業務類中的恰當運用,hibernate主要是充當數據訪問層組件。由于spring對hibernate的良好支持,在DAO類主要由spring來完成,hibernate更多關注的應是O/R影射文件上的配置,如級聯關系,延遲加載等如何設置才能使效率更高。見圖1 (框架組合示意圖)
4 收獲和問題
4.1 actionform,PO,VO三對象的運用
討論最多的是actionform,PO,VO三對象的運用,本人傾向的觀點是:在SSH框架中,PO和VO可以不必區分,即業務層和持久層都可以使用hibernate產生的PO對象,我暫時把對象分成actionform和po兩種來分析,act
4.2 spring事務管理
在配置spring的事務管理中,最好把事務控制配置在業務類上,而不要配置在DAO類(需要保證多個原子事務操作同時失敗回滾時這是一種解決辦法);
4.3 act
act
4.4 理解AOP思想
深入理解AOP思想,我暫時感覺到的就是盡量面向接口編程,不管是域對象還是業務類或者是DAO類都設計出接口,在各方法中我們盡量傳入對象的接口,這對我們重用這些方法,擴展是很有好處的。
4.5 分頁處理 level
5 系統包劃分