《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動態(tài) > 用JAVA手機(jī)購物

用JAVA手機(jī)購物

2009-01-06
作者:曹斌

一、概述?

??? 本文主要闡述了基于motorola388 手機(jī)的手機(jī)購物系統(tǒng)的設(shè)計(jì)思想和實(shí)現(xiàn)原理。該系統(tǒng)是桌面型客戶關(guān)系管理系統(tǒng)在智能移動終端上的擴(kuò)展,應(yīng)用于廣大的手機(jī)用戶(包括個(gè)人用戶及企業(yè)級用戶)。手機(jī)購物打破傳統(tǒng)的購物理念,人們不必親自去商場選購商品,可以通過手機(jī)的服務(wù)實(shí)現(xiàn)隨時(shí)隨地購買商品,享受服務(wù)。系統(tǒng)開發(fā)時(shí),我們采用了Java 無線應(yīng)用技術(shù)(參見『1』),在J2ME(CLDC+MIDP) + JSP平臺上實(shí)現(xiàn)企業(yè)級的多層分布式體系架構(gòu),并利用XML 技術(shù)進(jìn)行數(shù)據(jù)傳輸和交換。?

二、需求分析?

◆??系統(tǒng)需求?

??? 本系統(tǒng)是一個(gè)純Java解決方案的End2End的移動商務(wù)(m-Commerce)系統(tǒng),它以無線的方式向用戶提供商品的購買和相關(guān)的一系列服務(wù)。該系統(tǒng)限于支持Java的手機(jī)用戶使用。?

??? 為提高商家的服務(wù)項(xiàng)目及服務(wù)質(zhì)量,滿足客戶的需求,以人為本,使人感到方便快捷,達(dá)到隨時(shí)隨地購買商品,享受服務(wù)。使用的開發(fā)工具及軟件:J2SDK1.3.1 + JBuilder7 + J2Mewtk1.0.3 + jakarta-tomcat-4.0 + Access。?

◆??客戶需求分析?

●??購買商品,滿足客戶需要?

●??提供送貨上門服務(wù),方便客戶?

●??提供餐飲食品即食服務(wù)?

◆??運(yùn)營設(shè)想?

??? 目前有很多很成功的辦理即食餐飲業(yè)服務(wù)的公司,例如startbucks(星巴克)『2』,他們的運(yùn)營方式很值得借鑒:?

??? (1)注冊:用戶首先通過網(wǎng)絡(luò)注冊,包括用戶信息注冊以及匯預(yù)付款(或者用招商銀行一卡通網(wǎng)上轉(zhuǎn)帳)。由于目前國內(nèi)支付方式的限制,預(yù)付款是一個(gè)很好的負(fù)費(fèi)解決方案,用一卡通直接轉(zhuǎn)帳也是方案之一。?

??? (2)購買:用戶完成注冊后即可通過無線客戶端進(jìn)行商品的購買,尤其是食品,滿足客戶在任何地點(diǎn)享受餐飲服務(wù)的需要。為方便用戶,可選擇上次所購買的商品,簡潔快速,縮短客戶的選購時(shí)間。客戶既可以通過手機(jī)連接到網(wǎng)絡(luò),進(jìn)行選購,也可以通過PC機(jī),登陸到服務(wù)商的網(wǎng)站上,進(jìn)行商品的選購。?

三、系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)?

??? 考慮到系統(tǒng)的安全性、擴(kuò)展性和可維護(hù)性,我決定在 JSP 平臺下開發(fā)服務(wù)器端程序,這樣做的復(fù)雜度低,成本低,系統(tǒng)性能優(yōu)越。系統(tǒng)客戶端是運(yùn)行在motorola388 手機(jī)上的,因此必須充分考慮其特點(diǎn),并在開發(fā)中加以應(yīng)用。也可考慮使用其他型號的手機(jī),只要支持Java技術(shù)。系統(tǒng)設(shè)計(jì)的目標(biāo)是分開數(shù)據(jù)庫、業(yè)務(wù)邏輯層和表示層,是一個(gè)典型的三層構(gòu)架模式。如下圖所示:?

