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