一、概述?
??? 本文主要闡述了基于motorola388 手機(jī)的手機(jī)購(gòu)物系統(tǒng)的設(shè)計(jì)思想和實(shí)現(xiàn)原理。該系統(tǒng)是桌面型客戶(hù)關(guān)系管理系統(tǒng)在智能移動(dòng)終端上的擴(kuò)展,應(yīng)用于廣大的手機(jī)用戶(hù)(包括個(gè)人用戶(hù)及企業(yè)級(jí)用戶(hù))。手機(jī)購(gòu)物打破傳統(tǒng)的購(gòu)物理念,人們不必親自去商場(chǎng)選購(gòu)商品,可以通過(guò)手機(jī)的服務(wù)實(shí)現(xiàn)隨時(shí)隨地購(gòu)買(mǎi)商品,享受服務(wù)。系統(tǒng)開(kāi)發(fā)時(shí),我們采用了Java 無(wú)線(xiàn)應(yīng)用技術(shù)(參見(jiàn)『1』),在J2ME(CLDC+MIDP) + JSP平臺(tái)上實(shí)現(xiàn)企業(yè)級(jí)的多層分布式體系架構(gòu),并利用XML 技術(shù)進(jìn)行數(shù)據(jù)傳輸和交換。?
二、需求分析?
◆??系統(tǒng)需求?
??? 本系統(tǒng)是一個(gè)純Java解決方案的End2End的移動(dòng)商務(wù)(m-Commerce)系統(tǒng),它以無(wú)線(xiàn)的方式向用戶(hù)提供商品的購(gòu)買(mǎi)和相關(guān)的一系列服務(wù)。該系統(tǒng)限于支持Java的手機(jī)用戶(hù)使用。?
??? 為提高商家的服務(wù)項(xiàng)目及服務(wù)質(zhì)量,滿(mǎn)足客戶(hù)的需求,以人為本,使人感到方便快捷,達(dá)到隨時(shí)隨地購(gòu)買(mǎi)商品,享受服務(wù)。使用的開(kāi)發(fā)工具及軟件:J2SDK1.3.1 + JBuilder7 + J2Mewtk1.0.3 + jakarta-tomcat-4.0 + Access。?
◆??客戶(hù)需求分析?
●??購(gòu)買(mǎi)商品,滿(mǎn)足客戶(hù)需要?
●??提供送貨上門(mén)服務(wù),方便客戶(hù)?
●??提供餐飲食品即食服務(wù)?
◆??運(yùn)營(yíng)設(shè)想?
??? 目前有很多很成功的辦理即食餐飲業(yè)服務(wù)的公司,例如startbucks(星巴克)『2』,他們的運(yùn)營(yíng)方式很值得借鑒:?
??? (1)注冊(cè):用戶(hù)首先通過(guò)網(wǎng)絡(luò)注冊(cè),包括用戶(hù)信息注冊(cè)以及匯預(yù)付款(或者用招商銀行一卡通網(wǎng)上轉(zhuǎn)帳)。由于目前國(guó)內(nèi)支付方式的限制,預(yù)付款是一個(gè)很好的負(fù)費(fèi)解決方案,用一卡通直接轉(zhuǎn)帳也是方案之一。?
??? (2)購(gòu)買(mǎi):用戶(hù)完成注冊(cè)后即可通過(guò)無(wú)線(xiàn)客戶(hù)端進(jìn)行商品的購(gòu)買(mǎi),尤其是食品,滿(mǎn)足客戶(hù)在任何地點(diǎn)享受餐飲服務(wù)的需要。為方便用戶(hù),可選擇上次所購(gòu)買(mǎi)的商品,簡(jiǎn)潔快速,縮短客戶(hù)的選購(gòu)時(shí)間??蛻?hù)既可以通過(guò)手機(jī)連接到網(wǎng)絡(luò),進(jìn)行選購(gòu),也可以通過(guò)PC機(jī),登陸到服務(wù)商的網(wǎng)站上,進(jìn)行商品的選購(gòu)。?
三、系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)?
??? 考慮到系統(tǒng)的安全性、擴(kuò)展性和可維護(hù)性,我決定在 JSP 平臺(tái)下開(kāi)發(fā)服務(wù)器端程序,這樣做的復(fù)雜度低,成本低,系統(tǒng)性能優(yōu)越。系統(tǒng)客戶(hù)端是運(yùn)行在motorola388 手機(jī)上的,因此必須充分考慮其特點(diǎn),并在開(kāi)發(fā)中加以應(yīng)用。也可考慮使用其他型號(hào)的手機(jī),只要支持Java技術(shù)。系統(tǒng)設(shè)計(jì)的目標(biāo)是分開(kāi)數(shù)據(jù)庫(kù)、業(yè)務(wù)邏輯層和表示層,是一個(gè)典型的三層構(gòu)架模式。如下圖所示:?
?????????????
??? 下文將對(duì)其設(shè)計(jì)思想和實(shí)現(xiàn)原理進(jìn)行詳細(xì)闡述。?
1.客戶(hù)端?
??? 客戶(hù)端獲得用戶(hù)請(qǐng)求并提交遠(yuǎn)程服務(wù)器,得到結(jié)果并加以表現(xiàn)??蛻?hù)端分為兩部分,一部分是在手機(jī)上運(yùn)行的,另一部分是在電腦的瀏覽器上運(yùn)行的。中間通過(guò)HTTP協(xié)議與服務(wù)器端連接。我選擇在J2ME(CLDC+MIDP)平臺(tái)上開(kāi)發(fā)客戶(hù)端程序,由于MIDlet 程序開(kāi)發(fā)具有內(nèi)存小、界面簡(jiǎn)單、有限的運(yùn)算能力和網(wǎng)絡(luò)性能等特點(diǎn),需要重點(diǎn)設(shè)計(jì)以下幾個(gè)方面:?
??? ①?與服務(wù)器之間的通信?
??? J2ME 支持打開(kāi)網(wǎng)絡(luò)連接并傳送數(shù)據(jù),訪(fǎng)問(wèn)遠(yuǎn)程服務(wù)器資源。首先,用戶(hù)在離線(xiàn)方式下設(shè)置系統(tǒng)參數(shù),指定本公司W(wǎng)eb服務(wù)器的IP地址、端口和Web根目錄,選擇工作方式。隨后,程序把相關(guān)信息寫(xiě)進(jìn)本地?cái)?shù)據(jù)庫(kù)。每當(dāng)系統(tǒng)啟動(dòng)或者切換工作方式時(shí)加載,使得MIDlet工作在適當(dāng)?shù)臓顟B(tài)。?
MIDlet 編程支持Http 網(wǎng)絡(luò)連接『3』:?
HttpConnection conn = (HttpConnection)Connector.open(url);?
??? 這樣就在客戶(hù)端與服務(wù)器之間建立了Http連接,其中url存儲(chǔ)了請(qǐng)求參數(shù)信息,比如:?
url = “http://www.mcrm.com:8000/CRMRoot/custCreateAlias?id=001&name=…”?
??? 服務(wù)器中相應(yīng)的servlet將調(diào)用doGet()方法處理請(qǐng)求,返回響應(yīng),從而把業(yè)務(wù)邏輯的處理交給了服務(wù)器端,達(dá)到了“瘦”客戶(hù)端的設(shè)計(jì)目標(biāo)。建好Http連接以后,就可以方便的操作數(shù)據(jù)流,進(jìn)行數(shù)據(jù)讀寫(xiě)了:?
InputStream in = conn.openInputStream();?
int data;?
while (data=in.read()!=0){…} …?
??? 客戶(hù)端編程的重點(diǎn)在于準(zhǔn)確地提交用戶(hù)請(qǐng)求參數(shù):查詢(xún)商品信息、所選的商品情況、地址信息和服務(wù)請(qǐng)求等,并可對(duì)查詢(xún)到的結(jié)果進(jìn)行更新、選擇。?
??? ② XML解析?
??? XML(Extensible Markup Language)是一種獨(dú)立于系統(tǒng)的表達(dá)數(shù)據(jù)信息的標(biāo)記語(yǔ)言,現(xiàn)已成為網(wǎng)絡(luò)系統(tǒng)中通用的數(shù)據(jù)交換格式。本系統(tǒng)采用XML技術(shù)進(jìn)行數(shù)據(jù)交換,利用它的分級(jí)結(jié)構(gòu),很容易訪(fǎng)問(wèn)到所需的數(shù)據(jù)信息。這就意味著想要取得遠(yuǎn)程服務(wù)器端XML文檔中的數(shù)據(jù)信息,MIDlet編程就必須支持XML解析技術(shù)。從網(wǎng)上不難得到J2ME端的XML解析器。由于手機(jī)上沒(méi)有XML解析器,且手機(jī)的資源非常有限,本系統(tǒng)采用的是較小的KXML解析器,它是一種非確認(rèn)(non-validating)、單步(single-step)的解析器。KMXL解析整個(gè)XML文檔并把它轉(zhuǎn)換成一棵元素樹(shù),可以通過(guò)調(diào)用方法getChildren、getTagName、getContents 等來(lái)遍歷整棵樹(shù),得到數(shù)據(jù)信息。服務(wù)器端用JSP來(lái)接收參數(shù),使用一個(gè)BEAN來(lái)封裝對(duì)數(shù)據(jù)庫(kù)的操作?
2.表示層?
??? Servlets和JavaBeans構(gòu)成了表示層。這是一種控制結(jié)構(gòu),減低了視圖與模型之間的耦合性。當(dāng)Servlet響應(yīng)到一個(gè)HTTP GET 請(qǐng)求時(shí),doGet()方法被service()方法的默認(rèn)實(shí)現(xiàn)所調(diào)用,并把request對(duì)象和response對(duì)象作為參數(shù)傳給該函數(shù)。程序覆蓋了doGet()方法,所做主要工作是創(chuàng)建JavaBeans實(shí)例,傳遞request對(duì)象,調(diào)用bean方法,取得存放于bean中的數(shù)據(jù),返回結(jié)果(XML 文檔)。JavaBeans封裝了更為復(fù)雜的業(yè)務(wù)邏輯Application,Server,JDBC,CommodityList方法執(zhí)行各種數(shù)據(jù)存取的事務(wù)。它是一種可重用組件,提高代碼復(fù)用性,加快了軟件開(kāi)發(fā)過(guò)程。如上所述,系統(tǒng)利用JAXP和W3C『4』提供的訪(fǎng)問(wèn)XML的接口DOM來(lái)處理XML文檔。?
3.業(yè)務(wù)邏輯層?
??? 目前,業(yè)務(wù)邏輯層僅用了JSP,JavaBeans,Servlet來(lái)實(shí)現(xiàn),以后將升級(jí)為EJB的版本。主要完成客戶(hù)端與服務(wù)器端的連接及數(shù)據(jù)處理問(wèn)題,包括客戶(hù)申請(qǐng)服務(wù),驗(yàn)證客戶(hù)提交的信息是否符合格式要求,處理客戶(hù)提交的請(qǐng)求,返回客戶(hù)信息,上次的商品購(gòu)買(mǎi)信息及商品列表,客戶(hù)選擇后,將所選商品列表及所在地址發(fā)送到服務(wù)器端,最后由服務(wù)器端確認(rèn)后,完成這一系列的操作。?
??? 業(yè)務(wù)邏輯層包括用XML進(jìn)行數(shù)據(jù)的傳輸,用Servlet實(shí)現(xiàn)。從數(shù)據(jù)庫(kù)中得到所需數(shù)據(jù),將其以XML的格式輸出,并不需要建立具體的XML文件。用XML傳輸數(shù)據(jù)也便于客戶(hù)端的接收,是數(shù)據(jù)的傳輸統(tǒng)一規(guī)范。?
4.?dāng)?shù)據(jù)庫(kù)?
??? 數(shù)據(jù)庫(kù)端我使用的是Microsoft Access,利用SUN公司提供的JDBC API可以很方便地操作關(guān)系型數(shù)據(jù)庫(kù)(RDBMS),如上所述,JavaBeans要與數(shù)據(jù)庫(kù)表建立了一種良好的映射關(guān)系,設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)要注意主鍵值,它是唯一標(biāo)識(shí)。?
??? 本系統(tǒng)數(shù)據(jù)庫(kù)共建立了三張表,見(jiàn)下表:?
???????
??? 在整個(gè)開(kāi)發(fā)周期中,需不斷精化和細(xì)化用戶(hù)需求,改進(jìn)用例與建模,改變數(shù)據(jù)庫(kù)中的表,迭代構(gòu)造和測(cè)試,使系統(tǒng)趨于完善。?
四、結(jié)束語(yǔ)?
利用Java無(wú)線(xiàn)應(yīng)用技術(shù),結(jié)合J2ME和JSP平臺(tái),可以設(shè)計(jì)并開(kāi)發(fā)出健壯、高效的企業(yè)級(jí)無(wú)線(xiàn)應(yīng)用程序,幫助企業(yè)提升經(jīng)濟(jì)效益。還可以使用J2EE平臺(tái)『5』,將更好的完善服務(wù)器端,具有更好的安全性,更高的效率?,F(xiàn)在,越來(lái)越多的電信廠(chǎng)商生產(chǎn)出性能優(yōu)越的Java手機(jī),而且在電信運(yùn)營(yíng)商、電信設(shè)備制造商和應(yīng)用程序開(kāi)發(fā)者之間存在著一種較好的盈利模式。Java手機(jī)也在不斷的發(fā)展,屏幕增大,使用彩屏,等等。相信Java無(wú)線(xiàn)應(yīng)用會(huì)有更加美好的發(fā)展。?
參考文獻(xiàn):?
『1』http://wireless.java.sun.com?
『2』http://www.cooltown.com/mpulse/0902-starbucks.asp?
『3』http://wireless.java.sun.com/midp/articles/tutorial2/?
『5』http://java.sun.com/j2ee/tutorial/index.html?
一些商品信息:?
Coffee:? http://www.starbucks.com/shop/category.asp?category%5Fname=Coffee?
Ice cream:? http://www.starbucks.com/grocery/icecream.asp?
StarbucksDoubleShot:? ?http://www.starbucks.com/grocery/dblshot.asp ?
bottledFrappuccino:? http://www.starbucks.com/grocery/frappuccino.asp?