?????????????

??? 下文將對其設(shè)計(jì)思想和實(shí)現(xiàn)原理進(jìn)行詳細(xì)闡述。?

1.客戶端?

??? 客戶端獲得用戶請求并提交遠(yuǎn)程服務(wù)器,得到結(jié)果并加以表現(xiàn)??蛻舳朔譃閮刹糠郑徊糠质窃谑謾C(jī)上運(yùn)行的,另一部分是在電腦的瀏覽器上運(yùn)行的。中間通過HTTP協(xié)議與服務(wù)器端連接。我選擇在J2ME(CLDC+MIDP)平臺上開發(fā)客戶端程序,由于MIDlet 程序開發(fā)具有內(nèi)存小、界面簡單、有限的運(yùn)算能力和網(wǎng)絡(luò)性能等特點(diǎn),需要重點(diǎn)設(shè)計(jì)以下幾個(gè)方面:?

??? ①?與服務(wù)器之間的通信?

??? J2ME 支持打開網(wǎng)絡(luò)連接并傳送數(shù)據(jù),訪問遠(yuǎn)程服務(wù)器資源。首先,用戶在離線方式下設(shè)置系統(tǒng)參數(shù),指定本公司W(wǎng)eb服務(wù)器的IP地址、端口和Web根目錄,選擇工作方式。隨后,程序把相關(guān)信息寫進(jìn)本地?cái)?shù)據(jù)庫。每當(dāng)系統(tǒng)啟動或者切換工作方式時(shí)加載,使得MIDlet工作在適當(dāng)?shù)臓顟B(tài)。?

MIDlet 編程支持Http 網(wǎng)絡(luò)連接『3』:?

HttpConnection conn = (HttpConnection)Connector.open(url);?

??? 這樣就在客戶端與服務(wù)器之間建立了Http連接,其中url存儲了請求參數(shù)信息,比如:?

url = “http://www.mcrm.com:8000/CRMRoot/custCreateAlias?id=001&name=…”?

??? 服務(wù)器中相應(yīng)的servlet將調(diào)用doGet()方法處理請求,返回響應(yīng),從而把業(yè)務(wù)邏輯的處理交給了服務(wù)器端,達(dá)到了“瘦”客戶端的設(shè)計(jì)目標(biāo)。建好Http連接以后,就可以方便的操作數(shù)據(jù)流,進(jìn)行數(shù)據(jù)讀寫了:?

InputStream in = conn.openInputStream();?

int data;?

while (data=in.read()!=0){…} …?

??? 客戶端編程的重點(diǎn)在于準(zhǔn)確地提交用戶請求參數(shù):查詢商品信息、所選的商品情況、地址信息和服務(wù)請求等,并可對查詢到的結(jié)果進(jìn)行更新、選擇。?

??? ② XML解析?

??? XML(Extensible Markup Language)是一種獨(dú)立于系統(tǒng)的表達(dá)數(shù)據(jù)信息的標(biāo)記語言,現(xiàn)已成為網(wǎng)絡(luò)系統(tǒng)中通用的數(shù)據(jù)交換格式。本系統(tǒng)采用XML技術(shù)進(jìn)行數(shù)據(jù)交換,利用它的分級結(jié)構(gòu),很容易訪問到所需的數(shù)據(jù)信息。這就意味著想要取得遠(yuǎn)程服務(wù)器端XML文檔中的數(shù)據(jù)信息,MIDlet編程就必須支持XML解析技術(shù)。從網(wǎng)上不難得到J2ME端的XML解析器。由于手機(jī)上沒有XML解析器,且手機(jī)的資源非常有限,本系統(tǒng)采用的是較小的KXML解析器,它是一種非確認(rèn)(non-validating)、單步(single-step)的解析器。KMXL解析整個(gè)XML文檔并把它轉(zhuǎn)換成一棵元素樹,可以通過調(diào)用方法getChildren、getTagName、getContents 等來遍歷整棵樹,得到數(shù)據(jù)信息。服務(wù)器端用JSP來接收參數(shù),使用一個(gè)BEAN來封裝對數(shù)據(jù)庫的操作?

