[摘要] 目前,輕量級J2EE架構Struts+Spring+Hibernate已漸漸成為B2C電子商務系統的主流技術。本文在對Struts、Spring和Hibernate進行分析的基礎上,對B2C電子商務系統進行了整體設計,并對該架構下電子商務系統的技術實現進行了詳細說明,并給出了相關構造的功能描述和部分核心代碼。本研究中所用的架構技術能提高商務系統的安全性和穩定性,使商務系統資源得到最大限度的節省和利用,同時使系統具備更好的可擴展性和可維護性。
[關鍵詞] Struts+Spring+Hibernate 電子商務系統 設計
縱觀電子商務的發展歷史,大概可分為兩個階段。第一階段是產品介紹階段,即通過互聯網公布企業和產品信息,類似于傳統的廣告方式;第二階段是產品交易階段,企業間通過基于互聯網的定單交易系統,直接在網上完成交易,主要表現形式有電子采購、電子銷售和電子交易市場三大類網站。目前,大多數的電子商務系統主要由供求系統、新聞發布系統、“知道”系統、B2C系統四部分構成。其中B2C系統是電子商務系統的核心系統,為整個商務平臺構建了一個基本框架,主要提供電子商情,能夠促進消費者購買商品,從而產生電子購物和交易。隨著Internet的迅猛發展與J2EE技術的成熟,使用Web應用框架的開發者的人數得到了快速地增長。框架通過為應用開發提供預先準備好的起步器,來幫助開發者更快、更好地建立應用。框架的使用正在得到快速地發展,現在已經有幾十個可選的Web應用框架,在這些框架中比較流行的輕量級J2EE架構是Struts+Spring+Hibernate。本文研究的是利用“Struts+Spring+Hiber-nate”架構技術對電子商務系統的核心系統B2C所進行的設計。
一、Struts、Spring和Hibernate簡介
1.Struts MVC設計模式
Struts MVC(Model-View-Controller)把一個應用程序數據的輸入、處理、輸出處理操作流程劃分為模型層、視圖層和控制器。這三次的具體業務規則如下:模型層(Model),表示業務邏輯和業務規則,Struts MVC為模型提供了Action和ActionForm兩個對象。由ActionForm 進行數據封裝,Action進行業務處理,模型可以用JavaBean、Hibernate等組件技術來處理數據庫的訪問。視圖層(View),它就是我們通常所說的表示層。Struts的視圖是由JSP以及用戶自定義標簽組成,模型進行操作之后,其結果就是通過視圖來顯示的。在視圖中不建議進行大量的數據處理操作和業務操作,只是給用戶提供要處理的數據的顯示。控制器(Controller),它用于管理模型與視圖發生的交互。在Struts中主要的控制器組件有struts-contig.xml和ActionServlet。用戶進行數據處理時,它不能直接去執行模型,而是通過控制器來間接地實現。控制器控制視圖提交數據,然后由控制器控制相應的模型層進行數據處理操作。模型處理完數據后,再由控制器找到相應的視圖進行數據的顯示。
2.Spring框架
Spring是一個開源框架,它是一個以控制反轉(IOC)和面向切面(AOP)編程為基礎的輕量級框架。Spring通過控制反轉(inversion of contro1,IOC)這一機制實現降低代碼耦合度。當應用控制反轉時,對象都是被動地給予它們的依賴,而不是主動地去創建或尋找它們的依賴對象。同時Spring為面向切面編程提供了有效的支持,面向切面編程能使來自系統服務的單個的應用業務邏輯粘合起來。應用對象做它假定做的業務邏輯,其它的就什么也不做。Spring作為容器,可以管理自己的生命周期和配置應用對象。使用者可以通過配置原形來讓Bean彼此創建或者通過創建一個單一實例或者在每次需要的時候創建一個實例,當然這些原形要彼此互相關聯。
3.Hibernate框架
Hibernate是一種實現對象和關系之間映射(Object RelationMapping)的框架。它是一種新的ORM映射工具,它同時提供了從Java類到數據表的映射和數據查詢、恢復等機制,實現數據層對象的持久性。相對于使用JDBC和SQL來手工操作數據庫,使用Hibernate可以大大減少操作數據庫的工作量。并且Hi.bema可以和多種Web服務器以及應用服務器良好地集成。Hibernate是JDBC的輕量級對象封裝,這使得Java程序員可以使用面向對象的編程技術來操作關系數據庫,而不必花費大量的時間去更新和維護復雜的數據持久層.從而降低J2EE架構應用軟件開發的難度和復雜度。提高Java應用軟件的開發效率。
二、基于Struts、Spring、Hibernate的B2C電子商務系統的設計
1.B2C系統整體設計
根據電子商務系統的主要構成情況,筆者利用Struts+Spring+Hibernate架構技術對B2C系統的框架進行了設計,分別設計有表現層、業務邏輯層、持久層。
表現層——提供與用戶交互的界面。GUI(圖形用戶界面)和web頁面是表現層的兩個典型例子;業務邏輯層——該層借助了Spring,通過控制反轉、AOP應用、面向接口編程,來降低業務組件之間的耦合度,增強系統擴展性。spring框架是—個分層架構,由七個定義良好的模塊組成,其中最重要的模塊就是核心容器,核心容器定義了創建、配置和管理bean的方式,提供Spring框架的基本功能,核心容器的主要組件是BeanFactory,它是工廠模式的實現。BeanFactory使用控制反轉(IOC)模式將應用程序的配置和依賴、規范與實際的應用程序代碼分開。持久層——該層使用對象——關系映射(ORM)開源項目Hibernate,Hibernate為java提供了ORM持久化機制和查詢服務,通過在XML文件中定義對象和關系的映射關系。
層與層之間的關系特征:首先,每個層由一組相關的類或組件構成,共同完成特定的功能。其次,層與層之間存在自上而下的依賴關系,即上層組件會訪問下層組件的API,而下層組件不應該依賴上層組件。例如,表現層依賴于業務邏輯層,而業務邏輯層依賴于持久層。最后每個層對上層公開API,但具體的實現細節對外透明。當某一層的實現發生變化,只要它的API不變,不會影響其它層的實現。
2.B2C系統Struts表現層開發
Struts的核心控制器由ActionServlet類和Action類來實現。ActionServlet類在電子商務系統MVC模型中扮演中央控制器的角色,主要負責接收HTTP請求信息,它通過存儲在特定的XML文件中的struts-config.xml的配置映射信息把請求轉發給適當的Action對象,一個電子商務系統用戶請求就是通過ActionServlet被進行處理和轉發的。
下面是B2C電子商務系統中一個子模塊的Struts-config.xml文件片段的范例。Struts-config.xml是Struts的核心配置文件,要跟業務邏輯層相結合,同時也加載了Spring,其關鍵代碼如下:
<action-mappings>
<action path=”/order” type=”org.springframework.web.struts.DelegatingActionProxy”name=”OrderForm”>
</action>
</action-mappings>
<! - - = = Spring plugin - - >
<plug-in className=”org.springframework.web.struts.ContextLoaderPlugIn”>
<set-property property “contextConfigLocation”value=“/WEB-INF/classes/
applicationContext.xm1./WEB-INF/Classes/action-servlet.xml”/>
</plug-in>
3.Spring在B2C系統中的作用
為實現對Spring IOC容器的訪問,應用代碼可以通過如下兩個接口完成:⑴BeanFact-ory:開發者借助于配置文件(如XML或屬性文件)能夠實現對JavaBean的配置和管理。⑵ApplicationContext:構建在BeanFactory基礎之上,除了具有BeanFactory的功能之外,還添加了時間、聲明(非)容器提供的服務等其它功能。主要用于開發J2EE應用,這也是Spring推薦使用的接口。
首先我們看下B2C系統的ApplicationContext.xml文件片段,在文件中把數據庫訪問的代碼封裝成一個Bean,然后在XML文件里進行配置。在這里dataSource1這個Bean的生命周期分4個階段:
(1)實例化JavaBean(也就是dataSource1)。
(2)JavaBean實例的初始化,即通過IOC注入其依賴性。這一階段將完成JavaBean實例的初始化。
<bean id=”dataSourcel”
class=”org.apache.commons.dbcp.BasicDataSource”
destroy-method=”close”>
<property name=”driverClassName”
Value=”net.sourceforge.jtds.jdbc.Driver”/>
<property name=”url”value=”jdbc.jtds.sqlserver://172.18.1.8:
1433;DatabaseName=webShop”/>
<property name=”usename”value=”sa”/>
<property name=”password”value=”lqaz2wsx”/>
<property name=”maxldle”value=”5”/>
</bean>
(3)基于Spring應用對JavaBean實例的使用。一旦Spring創建,并初始化JavaBean實例后,應用就能夠使用JavaBean實例了,因此,借助于getBean方法,電子商務系統開發者就能夠在應用中進行使用。
(4)IOC容器銷毀JavaBean實例。
<bean id=”dataSourcel”
class=”org.apache.commons.dbcp.BasicDataSource”
destroy-method=”close”>
在不同的事務服務間切換,只會涉及到Spring配置文件的修改,而不會涉及到代碼的修改。
4.B2C系統Hibernate持久化層開發
Hibernate是連接Java對象模型和關系數據模型的橋梁,現在越來越多的Java開發人員把Hibernate作為企業應用和關系數據庫之間的中間件,以節省和對象持久化有關的三層以上的JDBC編程工作量。
(1)系統的Hibernate數據持久層功能實現可通過hibernate-sevice.xml進行Hibernate屬性的設置,設置內容如下:
<server>
<mbean code=”org.jboss.hibernate.jmx.Hibernate” name=”jboss.har:service=Hibernate”>
<attribute name=”DatasourceName”>java:/OracleDS
</attribute>
<attribute name=”Dialect”>net.sf.hibernate.dialect.Oracle9Dialect</attribute>
<attribute name=”SessionFactoryName”>
java:/hibernate/SessionFactory</attribute>
<attribute name=”CacheProviderClass”>
Net.sf.hibernate.cache.HashtableCacheProvider</attribute>
</mbean >
</server>
建立數據持久層時,就可以先為服務器中的數據表定義實體Bean(Entity Bean)了。
(2)Hibernate映射框架根據與每一對實體類和數據表相關的XML映射文件來實現ORM,通過Hibernate中的ant hibernate命令建立了每個實體類的XML文件。每一個描述數據表的實體類都有相應的XML文件,保證執行業務邏輯處理時通過會話Bean調用實體Bean,可以實現對服務器數據庫的無縫訪問。
(3)創建“對象——關系”映射文件。Hibernate采用XML格式的文件來指定對象和關系數據之間的映射,在運行時,Hibernate將根據這個映射文件來生成各種SQL語句。這一步所創建的文件,它用PromotionEvent類映射到PR0M0T10-NEVENT表,這個文件應和PromotionEv-ent.Class文件放在同一目錄下。
(4)通過Hibernate API編寫訪問數據庫的代碼。Hibernate對JDBC進行了封裝,提供了充分面向對象的API。
三、結束語
本文使用了輕量級J2EE架構Struts+Spring+Hibernate對電子商務系統B2C核心系統進行了設計,并分析了各個環節的關鍵技術和實現問題。使用這一技術設計的商務系統很好地把業務邏輯和表示層分離,這種分離使得系統不至于“牽一發而動全身”,同時,也便于業務邏輯模塊的重用。這三種技術結合起來充分利用它們的優勢,使得基于這三種技術的B2C商務系統應用框架開發簡潔、結構清晰,有很好的可擴展性和可維護性,適用于面向對象的設計與開發。另外,本文所開發的B2C電子商務系統特別適用在學校和大型商場等人員密集、且可能發生集中支付的組織內使用。
參考文獻:
[1]李偉鐮盧建朱:基于Struts和Hibernate的電子申購系統[J].計算機工程,2005,31(19):220-222
[2]楊明根鄭明秀廖浩德:Struts+Spring+Hibernate架構及開發方法[J].西南民族大學學報#8226;自然科學版,2007,(4):953-956
[3]廖福保張文梅:基于Struts-I-Spring-I-Hibernate框架的應用研究[J].廣東農工商職業技術學院學報,2007,(11):51-54
[4]李保華:基于Struts+EJB+Hibernate的授信風險管理系統設計[J].計算機與信息技術,2007,(4):87-89
[5]王非丁元林文昌:應用架構技術設計與開發電子商務系統[J].計算機工程與設計,2007(11):5507-5510