摘要:該文首先對網(wǎng)上超市系統(tǒng)進(jìn)行了需求分析,給出了相應(yīng)的功能模塊;其次介紹了SSH整合框架相關(guān)技術(shù);最后講解了SSH框架在網(wǎng)上超市系統(tǒng)中的具體應(yīng)用。
關(guān)鍵詞:Struts2; Spring; Hibernate; MVC
中圖分類號:TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號:1009-3044(2009)35-9957-02
Studies of on-line Supermarket System Based on SSH
ZHENG Bu-qin1,2, JIANG Li-qun1, ZHANG Yu-hui2
(1.College of Computer Science, China University of Mining and Technology, Xuzhou 221008, China; 2.Suqian College, Suqian 223800, China)
Abstract: This essay, firstly,through requirement analysis of the on-line supermarket system, gives the system functional modules, Secondly, introduces the related technologies of the SSH’s integrated framework,F(xiàn)inally , explains the detailed application of the Integrated framework in the on-line supermarket system.
Key words: struts2; spring; hibernate; MVC
隨著Internet的不斷發(fā)展,網(wǎng)上購物已成為一種時(shí)尚。電子商務(wù)的雙向信息溝通給消費(fèi)者提供了更多選擇,靈活的交易手段為用戶帶來了更好的便利性。網(wǎng)上超市就是一個(gè)典型的電子商務(wù)系統(tǒng)。網(wǎng)上超市經(jīng)營者可以以最快的速度將商品分類和上架。用戶可以不受時(shí)間和空間的限制,查看檢索商品的信息和購買商品。這種快速便利的交易方式,大大提高了企業(yè)的生產(chǎn)效益,降低了企業(yè)成本,有助于企業(yè)更快更好的發(fā)展。
1網(wǎng)上超市的總體分析和設(shè)計(jì)
1.1網(wǎng)上超市的需求分析
對于傳統(tǒng)超市,消費(fèi)者購物,挑選、交換、比較購買商品。超市管理員要對商品進(jìn)貨、分類和統(tǒng)計(jì),對過期商品要進(jìn)行相應(yīng)的處理。網(wǎng)上超市不同于傳統(tǒng)超市,但也應(yīng)能完成普通超市的一般功能。網(wǎng)上超市用戶可以分成兩種類型,一類是一般會(huì)員可以注冊更改用戶信息,查看和檢索商品信息、購買商品。一類是系統(tǒng)管理員,可以對會(huì)員信息進(jìn)行管理,可以對商品進(jìn)行增加、分類和統(tǒng)計(jì)。
1.2 網(wǎng)上超市的功能設(shè)計(jì)
根據(jù)需求分析可知,可以將網(wǎng)上超市系統(tǒng)可以分為前臺(tái)用戶模塊和后臺(tái)管理模塊。前臺(tái)用戶模塊可以分為:會(huì)員登錄注冊、商品瀏覽、商品查找、購物車、訂單查詢。后臺(tái)管理員管理模塊可以分為:會(huì)員管理、商品管理、訂單管理。功能模塊圖如圖1所示
商品管理:可以對商品查看、分類,增加、刪除、修改、統(tǒng)計(jì)等功能。
購物車管理:會(huì)員可以將選購商品放入購物車,同時(shí)還可以對購物車?yán)锏纳唐愤M(jìn)行修改和刪除,確認(rèn)購物后可以生成訂單。
會(huì)員管理:可以查看、修改、刪除用戶,及進(jìn)行身份認(rèn)證。
訂單管理:用戶可查詢訂單信息,管理員根據(jù)情況修改訂單。
2 系統(tǒng)的相關(guān)技術(shù)
2.1 MVC模式
MVC這個(gè)概念是由SmallTalk開發(fā)社區(qū)提出來的,它是第一個(gè)分開表示邏輯和業(yè)務(wù)邏輯的設(shè)計(jì)模式。MVC引入View視圖(表示層)、Model模型(數(shù)據(jù))和協(xié)調(diào)兩者的Controller控制器。在MVC模式下,在客戶端用戶通過表單等手段和視圖進(jìn)行交互,確認(rèn)后將事件傳給控制器??刂破髟谑盏绞录髮κ录M(jìn)行初步處理,選擇發(fā)給哪一個(gè)模型,通知該模型層進(jìn)行相應(yīng)的更行。模型更新后將更新的結(jié)果再反饋給視圖,進(jìn)而最后再向用戶反饋。如圖2所示 。
MVC設(shè)計(jì)模式是一種用于分離數(shù)據(jù)維護(hù)和數(shù)據(jù)表現(xiàn)的方法,在J2EE中引入MVC設(shè)計(jì)模式,有助于把應(yīng)用劃分為合理的組件,從而可以方便的進(jìn)行系統(tǒng)的開發(fā)、維護(hù)和擴(kuò)充[1]。
2.2 Struts框架
Struts是基于Sun公司J2EE平臺(tái)的MVC框架。Struts框架完全采用Java語言編寫,在編寫時(shí)調(diào)用了標(biāo)準(zhǔn)的J2EE API,因此具有“一次編寫,隨處運(yùn)行”的優(yōu)點(diǎn)。同時(shí),它繼承了MVC設(shè)計(jì)模式的各種特性。Struts基本組件包括控制器組件、模型組件和視圖組件。Struts的控制器組件負(fù)責(zé)接收用戶請求、更新模型、以及選擇合適的視圖組件返回給用戶??刂破鹘M件有組于分離模型層和視圖層,有了這種分離,就可以在同一個(gè)模型的基礎(chǔ)上開發(fā)多種類型的視圖。Struts把Servlet、JSP和自定義標(biāo)簽和信息資源整合到一個(gè)統(tǒng)一的框架中,開發(fā)人員利用其進(jìn)行開發(fā)時(shí),不再自己編寫全套的MVC模式,極大地節(jié)省了時(shí)間。
2.3 Hibernate框架
Hibernate框架是一個(gè)面向Java開發(fā)平臺(tái)的對象/關(guān)系數(shù)據(jù)庫映射工具,并且是開源的O/R Mapping框架。Hibernate使Java程序員可以隨心所欲地使用對象思想來操作數(shù)據(jù)庫,提供了數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,可以大幅度減少開發(fā)時(shí)人工使用SQL和JDBC處理數(shù)據(jù)的時(shí)間,使開發(fā)人員專注于應(yīng)用程序的對象和功能,而不必?fù)?dān)心如何保存它們或如何找到它們[2]。
2.4 Spring框架
Spring框架是一個(gè)開放源碼的應(yīng)用程序框架,是惟一處理典型的J2EE應(yīng)用程序所有結(jié)構(gòu)層的,也是惟一提供輕量級容器連同全方面服務(wù)的。Spring包含了控制反轉(zhuǎn)的容器,面向方面編程的框架,數(shù)據(jù)訪問的抽象,DBC的簡化,事務(wù)管理,MVC Web框架,與JNDI、JTA和其它J2EE API 合作化的簡化,輕量級的遠(yuǎn)程處理等模塊。Spring與Struts、Hibernate等單層框架不同,Spring致力于以一致的、高效的方式構(gòu)造整個(gè)應(yīng)用程序,將單層框架的最佳組合糅合在一起建立一個(gè)連貫的體系結(jié)構(gòu)[3]。
3 SSH框架
3.1 SSH框架思想
根據(jù)前面對Struts2、Spring和Hibernate三個(gè)框架的分析,利用其在不同層次上的應(yīng)用特點(diǎn),網(wǎng)上超市系統(tǒng)可以采用多層架構(gòu)模式,從上到下依次為表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久化層和域模型層,如圖2 所示。采用Struts來實(shí)表示層,主要是struts擁有完善的標(biāo)簽庫和對MVC模式的良好實(shí)現(xiàn)。Hibernate來實(shí)現(xiàn)數(shù)據(jù)持久層,主要是Hibernate通過一種對象和數(shù)據(jù)庫中的關(guān)系表的映射機(jī)制實(shí)現(xiàn)了真正的面向?qū)ο缶幊?。Spring是基于IoC和AOP的框架,具有良好的模塊化,Spring能有效地組織中間層對象,易于同其他View框架無縫集成,將各種專用框架整合成一個(gè)連貫的整體構(gòu)架。
表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久化層和域模型層,這四層之間的依賴關(guān)系是自上而下的,即上層可以依賴下層,而下層不應(yīng)對上層有依賴或盡量減少對上層的依賴。例如,在系統(tǒng)中使用Hibernate來實(shí)現(xiàn)持久化層,若要采用其他機(jī)制實(shí)現(xiàn)持久化層,不需要改動(dòng)業(yè)務(wù)邏輯中的代碼。
3.2 SSH框架的整合
1) Struts和Spring 整合
Struts和Spring 整合有多種手段,本系統(tǒng)里采用的是把Spring作為Struts的一個(gè)插件實(shí)現(xiàn)的。通過Struts的配置文件配置的,如下所示:
2) Spring和Hibernate的整合
Spring和Hibernate的整合是在Spring配置Session工廠實(shí)現(xiàn)的。Spring對Hibernate的SessionFactory事務(wù)管理進(jìn)行了封裝,使得開發(fā)人員能夠更簡潔的應(yīng)用Hibernate。通過Spring的配置文件配置的,如下所示:
<!-- 數(shù)據(jù)映射配置 – ->
3.3 SSH 在網(wǎng)上超市的系統(tǒng)中的實(shí)現(xiàn)
網(wǎng)上超市系統(tǒng)由會(huì)員注冊登錄、商品瀏覽查詢、我的購物車等部分組成。由前分析可知SSH架構(gòu)將系統(tǒng)分為表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久化層和域模型層四層結(jié)構(gòu),鑒于篇幅有限,下面我們以會(huì)員管理模塊為例講解SSH的各個(gè)層次在系統(tǒng)中的具體實(shí)現(xiàn)。
3.3.1 域模型層
域模型層,主要完成關(guān)系表和類對象之間映射的建立。在Hibemate數(shù)據(jù)持久化解決方案中,數(shù)據(jù)訪問層主要包括一個(gè)與數(shù)據(jù)庫表對應(yīng)的持久化對象 (Persistentobject,簡稱PO)和一個(gè)描述數(shù)據(jù)庫表與PO映射關(guān)系的資源文件*.hbm.xml,這樣,以后對數(shù)據(jù)庫表的操作也就變成了對這些POJO的操作。
1) 持久化對象(Persistentobject)
持久化對象(Persistentobject)是介于具體應(yīng)用和數(shù)據(jù)庫之間的一層數(shù)據(jù),負(fù)責(zé)應(yīng)用和數(shù)據(jù)庫之間的交互。持久化對象用來維護(hù)數(shù)據(jù)庫表的記錄,它是一個(gè)完全符合JavaBean規(guī)范的純Java對象,屬性通過getter和setter方法訪問,對外隱藏了內(nèi)部實(shí)現(xiàn)的細(xì)節(jié)。
會(huì)員管理需要涉及會(huì)員信息表(user),該表包含會(huì)員ID、會(huì)員名稱、密碼等信息。下面我們給出User.java文件
public class User {private Long id;
/*會(huì)員表中其它字段*/
public Long getId() { return id;}
public void setId(Long id) { this.id = id;}
/*其它getter和setter方法*/}
2) 0/R映射文件
下面是以會(huì)員信息User實(shí)體為例,講解映射文件描述數(shù)據(jù)庫表字段與持久化類的屬性的映射關(guān)系,如代碼示例所示。
User.hbm.xml代碼
/*在持久化類User和表User之間映射關(guān)系。下面進(jìn)行的是在持久化類User的屬性和表User的字段建立一一對應(yīng)的映射。 */
/*其它持久化類的屬性和表的字段的一一映射*/
3.3.2 數(shù)據(jù)持久層實(shí)現(xiàn)
數(shù)據(jù)持久層使用數(shù)據(jù)訪問對象(Data Access Object,簡稱是DAO)來抽象和封裝所有對數(shù)據(jù)源的訪問。
DAO主要是實(shí)現(xiàn)對持久化類的插入、查詢、更新、刪除操作。一般一個(gè)持久化對象使用一個(gè)獨(dú)立的DAO接口和一個(gè)對接口的實(shí)現(xiàn),下面是會(huì)員管理中的會(huì)員信息的DAO對其接口的具體實(shí)現(xiàn),代碼如下所示。
UserDAOIpml.java代碼
public class UserDAOImpl extends HibernateDaoSupport implementsUserDAO
{@SuppressWarnings(\"unchecked\")
public List
{/*將用戶信息按升序顯示*/}
/* 其他操作*/}
3.3.3 表示層實(shí)現(xiàn)
表示層是Web應(yīng)用系統(tǒng)與用戶交互的窗口,負(fù)責(zé)管理用戶的請求和響應(yīng),并提供一個(gè)控制器將調(diào)用委托到業(yè)務(wù)邏輯和其他上游處理,包括視圖部分和控制部分,具體是指JSP頁面,以及對客戶請求進(jìn)行處理的自定義Action等部分。
1) 控制器Action:Action充當(dāng)了控制器的角色,用于頁面邏輯處理,分發(fā)數(shù)據(jù),鏈接轉(zhuǎn)向。會(huì)員管理中的顯示所有用戶頁面邏輯處理類功能都放在listUser.java文件中。
public class ListUser extends ActionSupport{}
2) 視圖:視圖簡單的說就是用戶所看到的JSP頁面。本系統(tǒng)中,頁面采用了Struts標(biāo)簽。會(huì)員管理涉及諸多的頁面,如會(huì)員的添加、修改、刪除、等頁面,因代碼比較長,我們就不在此列出。
3) Struts.xml配置:顯示所有用戶信息的Action在Struts.xml配置文件的配置代碼如下所示
3.3.4 業(yè)務(wù)邏輯層實(shí)現(xiàn)
業(yè)務(wù)邏輯是整個(gè)系統(tǒng)中比較復(fù)雜的部分,可以說是一個(gè)核心部分。業(yè)務(wù)處理代碼主要包括xxxservice接口與其實(shí)現(xiàn)類xxxserviceImpl。例如會(huì)員管理的業(yè)務(wù)邏輯代碼UserService接口和其實(shí)現(xiàn)類UserserviceImpl構(gòu)成。UserService接口定義了針對問題信息的相關(guān)業(yè)務(wù)操作,具體實(shí)現(xiàn)則由UserServiceImpl完成。
下面給出顯示所有會(huì)員信息action在配置文件applicationContext.xml中的配置代碼:
4 總結(jié)
利用J2EE中的Struts2+Spring+Hibernate的輕量級框架實(shí)現(xiàn)MVC模式是當(dāng)前比較流行的一種技術(shù)。該整合框架能夠很好的將網(wǎng)上超市系統(tǒng)分成表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久化層和模域?qū)?。Struts框架應(yīng)用在表示層的框架,用于完成表現(xiàn)層的表現(xiàn)邏輯和業(yè)務(wù)邏輯;Hibernate框架應(yīng)用在數(shù)據(jù)持久化層,實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫的對象化;Spring框架應(yīng)用于各層關(guān)聯(lián),完成持久訪問對象的注入和業(yè)務(wù)邏輯的事務(wù)管理。通過這種分層處理,使得系統(tǒng)系統(tǒng)的結(jié)構(gòu)清晰,各層次之間獨(dú)立,模塊劃分明確,降低了MVC設(shè)計(jì)難度,提高了系統(tǒng)的開發(fā)效率。
參考文獻(xiàn):
[1]李金娟.基于JSP的MVC開發(fā)模式在訪問數(shù)據(jù)庫中的應(yīng)用[J].寧夏師范學(xué)院學(xué)報(bào),2008(3).
[2] 楊少波.J2EE項(xiàng)目實(shí)訓(xùn)-Hibernate框架技術(shù)[M].北京:清華大學(xué)出版,2008.
[3] 張恒汝.精通Eclipse整合Web開發(fā)[M].北京:人民郵電出版社,2008.