2.表示層?

??? Servlets和JavaBeans構(gòu)成了表示層。這是一種控制結(jié)構(gòu),減低了視圖與模型之間的耦合性。當(dāng)Servlet響應(yīng)到一個(gè)HTTP GET 請求時(shí),doGet()方法被service()方法的默認(rèn)實(shí)現(xiàn)所調(diào)用,并把request對象和response對象作為參數(shù)傳給該函數(shù)。程序覆蓋了doGet()方法,所做主要工作是創(chuàng)建JavaBeans實(shí)例,傳遞request對象,調(diào)用bean方法,取得存放于bean中的數(shù)據(jù),返回結(jié)果(XML 文檔)。JavaBeans封裝了更為復(fù)雜的業(yè)務(wù)邏輯Application,Server,JDBC,CommodityList方法執(zhí)行各種數(shù)據(jù)存取的事務(wù)。它是一種可重用組件,提高代碼復(fù)用性,加快了軟件開發(fā)過程。如上所述,系統(tǒng)利用JAXP和W3C『4』提供的訪問XML的接口DOM來處理XML文檔。?

3.業(yè)務(wù)邏輯層?

??? 目前,業(yè)務(wù)邏輯層僅用了JSP,JavaBeans,Servlet來實(shí)現(xiàn),以后將升級為EJB的版本。主要完成客戶端與服務(wù)器端的連接及數(shù)據(jù)處理問題,包括客戶申請服務(wù),驗(yàn)證客戶提交的信息是否符合格式要求,處理客戶提交的請求,返回客戶信息,上次的商品購買信息及商品列表,客戶選擇后,將所選商品列表及所在地址發(fā)送到服務(wù)器端,最后由服務(wù)器端確認(rèn)后,完成這一系列的操作。?

??? 業(yè)務(wù)邏輯層包括用XML進(jìn)行數(shù)據(jù)的傳輸,用Servlet實(shí)現(xiàn)。從數(shù)據(jù)庫中得到所需數(shù)據(jù),將其以XML的格式輸出,并不需要建立具體的XML文件。用XML傳輸數(shù)據(jù)也便于客戶端的接收,是數(shù)據(jù)的傳輸統(tǒng)一規(guī)范。?

4.?dāng)?shù)據(jù)庫?

??? 數(shù)據(jù)庫端我使用的是Microsoft Access,利用SUN公司提供的JDBC API可以很方便地操作關(guān)系型數(shù)據(jù)庫(RDBMS),如上所述,JavaBeans要與數(shù)據(jù)庫表建立了一種良好的映射關(guān)系,設(shè)計(jì)數(shù)據(jù)庫時(shí)要注意主鍵值,它是唯一標(biāo)識。?

??? 本系統(tǒng)數(shù)據(jù)庫共建立了三張表,見下表:?

???????

??? 在整個(gè)開發(fā)周期中,需不斷精化和細(xì)化用戶需求,改進(jìn)用例與建模,改變數(shù)據(jù)庫中的表,迭代構(gòu)造和測試,使系統(tǒng)趨于完善。?

四、結(jié)束語?

利用Java無線應(yīng)用技術(shù),結(jié)合J2ME和JSP平臺,可以設(shè)計(jì)并開發(fā)出健壯、高效的企業(yè)級無線應(yīng)用程序,幫助企業(yè)提升經(jīng)濟(jì)效益。還可以使用J2EE平臺『5』,將更好的完善服務(wù)器端,具有更好的安全性,更高的效率?,F(xiàn)在,越來越多的電信廠商生產(chǎn)出性能優(yōu)越的Java手機(jī),而且在電信運(yùn)營商、電信設(shè)備制造商和應(yīng)用程序開發(fā)者之間存在著一種較好的盈利模式。Java手機(jī)也在不斷的發(fā)展,屏幕增大,使用彩屏,等等。相信Java無線應(yīng)用會有更加美好的發(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/?

『4』http://www.w3.org/?

『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?

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。