張 蕾
(河西學(xué)院信息技術(shù)中心 甘肅 734000)
網(wǎng)上書店系統(tǒng)目前主要是以B2C的方式進(jìn)行經(jīng)營,向讀者出售書籍。本文系統(tǒng)的開發(fā)理念更貼近于消費者,引入C2C的經(jīng)營理念,增加讀者開店的功能,讀者可以將自己不需要的書本或音像資料售給需要它的人,從而吸引更多的消費者,增加用戶粘性,更為書店市場打開一個新的渠道。本系統(tǒng)面向以學(xué)生為主的用戶群體,為他們提供C2C交易的平臺。賣者發(fā)布出售商品的信息,買者也可發(fā)布求購信息。本系統(tǒng)的用戶分為普通用戶、個人店鋪用戶和管理員。通過Struts+Spring+Hibernate架構(gòu)開發(fā)。
系統(tǒng)中主要的角色包括未注冊用戶、已注冊用戶和管理員。
未注冊用戶:該角色可以對系統(tǒng)進(jìn)行最基本的查看、搜索商品操作,如果該角色想進(jìn)行更多操作,則需進(jìn)行用戶注冊操作,成為該交易平臺的會員之一。
已注冊用戶:該角色在未開店之前,角色功能仍是買家,可以進(jìn)行查看/修改個人資料,查看/搜索商品,查看/修改個人收藏夾,查看訂單,購物,留言等操作。而在注冊開店之后,除去買家角色,還增加了個賣家角色,可以上傳自己想賣出的商品,對自己的商品信息進(jìn)行增、刪、改、查等操作,還可以查看有無已購買但未發(fā)貨的商品,并進(jìn)行發(fā)貨確認(rèn)。
管理員:前2個角色主要體現(xiàn)在前臺,而該角色是在后臺中運行,系統(tǒng)管理員可以對下層管理員進(jìn)行注冊和權(quán)限操作,管理員登陸后臺界面后,可以對應(yīng)自己的權(quán)限進(jìn)行操作,主要起到監(jiān)控、管理和中介的作用。用例圖如下:
圖1 用例圖
平臺主要有2個外部實體:用戶和管理員。這兩個實體是存在于軟件本身系統(tǒng)之外的人員,指出了數(shù)據(jù)信息所需要的發(fā)源地或系統(tǒng)所產(chǎn)生的數(shù)據(jù)的歸屬地。而加工之地就是業(yè)務(wù)中心,描述了輸入數(shù)據(jù)流通過業(yè)務(wù)中心的加工處理后變成了輸出數(shù)據(jù)。本系統(tǒng)的具體頂層數(shù)據(jù)流情況如圖
圖2 頂層數(shù)據(jù)流
本系統(tǒng)中所涉及的可以抽象出來的實體模型有用戶(user)、管理員(admin)、商店(shop)、商品(merchandise)、商品類別(kind)、留言(message)、收藏夾(favourite)、訂單(orders)、選購記錄(cartselectedmer)、購物車(cart)、賬戶(account)、公告(affiche),具體的關(guān)系數(shù)據(jù)模型圖如圖。
圖3 關(guān)系數(shù)據(jù)模型圖
用戶在注冊開店之后,除去買家角色,還增加了個賣家角色,可以上傳自己想賣出的商品,對自己的商品信息進(jìn)行增、刪、改、查等操作。
增、刪、改和查四個操作是管理系統(tǒng)中最基本的功能。下面以增加商品為例,分析這個操作在系統(tǒng)中是如何設(shè)計和實現(xiàn)的。
視圖層上,增加商品操作在JSP頁面addMerchandise.jsp中實現(xiàn),當(dāng)?shù)赇佊脩籼町呄胩砑拥纳唐返男畔⒉⑻峤缓?,Struts把用戶輸入的表單數(shù)據(jù)(包括商品的種類、名稱、價格、存貨數(shù)量和描述等商品信息)保存在merchandiseForm Bean中,通過它來進(jìn)行視圖和控制器之間表單數(shù)據(jù)的傳遞。通過在struts-config.xml配置文件中的這段代碼,可以看出merchandiseForm在經(jīng)過validate后把表單數(shù)據(jù)傳送給了Action類MerchandiseAction。
attribute="merchandiseForm" parameter="method"path="/add" type="com.moon.struts.action.MerchandiseAcion" /> 然后,該Action類會調(diào)用MerService的實現(xiàn)類中的addMer()方法來添加商品,saveImage()方法來保存用戶上傳的圖片。保存圖片的代碼如下: //MerchandiseAction類中 FormFile ff = f.getPic();//定義圖片文件,并賦值 boolean res = MerService.saveImage(uploadPath,ff);//保存圖片到磁盤 //MerServiceImpl類中,保存圖片方法 //參數(shù):保存圖片的物理路徑,封裝圖片的文件 public boolean saveImage(String path,F(xiàn)ormFile f){ boolean result = false; //定義返回類型,并賦值為false; try { //定義輸出流對象,并實例化 OutputStream out = new FileOutputStream(new File(path)); byte[]b = f.getFileData();//獲取圖片文件的字節(jié)數(shù); out.write(b); //向磁盤寫入圖片 out.close(); //關(guān)閉輸出流 result = true; } catch(Exception e){ result = false; // TODO Auto-generated catch block e.printStackTrace(); } return result; } 這里的上傳文件用到了struts技術(shù),首先在jsp文件中使用標(biāo)記生成文件上傳控件。由于Struts針對上傳文件進(jìn)行了相應(yīng)的處理,所以,在MerchandiseAction中對上傳文件的訪問也就變得異常簡單了,直接通過MerchandiseForm中所定義的Formfile對象就可以操作用戶所上傳的文件。 通過上面的代碼實現(xiàn)可以看到,通過FormFile對象可以得到用戶上傳文件/圖片的字節(jié)數(shù)。此外,還可以得到文件的名稱、類型,如果是一般文件,還能得到文件的內(nèi)容信息。在本系統(tǒng)實現(xiàn)中,將用戶上傳的文件保存到指定的磁盤上。 因為系統(tǒng)統(tǒng)一使用了struts+spring+hibernate框架,所以這里在編寫代碼時的原則仍不變,即利用Spring框架,方便地把執(zhí)行業(yè)務(wù)邏輯(這里是增加商品)、調(diào)用持久層方法、從表示層獲得用戶請求、進(jìn)行數(shù)據(jù)庫事務(wù)處理和異常處理這幾個任務(wù)通過Bean管理器進(jìn)行管理,使系統(tǒng)可以在最大程度上降低程序的復(fù)雜度和耦合度。Spring通過反轉(zhuǎn)控制(IoC)或者設(shè)置依賴注入(Dependency Injection)將配置在擴展的XML文件中的這些對象聯(lián)系起來,這樣可以自由地創(chuàng)建各種對象以及降低系統(tǒng)的耦合度。 圖4 時序圖 MerchandiseAction類調(diào)用了業(yè)務(wù)邏輯接口的實現(xiàn)類中的方法后,MerServiceImpl實現(xiàn)類分別調(diào)用了MerchandiseDao接口、ShopDao接口和UserDao接口來進(jìn)行實際的添加商品操作。具體的操作是首先由實現(xiàn)后兩個接口的Support類取得添加商品的用戶帳號和商店id信息,然后把這2個參數(shù)傳給MerchandiseDao接口實現(xiàn)類,通過sql語句和Merchandise數(shù)據(jù)表進(jìn)行實際添加操作。如果保存圖片成功且添加商品成功,則會給出成功提示,否則就彈出對話框告知用戶添加失敗,但是不論失敗還是成功,事務(wù)完成后都仍跳轉(zhuǎn)到添加商品頁面。具體時序圖如圖4所示: [1][美]Xin Chen 著,溫昱,靳向陽譯,應(yīng)用框架的設(shè)計與實現(xiàn).電子工業(yè)出版社.2006. [2]陳天河 等著,Struts,Hibernate,Spring集成開發(fā)寶典.電子工業(yè)出版社.2007. [3]陽雪峰,陳文臣著,Java Web 2.0:基于Spring、Struts、Hibernate輕量級架構(gòu)開發(fā).機械工業(yè)出版社.2009. [4]劉乃麗.精通Java EE項目案例.人民郵電出版社.2008.