1 框架層次結構概述
框架層次結構層次分為四層:表現層、持久層、業務層、域對象層。每個框架分別負責一個層次的實現,表現層我們使用Struts, 業務層使用Spring, 持久層使用Hibrenate。每層在應用程式中都有明確的責任。每一套用層彼此獨立且保持一致。這些框架層次在以一種鬆散耦合的方式彼此作用而不用管低層的技術細節。
Struts+Spring+Hibernate框架體系結構圖
2 表現層
Struts是框架的表現層,Struts是對MVC構架的具體實現。它提供了一種便利的方式,可以用於將模組化的應用程式清楚地分成邏輯、表示和數據。
2.1 Struts的MVC結構
Struts的MVC三層結構[3]:
視圖層:Struts採用JSP作為MVC的視圖。每一視圖都是採用了定製標籤庫的JSP頁面,這些定製標籤庫則由Struts框架提供。全部表單元素都是用定製標籤編碼的,所以這些頁面能夠很方便地同控制器互動。每一個表單都通過映射JSP到Servlet的請求這一方式指向控制器特定入口點。
控制層:控制器就是Java Servlet,由Struts框架提供,負責視圖和模型之間的互動。控制器的每個入口點都由名為struts-config.xml的配置檔案設定。該檔案把來自視圖的請求映射為特定的Java類以進行相應的處理,控制器還指定下一個視圖的位置。
模型層:JavaBean就是模型的代表。對進入控制器的每個入口點來說,Bean的作用是存儲從視圖獲取的信息,同時被稱為“動作類”,一種Java類則被指定為對表單輸入採取行動。動作類(Action Class)實現了業務邏輯。
Struts MVC結構圖
2.2 Struts框架的優勢
Struts是當今流行的JSP Web框架。 Struts框架是一種基於Java的技術,Web應用程式開發人員通過它可充分利用面向對象設計、代碼重用以及“編寫一次、到處運行”的優點。Struts提供了一種創建具有良好可管理性的Web套用框架,其中對應用程式的顯示、表示和數據的後端代碼進行了抽象。
Struts的優點主要集中體現在如下[4]:
(1) Struts 將業務數據、頁面顯示、動作處理進行分離,有利於各部分的維護。
(2) Taglib 是Struts 的標記庫,其靈活運用能大大提高開發效率。
(3) Struts的Valicator可以幫助完成驗證工作,避免重複編寫驗證代碼工作,減少了開發工作量,實現驗證代碼集中管理,其維護方便。
(4) 頁面轉發可以使系統的脈絡更加清晰,可以在很大程度上提高系統的維護性,將是今後的一個發展方向。
(5) 通過Struts 提供的ActionForm封裝web form中的元素,使重用web表單成為可能。
(6) Struts 採用 Front Controller模式來實現動作處理,讓所有的動作請求都是經過一個統一入口,然後進行分發。該方式方便人們在入口中加入一些全局控制代碼的實現,如安全控制、日誌管理等。
2.3 Struts框架負責的工作
下面是Struts在框架結構中所負責的工作:
(1) 為用戶管理請求和回響;
(2) 提供一個控制器代理調用業務邏輯和其它上層處理;
(3) 處理從其它層擲出給一個Struts Action的異常;
(4) 為顯示提供一個模型;
(5) 執行用戶接口驗證。
3 業務層
Spring實現了反轉控制(Inversion of Control)和面向方面編程(Achievement-Oriented Programming)。Spring框架的能實現套用的分層架構,分層架構允許您選擇使用哪一個組件。在套用中要使用的對象可以被一個簡單的XML檔案連在一起,這個XML檔案含有到像事務管理器、對象工廠、包含業務邏輯的服務對象、和數據存取對象這些對象的引用。
3.1 spring框架的體系結構
Spring是框架的業務層,這個框架是一個分層架構,由 7 個定義良好的模組組成。如圖3.3所示Spring體系結構。
Spring 框架體系結構
3.2 Spring框架的優勢
Spring 框架是一個分層架構,由 7 個定義良好的模組組成。Spring 模組構建在核心容器之上,核心容器定義了創建、配置和管理 bean 的方式,其主要優勢有如下幾點:
(1) Spring能有效地組織你的中間層對象。
(2) Spring能消除在許多工程中常見的對Singleton的過多使用。
(3) 通過一種在不同應用程式和項目間一致的方法來處理配置檔案,消除各種自定義格式的屬性檔案的需要,僅僅需要看看類的JavaBean屬性。反轉控制的使用幫助完成了這種簡化。
(4) Spring能夠幫助我們真正意義上實現針對接口編程。
(5) Spring的設計會讓使用它創建的套用儘可能少的依賴於它的APIs,在Spring套用中的大多數業務對象沒有依賴於Spring。
(6) 使用Spring構建的應用程式易於單元測試。
(7) Spring使EJB成為一個實現選擇,而不是必需的選擇。你可以用POJO或當地EJB來實現業務接口,卻不會影響到調用代碼。
(8) Spring能使用AOP提供聲明性事務管理,可以不直接操作JTA也能夠對事務進行管理。
(9) Spring為數據存取提供了一個一致的框架,不論是使用JDBC還是O/R mapping的產品。
(10) MVC Web框架,提供一種清晰,無侵略性MVC實現方式。
3.3 Spring框架負責的工作
Spring業務層在框架中負責下面這些事情:
(1) 管理事務;
(2) 預留和其它層互動的接口;
(3) 管理業務層對象之間的依賴;
(4) 增加在表現層和持久層之間的靈活性,使它們互不直接通訊;
(5) 從表現層中提供一個上下文給業務層獲得業務服務;
(6) 管理從業務邏輯到持久層的實現;
(7) 處理應用程式的業務邏輯和業務驗證;
4 持久層
Hibernate是一種ORM映射工具,它不僅提供了從Java類到數據表之間的映射,也提供了數據查詢和恢復機制。相對於使用JDBC和SQL來手工運算元據庫,使用Hibernate,可以大大減少運算元據庫的工作量。Hibernate可以和多種Web伺服器或者套用伺服器良好集成。
4.1 Hibernate框架的體系結構
Hibernate框架的體系結構圖如圖所示。
Hibernate的體系結構圖
4.2 Hibernate框架的優勢
Hibernate是一個開放原始碼的對象關係映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程式設計師可以隨心所欲的使用對象編程思維來操縱資料庫。Hibernate可以套用在任何使用JDBC的場合,既可以在Java的客戶端程式實用,也可以在Servlet/JSP的Web套用中使用,Hibernate還可以在套用EJB的J2EE架構中取代CMP,完成數據持久化的重任。
Hibernate框架的優勢有下面幾點:
(1) Hibernate具有可擴展性;
(2) Hibernate既適用於獨立的Java程式,也適用於Java Web套用,而且還可以在J2EE架構中取代CMP,完成持久化任務,Hibernate能集成到會話EJB和基於BMP的實體EJB中;
(3) Hibernate可以和多種WEB伺服器,套用伺服器良好集成,並且支持所有的資料庫伺服器;
(4) Hibernate有詳細的參考文檔,使用方便,容易上手。
4.3 Hibernate框架負責的工作
下面是Hibernate持久層在框架中所負責的工作:
(1) 查詢相關的信息成為對象。
Hibernate通過HQL的面向對象的查詢語言或者使用條件表達式API來做這個事情。HQL非常類似於SQL。只是把SQL里的table和columns用Object和它的fields代替;
(2) 保存、更新、刪除儲存在資料庫中的信息;
Hibernate這樣的高級“對象-關係”映射框架提供對大多數主流SQL資料庫的支持,它們支持“父/子”關係、事務處理、繼承和多態。
5 域對象層
域對象層,也叫DAO訪問層,它負責封裝底層的數據訪問細節,不僅可能使概念清晰,而且可以提高開發效率。
5.1 域對象層負責的工作
域對象層主要做兩件事:
(1) 編寫相關接口: DAO類一般要使用Spring的聲明式事務機制,而聲明式事務機制是使用Spring AOP來實現的。Spring AOP默認使用的Java動態代理必須基於接口。本系統是面向接口編程;
(2)實現相關接口:在實現接口的同時,需要繼承HibernateDaoSurpport類,這樣可以省去對SessionFactory與HibernateTemplate的處理。