【正文】
在本團購系統(tǒng)中主要用于用戶的登錄和注冊的動態(tài)驗證。 Ajax 框架在整個系統(tǒng)架構(gòu)中應(yīng)該處于表現(xiàn)層和 MVC 模式中的視圖層。然后在 Struts 的核心控制器接受到客戶端請求之后會轉(zhuǎn)發(fā)給 Spring 容器已經(jīng)實例化的相應(yīng)的 Action 類實例,對 Action 類中所需調(diào)用的其他屬性數(shù)據(jù)bean(業(yè)務(wù)邏輯層的類對象 ), Spring 會先搜尋其 bean 工廠,若已經(jīng)注冊并實例化了,就會將該實例對象進行動態(tài)注入;否則就會在 Action 調(diào)用該屬性類對象時出現(xiàn)異常。 Hibernate 在整個系統(tǒng)流程中應(yīng)該是處于 MVC 模式中的模型層,向上負責(zé)和本系統(tǒng)模型層的業(yè)務(wù)邏輯模型(同時也屬表現(xiàn)層、業(yè)務(wù)邏輯層和數(shù)據(jù)持久層這三層架構(gòu)中的業(yè)務(wù)邏輯層),即 XxxBizImpl 類的方法進行數(shù)據(jù)互通;向下通過 ORM 25 技術(shù)負責(zé)把模型層中的數(shù)據(jù)模型(同時也屬三層架構(gòu)中的數(shù)據(jù)持久層),即本系統(tǒng)數(shù)據(jù)庫中每張表所對應(yīng)的的數(shù)據(jù) Bean 中的數(shù)據(jù)記錄給持久化到數(shù)據(jù)庫中。 Struts2 本身就屬于一個成熟的 MVC 框架,它其中的 Action 類就屬于模型層的業(yè)務(wù)邏輯模型控制器,本系統(tǒng)中的各種持久層的實例類就屬于模型層的數(shù)據(jù)模型,前臺頁面就屬于其視圖層,其核心控制器類就充當(dāng)著轉(zhuǎn)發(fā)各種請求的 控制層角色。 架構(gòu)實現(xiàn) 本團購系統(tǒng)是在整合了 Struts Hibernate、 Spring 和 Ajax 多個框架的基礎(chǔ)上結(jié)合 MVC 模式進行合理架構(gòu),從而搭建起了系統(tǒng)的開發(fā)運行環(huán)境。根據(jù)分層原則,把層次分成:表現(xiàn)層、業(yè)務(wù)邏輯層和持久層。 24 系統(tǒng)架構(gòu)的總體分析與實現(xiàn) 架構(gòu)分析 根據(jù)之前架構(gòu)設(shè)計的總體目標(biāo)要求,對 Struts、 Spring 和 Hibernate 的 J2EE架構(gòu)進行具體設(shè)計。利用該系統(tǒng)平臺,網(wǎng)購愛好者可以隨意選擇自己喜歡且價格優(yōu)惠的商品下單,方便快捷地進入實體店消費,并將消費后的感受通 過本平臺及時地反饋給商家,達到顧客與商家互利共通的局面。相信未來肯定是 B/S 的天下。因此,通常應(yīng)該會對服務(wù)器數(shù)據(jù)進行同步備份,或采用分布式服務(wù)器集群來均衡負載服務(wù)器處理應(yīng)對請求的壓力。 但是,采用 B/S 模型的應(yīng)用系統(tǒng)也有一個非常明顯不足 應(yīng)用服務(wù)器運行數(shù)據(jù)負荷比較重。無論用戶規(guī)模有多大,有 多少分支機構(gòu)都不會增加任何維護升級的工作量,所有的操作只需要針對服務(wù)器進行。 由于本系統(tǒng)是基于 Web 的架構(gòu)的電子商務(wù)軟件系統(tǒng),所以很自然會選擇第二種 B/S 模式的網(wǎng)絡(luò)應(yīng)用模型。如果客戶機提交的請求包括數(shù)據(jù)的存取, Web 服務(wù)器還需與數(shù)據(jù)庫服務(wù)器協(xié)同完成這一處理工作。這個后臺就是第二層的 Web 服務(wù)器。瀏覽器將 HTML 代碼轉(zhuǎn)化成圖文并茂的網(wǎng)頁。 第一層客戶機是用戶與整個系統(tǒng)的接口。 B/S 模式是一種以 Web 技術(shù)為基礎(chǔ)的新型的 MIS 系統(tǒng)平臺模 式。服務(wù)器程序負責(zé)有效地管理系統(tǒng)資源,如管理一個信息數(shù)據(jù)庫,其主要工作是當(dāng)多個客戶并發(fā)地請求服務(wù)器上的相同資源時,對這些資源進行最優(yōu)化管理。 C/S 模式主要由客戶應(yīng)用程序 (Client)、服務(wù)器管理程序 (Server)和中間件(Middleware)三個部件組成?,F(xiàn)今互聯(lián)網(wǎng)中主要就有兩種模式,即 C/S 模式和 B/S 模式。 系統(tǒng)開發(fā)平臺的選擇 基于 J2EE 架構(gòu)的應(yīng)用程序,具有 Java 程序的基本特性:“一次編譯,到處運行”。 (11) 商品信息維護模塊,系統(tǒng)管理員可以及時對各種商品的數(shù)據(jù)信息進行更新維護。 (9) 商家申請舉行團購模塊 ,當(dāng)有線下商家想在本站點舉行團購活動時,可以在本模塊提交相應(yīng)的團購申請信息。 (7) 團品轉(zhuǎn)讓模塊,當(dāng)用戶對自己已經(jīng)團購到的物品在未使用之前若想進行轉(zhuǎn)讓,可以在該模塊發(fā)布轉(zhuǎn)讓信息。 (5) 在線支付模塊,當(dāng)用戶下完訂單之后,準(zhǔn)備付款時,就得進行在線支付。 21 (3) 注冊模塊,這個模塊是針對那些初次光顧本站點并想?yún)⑴c團購的網(wǎng)友所設(shè)計的。 (1) 瀏覽團購信息模塊,這個模塊算是整個系統(tǒng)的基礎(chǔ),該模塊結(jié)合了 CSS、 JavaScript、 Ajax 等 Web 技術(shù)和服務(wù)端程序?qū)λ袌F購信息進行了動態(tài)顯示。 系統(tǒng)功能需求 在 本 文的系統(tǒng)可行性研究章節(jié)已經(jīng)就本系統(tǒng)的所有功能模塊做了一個大致的需求分析,但為了準(zhǔn)確地確定目標(biāo)系統(tǒng)必須做什么,了解 用戶的明確需求,我認(rèn)真調(diào)研了團購系統(tǒng)的整個業(yè)務(wù)流程,聽取了有著許多網(wǎng)絡(luò)團購經(jīng)驗顧客和商家等相關(guān)人員對系統(tǒng)的要求,結(jié)合軟件工程的思想,得出了團購系統(tǒng)總的業(yè)務(wù)流程。 申請團購的商家在進入本站點后就只需要在商貿(mào)合作模塊提交商家的團購信息即可。 系統(tǒng)需求分析 用戶需求分析 經(jīng)過調(diào)研,本團購系統(tǒng)總共就 三種用戶角色,即普通團購用戶、申請團購的商家和系統(tǒng)管理員。從系統(tǒng)的升級和維護方面考慮,采用 Struts2, Spring和 Hibernate三種開源框架,這樣系統(tǒng)分層清晰,便于維護和擴展。 例如在線支付模塊就涉及到表現(xiàn)層對于用戶提交的訂單數(shù)據(jù)的采集,業(yè)務(wù)邏 19 輯層與在線支付網(wǎng)關(guān)接口的交互,數(shù)據(jù)持久層對用戶在線支付成功后的數(shù)據(jù)信息的保存。 分析問題 根據(jù)自己對目前國內(nèi)比較有名的團購網(wǎng)站如美團、糯米團、拉手網(wǎng)等的了解以及自己經(jīng)過多次團購后對整個團購業(yè)務(wù)流程的了解,可以將整個團購系統(tǒng)分為以下幾個模塊,即登錄模塊、 注冊模塊、瀏覽團購商品模塊、查詢搜索商品信息模塊、購物車模塊、在線支付模塊、用戶個人信息管理模塊、團品評價或轉(zhuǎn)讓、商家申請團購模塊、團購信息錄入模塊、會員信息管理模塊、團購數(shù)據(jù)維護模塊等 11 個模塊。 Java 先進的分層思想可以實現(xiàn)“高內(nèi)聚、低耦合”的多層網(wǎng)絡(luò)架構(gòu),運用 MVC 設(shè)計模式可以使電子商務(wù)軟件具有更加高效 、合理的系統(tǒng)架構(gòu),而 PHP 只能實現(xiàn)簡單的分布式兩層或三層架構(gòu),技術(shù)架 構(gòu)的落后使得 PHP 開發(fā)的電子商務(wù)軟件先天不足,而后天又無法彌補先天的劣勢,使得其開發(fā)的系統(tǒng)在可擴展性、需求應(yīng)變的靈活性及安全可靠性上與 Java 編寫的電子商務(wù)軟件系統(tǒng)的差距越來遠大。 AJAX 前景非常樂觀,可以提高系統(tǒng)性能,優(yōu)化用戶界面 。該問題的解決方案也已出現(xiàn),大部分都使用 URL片斷標(biāo)識符(通常被稱為錨點,即 URL 中 后面的部分)來保持跟蹤,允許用戶回到指定的某個應(yīng)用程序狀態(tài)。 對應(yīng)用 Ajax 最主要的批評就是,它可能破壞瀏覽器后退按鈕的正常行為。隨著 Ajax 的成熟,一些簡化 Ajax 使用方法的程序庫也相繼問世。 Ajax 不需要任何瀏覽器插件,但需要用戶允許 JavaScript 在瀏覽器上執(zhí)行。 U s e r / B r o w s e rJ a v a S c r i p t X M L H t t p R e q u e s t D e s c r i p t i o n . j s po n m o u s e o v e r c r e a t e sc a l l b a c kG E T / g e t D e s c r i p t i o n . j s px m l r e s p o n s ec a l l b a c k r e s p o n s ep a r s e m e s s a g es h o w D e s c r i p t i o ng e t M e s s a g e 圖 Ajax 頁面端工作原理圖 17 圖 Ajax 系統(tǒng)框架工作原理圖 AJAX 優(yōu)缺點及應(yīng)用前景分析 使用 Ajax 的最大優(yōu)點,就是能在不更新整個頁面的前提下維護數(shù)據(jù)。 AJAX 技術(shù)及工作原理分析 Ajax 的工作原理主要是采用 Javascript 中的 XMLHttpRequest 對象與后臺服務(wù)器程序進行異步交互,使得前臺頁面在向服務(wù)端發(fā)送請求直到服務(wù)器接收到請求進行處理再返回給客戶端瀏覽器頁面處理完后的數(shù)據(jù)結(jié)果這段時間內(nèi),前臺頁面既可以無需全部刷新等待后臺返回的數(shù)據(jù),從而在整體上保持用戶的交互體驗的流暢性,又可以只在一小塊局部頁面進行小數(shù)據(jù)量的動態(tài)更新。 AJAX 的興起是伴隨著一整個開發(fā)工具 /編程語言及相關(guān)技術(shù)系統(tǒng)來支撐的。通過這個對象,頁面 JavaScript 可在不重載頁面的情況與 Web 服務(wù)器交換數(shù)據(jù)。 AJAX 框架 AJAX 技術(shù)體系概述 AJAX 不是一種新的編程語言,而是一種用于創(chuàng)建更好更快以及交互性更強的 Web 應(yīng)用程序的技術(shù)。 Spring AOP:即 Spring 框架中的一個子框架,使用了純 Java 實現(xiàn),不需要專用的編譯過程和特殊的類加載器,在運行期通過代理方式向目標(biāo)織入增強代碼。 AspectWerkz,是基于 Java 的簡單、動態(tài)、輕量級的 AOP 框架,支持在運行期或類裝載期織入橫切代碼,因此它擁有一個特殊的類裝載器。位于 AOP 工具核心的是連接點模型,提供了一種機制,可以識別出在哪里發(fā)生了橫切。 AOP 工具的設(shè)計目標(biāo)是將橫切的問題 (如性能監(jiān)視、事務(wù)管理 )模塊化。切面能對關(guān)注點進行模塊化,例如橫切多個類型和對象的事務(wù)管理。 ( 2)面向切面編程( AOP) Spring 被人重視的另一方面是支持 AOP(Aspect— Oriented Programming)面向切面編程的實現(xiàn),面向切面編程通過提供一種思考程序結(jié)構(gòu)的途徑,來彌補 OOP 的不足。 構(gòu)造注入:指通過構(gòu)造方法來完成依賴關(guān)系的設(shè)定,而不是通過 setter()方法。 設(shè)值注入:有些書籍稱之為 屬性注入,是指通過 setter()方法傳入被調(diào)用者的實例。即依賴注入和控制反轉(zhuǎn)是同一個概念。其具體含義是:當(dāng)某個角色 (可能是一個 Java 實例,調(diào)用者 )需要另一個角色 (另一個 Java 實例,被 調(diào)用者)的協(xié)助時,在傳統(tǒng)的程序設(shè)計過程中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實例。通 過策略接口, MVC框架變成為高度可配置的, MVC容納了大量視圖技術(shù),其中包括 JSP、 Velocity、 Tiles、 IText 和 POI。 Web模塊 還簡化了處理多部分請求以及將請求參數(shù)綁定到 域?qū)ο蟮墓ぷ鳌? Spring W曲模塊: Web上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于 Web的應(yīng)用程序提供了上下文。 Spring ORM: Spring框架插入了若干個 ORM框架,從而提供了 ORM的對象關(guān)系 工具,其中包括 JDO、 Hibernate和 IBatis SQL Map。異常層次結(jié)構(gòu)簡化了錯誤處 理,并且極大地降低了需要編寫的異常代碼數(shù)量 (例如打開和關(guān)閉連 接 )。 通過使用 Spring AOP,不用依賴 EJB組件,就可以將聲明性事務(wù)管理集成到應(yīng)用 程序中。所以,可以很容易地使 Spring框架管理的任何對象支持 AOP。 Spring上下文包括企業(yè)服務(wù),例如 JNDI、 EJB、電子郵件、國際化、校驗和 調(diào)度功能。 BeanFactory使用控制反轉(zhuǎn) (IoC)模式將應(yīng) 用程序的配置和依賴性規(guī)范與實際的應(yīng)用程序代碼分開。幾個主要模塊的功能如下: 核心容器:核心容器提供 Spring框架的基本功能。其整個體系結(jié)構(gòu)如圖 所示。 Spring 框架式一個分層架構(gòu),由 7 個定義良好的模塊組成。然而, Spring 用途不僅限于服務(wù)器端的開發(fā),從簡單性、可測試性和松耦合的角度而言,任何 Java 應(yīng)用都可以從中受益。 Spring 框架 Spring 體系結(jié)構(gòu)概述 Spring 是一個開源框架,是開發(fā)者為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性問題而創(chuàng)建。 Hibernate 自發(fā)布以來大受歡迎,目前有成千上萬的程序員學(xué)習(xí)和使用它來開發(fā)商業(yè)級的應(yīng)用。然而,通過正確的方法和策略,使用 Hibernate 時,還是非常接近直接使用 JDBC 時的效率,而且在有些情況下,還有可能高于使用 JDBC 時的執(zhí)行效率。它可以和多種 Web服務(wù)器或者應(yīng)用服務(wù)器良好集成,使得開發(fā)者可以根據(jù)不同的需要來選擇 Web服務(wù)器。 Hibernate對每一種數(shù)據(jù)庫有對應(yīng)的 Dialect進行操作優(yōu)化,從而提高它在各種情況下的效率。 Hibernate 的體系結(jié)構(gòu) 從圖 , Hibernate是使用數(shù)據(jù)庫和配置信息來為應(yīng)用程序提供持久化服務(wù)(以及持久的對象)的。其次,提供了軟件的可測試性,也就是說軟件在應(yīng)用服務(wù)器上運行但卻在服務(wù)器之外測試。另外,作為一種輕量級的對象持久化解決方案, ORM 既可以運行在容器 (如 Spring)管理的環(huán)境中,使用容器提供的數(shù)據(jù)庫連接池和事物管理機制等服務(wù);也可以脫離容器,在無容器管理的環(huán)境下運行,這時 ORM 將使用自身提供的數(shù)據(jù)庫連接池和事物管理機制等服務(wù)。在數(shù)據(jù)庫事物被提交時,它會有選擇性地只提交發(fā)生變化的對象,而且