【文章內(nèi)容簡介】
n S e r v l e tH i b e r n a t e D A O I m p lD A ORequestResponse業(yè) 務(wù) 邏 輯 層( S t r u t s + S p r i n g )數(shù) 據(jù) 持 久 層( H i b e r n a t e )D a t a b a s e 層M y S Q LM y S Q LO r a c l eO r a c l eS Q L S e r v e rS Q L S e r v e r 圖 SSH 三層架構(gòu)圖 第二章 相關(guān)技術(shù)介紹 5 其中 Web 層使用了 Struts 框架 , 實現(xiàn)了視圖控制的分離。業(yè)務(wù)層使用了 Spring 框架, 對表示層與持久層進(jìn)行了有效地黏合,完美得實現(xiàn)了業(yè)務(wù)代碼的高效分離。 SSH 有以下顯著優(yōu)點: ( 1)響應(yīng)速度快: SSH 三層架構(gòu)的數(shù)據(jù)持久層采用了 Hibernate 框架 , 提高了數(shù)據(jù)庫復(fù)用性 , 加快了服務(wù)器端的響應(yīng)速度。 ( 2)承壓量增加:在有限的硬件設(shè)備和網(wǎng)絡(luò)連接設(shè)備下 , 將 Hibernate 框架與數(shù)據(jù)庫連接池結(jié)合起來 , 緩解了并發(fā)連接高峰期的壓力。 ( 3)業(yè)務(wù)拓展性高:采用的三層架構(gòu)方式將表現(xiàn)層、業(yè)務(wù)層和數(shù)據(jù)庫持久層分離開來 , 分層的結(jié)構(gòu)方式使得業(yè)務(wù)拓展更為方便。 ( 4)開發(fā)效率高: SSH 三層架構(gòu)分 層搭建的高分離特性,可以在編碼階段進(jìn)行模塊分工編寫,后期整合從而有效的節(jié)省了程序員編寫重復(fù)代碼的時間。 ( 5)代碼重用性高:視圖層使用 Struts 框架,使得頁面代碼具有高重用性。業(yè)務(wù)層使用 Spring 框架對業(yè)務(wù)代碼進(jìn)行管理,也具備高重用性的特點。 Struts 框架 Struts 是對經(jīng)典設(shè)計模式 MVC 的一種實現(xiàn)類型,它是運用面向?qū)ο笏枷朐O(shè)計的,實現(xiàn)了 MVC 模式 “ 分離顯示邏輯和業(yè)務(wù)邏輯 ” 的功能,使開發(fā)人員專注于解決實際的業(yè)務(wù)邏輯問題,因而能夠有效的幫助開發(fā)者提高利用 J2EE 開發(fā) Web 應(yīng) 用程序和系統(tǒng)的效率 [6]。為了提高在運用 MVC 設(shè)計模型開發(fā) Web 應(yīng)用程序時的效率, Struts 框架使JSP, Servlet、標(biāo)簽庫以及面向?qū)ο蟮燃夹g(shù)的標(biāo)準(zhǔn)有了很大的改變和完善 [7]。 Struts 的體系結(jié)構(gòu)與工作原理如圖 所示。 C o n t r o l l e r( A c t i o n S e r v l e t )C l i e n t( B r o w s e r )V i e w( J S P )B u s s i n e s s L o g i c( A c t i o n )M o d e l( A p p l i c a t i o n S t a t e )S t r u t s 配 置 文 件I n v o k eF o r w a r dD i s p a t c hH T T P R e q u e s tE v e n tH T T P R e s p o n s eU p d a t e t a g G e t 圖 Struts 體系結(jié)構(gòu)圖 Struts 框架具有組件的模塊化,靈活性和復(fù)用性的優(yōu)點,同時簡化了基于 MVC 的Web 應(yīng)用程序的開發(fā)復(fù)雜度。 Struts 對 Model, View 和 Controller 都提 供了對應(yīng)的組XX 大學(xué) 本科畢業(yè) 設(shè)計 : 基于 SSH 的網(wǎng)絡(luò)商城系統(tǒng) 6 件。從 MVC 模型的角度可以了解 Struts 體系結(jié)構(gòu)和工作原理 [8, 9]。 ( 1) 模型( Model) 在 Struts 框架中,模型是由內(nèi)部狀態(tài)和事務(wù)邏輯兩個部分組成。通常是由ActionForm Bean 表示內(nèi)部狀態(tài),不同的應(yīng)用程序復(fù)雜度決定了這些 Bean 是只有在需要時才會從某個數(shù)據(jù)庫獲得數(shù)據(jù)還是自包含并持續(xù)的狀態(tài)。在小型的應(yīng)用程序中,事務(wù)邏輯可以作為控制器的一部分被嵌入到 Action 類中,而在較為復(fù)雜的大型應(yīng)用程序中,擁有狀態(tài)信息的 Bean 可以隨時地調(diào)用那些在內(nèi)部封裝了事務(wù)邏輯的 方法。 ( 2)視圖( View) Struts 框架主要是用 JSP 來實現(xiàn)視圖部分, Struts 提供了豐富的標(biāo)簽庫,通過標(biāo)簽庫可以減少腳本的使用,自定義的標(biāo)簽庫可以實現(xiàn)與 Model 有效交互,簡化創(chuàng)建用戶界面的過程,并增加了現(xiàn)實功能。 ( 3)控制器 (Controller) 在 Struts 中, Controller 組件由系統(tǒng)核心控制器,業(yè)務(wù)邏輯控制器兩部分組成。系統(tǒng)核心控制器負(fù)責(zé)攔截所有的 HTTP 請求,然后根據(jù)用戶請求決定是否要轉(zhuǎn)給業(yè)務(wù)邏輯控制器,它繼承了 HttpServlet 類,因此可以配置成標(biāo)注的 Servlet。業(yè)務(wù)邏輯控制器負(fù)責(zé)調(diào)用 Model 來處理用戶請求,其本身不具備處理能力 [10]。 Struts 2 框架的大致處理流程如下: ( 1)瀏覽器發(fā)送請求。 ( 2)核心控制器 Filter Dispatcher 根據(jù)請求決定調(diào)用合適的 Action。 ( 3) Web Work 的攔截器自動對請求應(yīng)用通用功能,例如 workflow、 validation 或文件上傳等功能。 ( 4)回調(diào) Action 的 execute 方法,該 execute 方法先獲取用戶請求參數(shù),然后執(zhí)行某種數(shù)據(jù)庫操作,既可以是將數(shù)據(jù)保存到數(shù)據(jù) 庫,也可以從數(shù)據(jù)庫中檢索信息。實際上,因為 Action 只是一個控制器,它會調(diào)用業(yè)務(wù)邏輯組件來處理用戶的請求。 ( 5) Action 的 execute 方法處理結(jié)果信息將被輸出到瀏覽器中,可以是 HTML 頁面、圖像,也可以是 PDF 文檔或者其他文檔。此時支持的視圖技術(shù)非常多,既支持 JSP,也支持 Velocity、 Free Marker 等模板技術(shù)。 Spring 框架 Spring 是一個輕量級解決方案。它是為了簡化企業(yè)級系統(tǒng)開發(fā)而誕生的,是一個以依賴注入原則和面向?qū)ο缶幊趟枷霝榛A(chǔ)的輕量級框架 [11]。它既是一個 AOP(面 向切面編程)框架也是一個 IoC(控制反轉(zhuǎn))容器,可以方便的替換業(yè)務(wù)對象,利用 JavaBean屬性和配置文件可以在需要的時候替換具有類似接口的對象 [12]。并且它提供了管理業(yè)務(wù)對象的一致方法。 Spring 的核心是控制反轉(zhuǎn),即通過配置文件來完成業(yè)務(wù)對象之間的注入,他鼓勵對接口編程而不是對類編程。 Spring 還提供了事物處理功能,使得它能夠在各種底層事務(wù)處理技術(shù)上提供一個統(tǒng)一的編程模型 [13],不但如此,他還能和其他一些開第二章 相關(guān)技術(shù)介紹 7 源框架進(jìn)行無縫的結(jié)合 [14]。 Spring 模塊是一個分層的框架 ,由核心容器, Spring 上下文,Spring AOP, Spring DAO, Spring ORM, Spring Web 模塊, Spring MVC 框架等 7 個模塊組 成 [15]。 如圖所示: S p r i n g A O PS o u r c e l e v e lm e t a d a t aA O P i n f r a s t r u c t u r eS p r i n g W e b M V CW e b M V C F r a m e w o r kW e b V i e w sJ S P V e l o c i t yP D F / E x p o r tS p r i n g C o n t e x tA p p l i c a t i o n C o n t e x tU I s u p p o r tV a l i d a t i o nJ N D L s u p p o r t a n d R e m o d e l i n g M a i lS p r i n g D A OT r a n s a c t i o n i n f r a s t r u c t u r eJ O B C s u p p o r t D A O s u p p o r tS p r i n g O R MH i b e r n a t e s u p p o r t J D O s u p p o r tS p r i n g W e bW e b a p p l i c a t i o n c o n t e x tM u l t i p a r t r e s o l v e rW e b u t i l i t i e sS p r i n g C o r eS u p p o r t i n g u t i l i t i e sB e a n c o n t a i n e r 圖 Spring 框架 結(jié)構(gòu) Spring 框架的功能可以在任何 J2EE 服務(wù)器中應(yīng)用, Spring 的核心要求是:支持綁定到特定 J2EE 服務(wù)的可重用業(yè)務(wù)和數(shù)據(jù)訪問對象。這種對象可以在不同的 J2EE 環(huán)境、獨立應(yīng)用程序或者測試環(huán)境之間應(yīng)用。從設(shè)計理念就可以明顯看出, Spring 框架使得邏輯層與 Web 層實現(xiàn)了分離, Spring 模塊是構(gòu)建在核心容器上的,這種核心容器定義了創(chuàng)建,配置和管理 Bean 方式,原來那種只能由 EJB 完成的目標(biāo)現(xiàn)在 Spring 只需要基本的Java Bean 就可以實現(xiàn)。并且 Spring 不僅僅是只能開發(fā)服務(wù)端,其簡單性,松耦合度以及可測試性使其可以服務(wù)于任何 Java 應(yīng)用, Spring 通過控制反轉(zhuǎn)機(jī)制,利用 XML 配置可以把程序中所涉及到的業(yè)務(wù)邏輯,事物管理控制器,對象工程, DAO 對象和服務(wù)組件等聯(lián)系起來,使得各個實體間可以充分解耦,他們之間關(guān)系的維持是利用統(tǒng) 一的配置文件 XML 的配置,因此對于單個對象的修改并不會影響到其他對象,所以維護(hù)起來也就十分方便。 Hibernate 框架 Hibernate 是一種對象關(guān)系映射框架,其本身是開放源代碼的,它是一種強(qiáng)大高效的持久層查詢服務(wù)器,它以面向?qū)ο蟮乃季S,解決數(shù)據(jù)庫的操作問題, Hibernate 高效的保證了運行效率、內(nèi)存消耗以及開發(fā)效率,并自動封裝了事務(wù)控制,安全性代碼等功能[16]。同時 Hibernate 還是一種非強(qiáng)迫性的解決方案,能與一些數(shù)據(jù)庫和 Java 服務(wù)器進(jìn)行平穩(wěn)的集成 [17]。 Hibernate 的強(qiáng)大緩存機(jī)制能一定程度上的緩解服務(wù)器端頻繁讀取數(shù)據(jù)庫的壓力,這也是 Hibernate 廣泛使用得重要原因之一。它輕量級的封裝了 JDBC 對象,從而使得代碼編寫者在操作數(shù)據(jù)庫時可以使用對象編程思想 [18]。 Hibernate 既可以在 JavaXX 大學(xué) 本科畢業(yè) 設(shè)計 : 基于 SSH 的網(wǎng)絡(luò)商城系統(tǒng) 8 的客戶端程序中使用,也可以在 Web 應(yīng)用程序中使用,可以說任何使用 JDBC 的場合都能夠使用 Hibernate。更為重要的是,在應(yīng)用 EJB 的 J2EE 架構(gòu)中, Hibernate 可以取代CMP 從而完成數(shù)據(jù)持久化。 Hibernate 實現(xiàn)了面向?qū)ο蟮臉I(yè)務(wù)模型和商業(yè)邏輯的最優(yōu)結(jié)合,它不 僅可以管理 Java 對象和數(shù)據(jù)庫的映射,還可以查詢數(shù)據(jù)并且獲取數(shù)據(jù),極為顯著的縮短了開發(fā)時使用 SQL 和 JDBC 的數(shù)據(jù)處理時間 [19]。 Hibernate 將 Java 中的對象與對象關(guān)系映射至關(guān)系模型數(shù)據(jù)庫中的表格與表格之間的關(guān)系, Hibernate 提供了這個過程中自動對應(yīng)轉(zhuǎn)換的方案。 Hibernate 的體系結(jié)構(gòu)如圖 所示。 A p p l i c a t i o nT r a n s i e n t O b j e c tS e s s i o n F a c t o r yT r a n s a c t i o n F a c t o r yS e s s i o nC o n n e c t i o n P r o v i d e rT r a n s a c t i o nP e r s i s t e n tO b j e c t sD a t a b a s eJ N D I J D B CJ T A 圖 Hibernate 體系架構(gòu) Hibernate 的核心接口一共有 5 個,包括: Session, Session Factory , Configuration,Transaction, Query 和 Criteria 接口。主要的組件有三個,分別為:連接管理組件,事務(wù)管理組件,對象 /關(guān)系映射組件 [20]。 Hibernate 提供的持久化服務(wù)是一個接口,它由業(yè)務(wù)邏輯調(diào)用。其優(yōu)勢在于使得開發(fā)者可以把被持久化的對象實現(xiàn)成與持久化環(huán)境無關(guān)的類。 總之, Hibernate 是一個優(yōu)秀并且開放源代碼的 Java 對象持久層輕量級封裝框架,它既可以在 Java 應(yīng)用程序中用來取代大部分 JDBC 代碼,也可以整合到 J2EE 系統(tǒng)中作為持久層框架。 B/S 架構(gòu)技術(shù)介紹 B/S 結(jié)構(gòu),即 Browser/Server(瀏覽器 /服務(wù)器 )結(jié)構(gòu),是隨著 Inter 技術(shù)的興起,是第二章 相關(guān)技術(shù)介紹 9 一種不同于 C/S 結(jié)構(gòu)的新的體系架構(gòu),在這種結(jié)構(gòu)下,用戶操作與交互的界面是通過通用的瀏覽器 (如 IE