魏榴花 王輝
摘要:基于Struts2的網(wǎng)上書(shū)城系統(tǒng)是基于Struts2優(yōu)秀框架設(shè)計(jì)出來(lái)的Web軟件項(xiàng)目。該文首先講述了網(wǎng)上書(shū)城系統(tǒng)存在的必要性,接著簡(jiǎn)要的介紹了Struts2框架和MVC設(shè)計(jì)模式,然后闡述了整個(gè)系統(tǒng)的功能模塊設(shè)計(jì)、系統(tǒng)的架構(gòu)設(shè)計(jì)和系統(tǒng)的E-R圖 。最后從校驗(yàn)框架、實(shí)現(xiàn)國(guó)際化、過(guò)濾器的配置等多方面來(lái)闡述用Struts2實(shí)現(xiàn)網(wǎng)上書(shū)城系統(tǒng)的詳細(xì)過(guò)程。
關(guān)鍵詞: Struts2;MVC;E-R圖
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)35-8424-03
Design and Implementation of Online Bookstore Based on Struts2
WEI Liu-hua,WANG Hui
(Department of Electronic & Information, Zhenjiang College, Zhenjiang 212003,China)
Abstract: Online bookstore system based on Struts2 is a Web software project designed from a excellent Struts2 framework. Firstly the reason for online bookstore systems existence is interpreted in this paper, then Struts2 framework and MVC design pattern is simply introduced here, afterwards design of functional module、structural design and Entity-Relationship diagram. Finally processes of implementing online bookstore based on Struts2 are stated form multi-aspects such as validation framework、internationalization implementation、filter allocation and so on.
Key words: Struts2;MVC;Entity-Relationship diagram
因特網(wǎng)在現(xiàn)代人的生活中不可缺少的一部分,很多人都依靠因特網(wǎng)來(lái)協(xié)助完成日常工作。隨著社會(huì)經(jīng)濟(jì)的日益發(fā)展和人民生活水平不斷提高,人們普遍重視對(duì)知識(shí)的追求,閑暇之余在網(wǎng)上購(gòu)買圖書(shū)也逐漸成為一種時(shí)尚。網(wǎng)上書(shū)店將成為信息時(shí)代的重要標(biāo)志和組成部分。因此網(wǎng)上書(shū)店系統(tǒng)應(yīng)運(yùn)而生。
網(wǎng)上書(shū)城系統(tǒng)[1]是電子商務(wù)[2]的一塊重要部分,通過(guò)它可以進(jìn)行在線商品交易。隨著互聯(lián)網(wǎng)的逐漸普及以及電子商務(wù)的發(fā)展和人們購(gòu)物理念與購(gòu)物方式的改變,網(wǎng)上書(shū)城系統(tǒng)將有著巨大的市場(chǎng)潛力.人們不出門(mén)就可以買到想要的圖書(shū),已成為現(xiàn)實(shí)。將來(lái)的網(wǎng)上書(shū)店系統(tǒng)無(wú)所不在,彼此關(guān)聯(lián),具有交互性和智能化的特征。
1 Struts2簡(jiǎn)介
Struts2[3][4]本身主要是基于另外一個(gè)框架:Webwork[5],原理和配置文件和WebWork非常相似,也就是說(shuō)Struts2整個(gè)代碼的根基都是基于WebWork的。Struts2框架本身比Struts1框架優(yōu)秀的多,而且在代碼的編寫(xiě)方式上或者在配置文件的編寫(xiě)方式上都更加清晰,冗余度更加小,而且Struts2還支持?jǐn)U展。
本系統(tǒng)應(yīng)用了Struts2框架采用了MVC[6](Model+View+Controller)的設(shè)計(jì)模式,而MVC設(shè)計(jì)模式的優(yōu)點(diǎn)如下:
①首先最重要的一點(diǎn)是多個(gè)視圖能共享一個(gè)模型,同一模型能夠被不同的視圖重用,大大提高了代碼的可重用性。
②由于MVC的三個(gè)模塊相互獨(dú)立,改變其中一個(gè)不會(huì)影響其他兩個(gè),所以依據(jù)這種設(shè)計(jì)思想,能構(gòu)造良好的松耦合構(gòu)件。
③控制器提高了應(yīng)用程序的靈活性和可配置性,控制器用來(lái)聯(lián)接不同的模型和視圖去完成用戶的需求,這樣控制器可以為構(gòu)造應(yīng)用程序提供強(qiáng)有力的手段。
2 系統(tǒng)總體設(shè)計(jì)
2.1 系統(tǒng)的功能模塊
本系統(tǒng)是在Windows操作系統(tǒng)下,以MySql作為數(shù)據(jù)庫(kù)開(kāi)發(fā)平臺(tái),使用結(jié)構(gòu)化查詢語(yǔ)言進(jìn)行增刪改查操作,以Tomcat6.0作為Web服務(wù)器,以MyEclipse 6.5為開(kāi)發(fā)軟件進(jìn)行開(kāi)發(fā)的。網(wǎng)上書(shū)城系統(tǒng)主要分為首頁(yè)、用戶管理、購(gòu)物車管理、訂單管理、注銷和安全退出六大模塊。用戶管理模塊包括用戶注冊(cè)、用戶登錄、修改用戶信息、顯示用戶信息四個(gè)子模塊,其中在用戶注冊(cè)子模塊,要采用校驗(yàn)框架對(duì)用戶輸入的各項(xiàng)注冊(cè)信息進(jìn)行校驗(yàn),如果校驗(yàn)出錯(cuò),則顯示Field級(jí)別的Error給用戶以提示。網(wǎng)上書(shū)城的系統(tǒng)模塊圖如圖1所示。
2.2 系統(tǒng)架構(gòu)說(shuō)明
我們整個(gè)系統(tǒng)的架構(gòu)分為表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問(wèn)層和資源層。表現(xiàn)層只要有表示視圖的一些JSP或者HTML視圖所組成,然后這些頁(yè)面的請(qǐng)求直接提交給對(duì)用的Action。這里的Service有一個(gè)接口和一個(gè)實(shí)現(xiàn)類,Action依賴的是Service接口,DAO中的方法都是一些原子的方法,一個(gè)Service( ) 方法可能會(huì)包含好幾個(gè)DAO方法,把它們放在一個(gè)Context中,最后commit失敗的話就rollback.網(wǎng)上書(shū)城的系統(tǒng)架構(gòu)如下圖所示:
我們?cè)谠O(shè)計(jì)業(yè)務(wù)邏輯層時(shí),購(gòu)物車的信息保存的Session中,在提交訂單的時(shí)候才進(jìn)入到數(shù)據(jù)庫(kù)。購(gòu)物車的信息可以使用Map來(lái)表示。其中: K 為Product,V為數(shù)量,Product作為Key的話需要重寫(xiě)equals和hashCode方法,修改了產(chǎn)品的數(shù)量后,要立刻計(jì)算產(chǎn)品的總額。(Ajax/DWR的應(yīng)用)。業(yè)務(wù)邏輯層為以下幾方面:
1) 向購(gòu)物車添加一個(gè)產(chǎn)品
public void addProduct(Product product,String productId);
2) 在購(gòu)物車中刪除一個(gè)產(chǎn)品
public void removeProduct(Integer productId);
3) 修改購(gòu)物車中一個(gè)產(chǎn)品的數(shù)量
public void updateProduct(Integer productId, int quantity);
4) 清空購(gòu)物車
public void clearCart();
5) 查詢購(gòu)物車所有產(chǎn)品信息
public List findAllProducts();
2.3 系統(tǒng)E-R圖
本系統(tǒng)的E-R圖如下所示,其中ContactInfo類是用戶詳細(xì)信息類,User類是用戶類,ShopCat類是購(gòu)物車類,PayWay類是支付方式類,Order類是訂單類,OrderLine類是訂單項(xiàng)類,Product類是產(chǎn)品類,Category類是產(chǎn)品分類類,OrderStatus類是訂單狀態(tài)類。
圖3 網(wǎng)上書(shū)城系統(tǒng)E-R圖
3 設(shè)計(jì)與實(shí)現(xiàn)
3.1 校驗(yàn)框架
我們?cè)谟脩糇?cè)界面,為了判別用戶輸入信息的有效性,采用Struts2提供的校驗(yàn)框架來(lái)實(shí)現(xiàn)對(duì)用戶在注冊(cè)界面輸入信息的合法性,那么我們的校驗(yàn)文件按照校驗(yàn)框架命名規(guī)則命名為RegistAction-validation.xml,并且該XML校驗(yàn)文件要和RegistAction在同一個(gè)包中。校驗(yàn)框架的代碼如下:
//省略其他字段的校驗(yàn)
我們的注冊(cè)頁(yè)面采用的也是Struts2標(biāo)簽,自動(dòng)提交出FieldError級(jí)別的錯(cuò)誤,F(xiàn)ieldError級(jí)別的錯(cuò)誤信息底層是用LinkedHashMap實(shí)現(xiàn)的,該Map的key是String類型,value是List
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse resp=(HttpServletResponse)response;
HttpSession session=req.getSession();
String requestURI=req.getRequestURI();
if(requestURI.endsWith("login.jsp") ||requestURI.endsWith("UserLoginServlet"))
{
chain.doFilter(request,response);
return; }
if(null==session.getAttribute("user"))
{resp.sendRedirect("session/login.jsp");}
else{
chain.doFilter(request,response);}}
public void init(FilterConfig arg0) throws ServletException {
} }
3.4 創(chuàng)建實(shí)體類
本系統(tǒng)的E-R圖中對(duì)應(yīng)的實(shí)體類,他們的屬性與數(shù)據(jù)庫(kù)表字段一一對(duì)應(yīng),并提供setter和getter方法,本系統(tǒng)選擇的是JDBC技術(shù)配置映射。例如訂單項(xiàng)類(OrderLine類)可以表述如下:
Package org.model;
public class OrderLine{
private int id;
private Order order;
private Product product;
private int amount;
// 省略上述屬性的get 和set方法}
我們?cè)诔绦蛑蝎@取到數(shù)據(jù)后把它插入到數(shù)據(jù)庫(kù)時(shí),數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)時(shí),也有自己的編碼格式,這就要求我們把數(shù)據(jù)庫(kù)中的編碼格式和頁(yè)面程序的編碼格式都統(tǒng)一定為utf-8.
4 結(jié)束語(yǔ)
本文從Struts2框架開(kāi)始,闡述了 Struts2框架的基本原理和MVC設(shè)計(jì)模式的優(yōu)點(diǎn),最后描述了實(shí)現(xiàn)該系統(tǒng)的具體的Struts2技術(shù)細(xì)節(jié)和過(guò)程。結(jié)果證明,用Struts2框架可以有效地進(jìn)行網(wǎng)上書(shū)城系統(tǒng)的開(kāi)發(fā)。
參考文獻(xiàn):
[1] 曹蘊(yùn).基于MVC模式的STRUTS框架在網(wǎng)上購(gòu)書(shū)系統(tǒng)中的應(yīng)用[D].天津:天津大學(xué),2006.
[2] 丁毅.網(wǎng)上書(shū)店電子商務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].濟(jì)南:山東大學(xué),2005.
[3] 李剛.輕量級(jí)Java EE 企業(yè)級(jí)應(yīng)用實(shí)戰(zhàn)——Struts 2+Spring3+Hibernate 整合開(kāi)發(fā)[M].3版.北京:電子工業(yè)出版社,2011.
[4] 孫鑫.Struts2深入詳解[M].北京:電子工業(yè)出版社,2008.
[5] 唐蕓,周學(xué)君,彭代軍.基于WebWork框架的數(shù)據(jù)持久化實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2007(5).
[6] Jim Fu. MVC 設(shè)計(jì)模式:將 Web 應(yīng)用分三層,來(lái)源:中國(guó)計(jì)算機(jī)報(bào) 軟件與服務(wù)[EB/OL].(2003-06).http://product.ccidnet.com/page?action=stockart&articleID=50229&columnID=1668.