版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
畢業(yè)設(shè)計(論文)第PAGEII頁PAGEI畢業(yè)設(shè)計(論文)第PAGEI頁基于J2ME技術(shù)的手機(jī)網(wǎng)上繳費查詢的設(shè)計與實現(xiàn)摘要本次畢業(yè)設(shè)計設(shè)計并實現(xiàn)了一個移動Web服務(wù)的框架,所謂移動Web服務(wù),是一種讓人們使用移動電話、PDA等無線通訊設(shè)備接入Internet的全新接入方式,通過這類服務(wù)的用戶可以享受到高速的無線傳輸,包括Internet上的各類新聞、在線游戲、銀行各種網(wǎng)上業(yè)務(wù)等一系列網(wǎng)絡(luò)應(yīng)用服務(wù)。本文的工作主要集中在:詳細(xì)闡述開發(fā)移動Web服務(wù)所需要的兩種關(guān)鍵技術(shù)(J2ME和HTTP)的工作原理。利用自己的開發(fā)實例分析了移動Web服務(wù)的主要編程思想,即MIDP(MobileInformationDeviceProfile)網(wǎng)絡(luò)程序設(shè)計,以及J2ME(Java2PlatformMicroEdition)技術(shù)與HTTP(HypertextTransferProtocol,超文本傳輸協(xié)議)技術(shù)的結(jié)合。本文具體展示了作者如何實現(xiàn)移動Web服務(wù)的客戶端,其中包含以下工作:首先,提出了一個完整的移動Web服務(wù)的解決方案,包括客戶端與服務(wù)器的結(jié)構(gòu)框架;其次,實現(xiàn)了移動Web服務(wù)中的查詢繳費清單的功能。本論文程序涉及9個J2ME類和一個Servlet類。關(guān)鍵詞:J2ME,HTTP,移動Web服務(wù)ThedesignandtherealizationoffeesearchupbasedontheJ2ME’stechnicalcellularphoneAbstractThisprojecthasdesignedandrealizedaframeofaMobileWebService.MobileServiceisabrand-newaccessmethod,anditcanletpeopleusewirelesstelecommunicationequipmentssuchascellulartelephone,PDAtoaccesstheInternet.Throughtheservices,usercanenjoyhigh-speedwirelessdatatransmission.TheseriesofnetworkapplicationservicesincludesnewsontheInternet,gamesonline,onlinebanksandsoon.Myresearchisconcentratedmainlyonthefollowingaspects.First,theprojectdiscussesindetailtheoperatingprinciplesoftwokeytechnologies:J2MEandHTTP,whichareneededindevelopingMobileWebService.Then,itanalyzesthemainprogrammingprinciplesthatMIDPnetworkprogramdesign,J2MEandHTTParecombined,utilizingmyowndevelopmentinstance.Third,itdiscusseshowtorealizetheclientofMobileWebService,whichincludesthefollowingwork.ThisprojectputsforwardanintegratedsolutionforMobileWebServicewhichincludesthestructureframesofserverandclient.ItrealizesthefunctionoftheinquirytopayexpenseinMobileWebService.TheprocedureofthispaperinvolvesnineclassesofJ2MEsandServlet.Keywords:J2ME,HTTP,MobileWebService目錄TOC\h\z\t"Heading1,1,Heading2,2,Heading3,3,header1,1"插圖索引11 Java2MicroEdition概述21.1 引言21.2 J2ME的體系結(jié)構(gòu)31.2.1 J2ME基本概念31.2.2 J2ME總體架構(gòu)41.2.3 J2ME在各種Java版本中的定位61.3 J2ME開發(fā)的優(yōu)勢和不足71.3.1 優(yōu)勢71.3.2 劣勢81.4 MIDP應(yīng)用程序編寫91.4.1 MIDP的UI91.4.2 MIDP的API91.4.3 什么是MIDlet101.4.4 一個MIDlet例子111.4.5 MIDP軟件包132 MIDP無線網(wǎng)絡(luò)開發(fā)142.1 概述142.2 使用Http進(jìn)行網(wǎng)絡(luò)連接152.2.1 J2ME與服務(wù)器交互信息163 移動Web服務(wù)的實現(xiàn)183.1 移動Web服務(wù)的背景183.2 服務(wù)簡介193.3 整體設(shè)計193.4 繳費查詢系統(tǒng)的功能模塊203.5 網(wǎng)絡(luò)處理模塊的設(shè)計213.6 用戶界面223.7 服務(wù)器243.7.1 服務(wù)器介紹243.7.2 編寫服務(wù)器端Servlet24結(jié)論26致謝27參考文獻(xiàn)28附錄主要源程序30插圖索引TOC\h\z\c"圖"圖1.1J2ME、J2SE與J2EE之間的比較 3圖1.2CLDC/MIDP架構(gòu) 5圖1.3MIDlet狀態(tài)圖 11圖2.1MIDP的Connection接口層次 14圖2.2J2ME客戶端與服務(wù)器端交互流程圖 17圖3.1移動銀行的系統(tǒng)結(jié)構(gòu) 19圖3.2整體結(jié)構(gòu)圖 20圖3.3功能模塊 20圖3.4MVC結(jié)構(gòu)圖 22圖3.5主屏幕 22圖3.6登錄屏幕 23圖3.7查詢屏幕 23圖3.8設(shè)置賬戶屏幕 24圖3.9服務(wù)器端和客戶端信息交流示意圖 25畢業(yè)設(shè)計(論文)第2頁Java2MicroEdition概述引言隨著無線通訊時代的來臨,通訊行業(yè)的前景相當(dāng)廣闊。手機(jī)的功能越來越強(qiáng)大,使得更多的廠商相繼投入到無線通訊設(shè)備的生產(chǎn)與開發(fā)中,其平臺和操作系統(tǒng)比起目前的PDA更加復(fù)雜。除了Symbian針對手機(jī)推出的EPOC操作系統(tǒng)之外,微軟在手機(jī)上的操作系統(tǒng)Stinger也己經(jīng)亮相,但是目前市面上的手機(jī)仍然多以廠商自行開發(fā)的操作系統(tǒng)居多。同時,在進(jìn)行針對無線設(shè)備的應(yīng)用開發(fā)時,開發(fā)者面臨著三個主要問題:開發(fā)工具的適用性、擁有實際的無線應(yīng)用測試環(huán)境以及可靠和可伸縮的服務(wù)支持。到目前為止,造成這些問題的部分原因是缺少針對無線設(shè)備的開放和一致性的應(yīng)用開發(fā)環(huán)境,以及缺少適當(dāng)?shù)臒o線應(yīng)用基礎(chǔ)設(shè)施。J2ME[1](Java2PlatformMicroEdition)編程語言和技術(shù)為解決這些問題鋪平了道路。因為Java語言是跨平臺運行的,即Java的“writeonce,runanywhere”特性,這一特性使Java技術(shù)將一大批設(shè)備(從服務(wù)器到臺式機(jī)和移動設(shè)備)集中到一種語言和一種技術(shù)之下。雖然這些設(shè)備的應(yīng)用不同,但Java技術(shù)為這些不同點起到了橋梁的作用,使原本致力于單一領(lǐng)域的開發(fā)人員能將其技能發(fā)揮到跨越不同設(shè)備和應(yīng)用的領(lǐng)域,同時,J2ME也被定義為一種以廣泛的消費性產(chǎn)品為目標(biāo)的的高度優(yōu)化的Java運行環(huán)境。[15]在本文中,主要介紹在J2ME環(huán)境下如何實現(xiàn)移動Web服務(wù)。文章中著重闡述了J2ME如何結(jié)合HTTP技術(shù)實現(xiàn)移動Web服務(wù)的過程。從而展示出在手機(jī)平臺上實現(xiàn)移動Web服務(wù)的廣闊前景。本文組織如下:第一章介紹了J2ME的基本概念和體系結(jié)構(gòu),以及它的優(yōu)勢與不足。第二章闡述了HTTP的基本概念和主要功能,以及在Web服務(wù)中的應(yīng)用優(yōu)勢。第三章是本文的重點,詳細(xì)闡述了一個移動Web服務(wù)的工作原理和實現(xiàn)過程。J2ME的體系結(jié)構(gòu)J2ME基本概念Java是SunMicrosystems公司在1995年中推出的一套程序語言兼平臺。Sun在JDK1.2版公開后將Java改名為Java2,并重新定義了Java技術(shù)的架構(gòu),將其分為3個版本:[2](1)企業(yè)版(J2EE-Java2EnterpriseEdition)(2)標(biāo)準(zhǔn)版(J2SE-Java2StandardEdition)(3)袖珍版(J2ME-Java2MicroEdition)J2EE適用于服務(wù)器,面向以企業(yè)為環(huán)境的應(yīng)用程序的開發(fā);J2SE適用于一般的計算機(jī),為桌面開發(fā)和低端的商務(wù)應(yīng)用提供了可行的解決方案;J2ME則適用于消費型電子產(chǎn)品,是致力于消費產(chǎn)品和嵌入式設(shè)備開發(fā)的最佳選擇。如下圖所示:圖SEQ圖\*ARABIC1.1J2ME、J2SE與J2EE之間的比較SunMicrosystems將J2ME定義為“一種以廣泛的消費性產(chǎn)品為目標(biāo)的高度優(yōu)化的Java運行時環(huán)境,包括移動電話、可視電話、數(shù)字機(jī)頂盒和汽車導(dǎo)航系統(tǒng)?!币簿褪钦f,J2ME是為無線電子市場所設(shè)計的,它包括JVM規(guī)范和API規(guī)范。其API規(guī)范是基于J2SE的。J2ME定義了一套合適的類和虛擬機(jī)技術(shù)。這些技術(shù)可以使用戶、服務(wù)提供商和設(shè)備制造商通過物理(有限)連接或無線連接,按照需要隨時使用豐富的應(yīng)用程序。J2ME總體架構(gòu)(1)概述J2ME使用配置層(Configuration)和架構(gòu)層(Profile)定制Java運行時環(huán)境(JRE),作為一個完整的JRE,配置決定了使用的Java虛擬機(jī)(JVM),而框架則通過添加特定于域的類來定義應(yīng)用程序。(2)配置層配置層包括虛擬機(jī)(virtualmachine)、核心的類庫和API[9]。配置層向開發(fā)人員提供了一個最基礎(chǔ)和最核心的Java平臺。它將基本運行時環(huán)境定義為一組核心類和一個運行在特定類型設(shè)備上的特定JVM。J2ME定義了兩種類型設(shè)備:連接設(shè)備(connecteddevice)和有限連接設(shè)備(limitedconnecteddevice)。連接設(shè)備是指那些有電源的、電力充沛的、較大的設(shè)備,有32位或64位處理器,超過512k的存儲器。例如:智能通信器、交互式數(shù)字、電視機(jī)頂盒等。有限連接設(shè)備主要使用電池,小型的設(shè)備,具有16位或32位處理器,可用內(nèi)存為160-512kb。例如:手機(jī)、PDA等。對應(yīng)上述兩種設(shè)備,J2ME擁有兩種配置,分別為CDC(ConnectedDeviceConfiguration)和(ConnectedLimitedDeviceConfiguration)。CDC使用經(jīng)典的Java虛擬機(jī)JVM,而CLDC使用的是KVM(TheKVirtualMachine),稱為K虛擬機(jī)。為適應(yīng)資源有限設(shè)備的特性,KVM已經(jīng)按以下方式修改:虛擬機(jī)的大小和類庫以減小為50-80kb目標(biāo)代碼的標(biāo)準(zhǔn);存儲器占用已經(jīng)減小為幾十K字節(jié)的標(biāo)準(zhǔn);在具有16位和32位處理器的設(shè)備上,性能有效;體系結(jié)構(gòu)是高可移植的,基于特定機(jī)器和平臺的代碼很少;多線程和垃圾回收是獨立于系統(tǒng)的;可以對虛擬機(jī)的組件進(jìn)行配置,以適合于特定設(shè)備。(3)框架層框架層定義了應(yīng)用程序所支持的設(shè)備類型。它也包含一組API,主要針對于特定的某一族系的設(shè)備而定義的??蚣軐釉谔囟ǖ呐渲脤由蠈崿F(xiàn),而應(yīng)用則是建立在特定的框架層上。對于手機(jī)、PDA等CLDC設(shè)備的框架層我們稱為“移動信息設(shè)備框架”MIDP(MobileInformationDeviceProfile)。MIDP與CLDC和在一起就構(gòu)成了一個完整的J2ME架構(gòu)。如下圖為J2ME體系結(jié)構(gòu)的框架圖:圖1.SEQ圖\*ARABIC2CLDC/MIDP架構(gòu)說明:在CLDC之上有兩類API:-MIDPAPIs:這些APIs正是MIDPv.0規(guī)范所要定義的APIs.-OEM-specificAPIs:MIDP規(guī)范所涉及的無線通訊設(shè)備多種多樣,因此它不可能涉及所有設(shè)備的需求。因此這一類的APIs是由OEM廠商提供以便訪問特定設(shè)備的特定功能。但基于這些APIs的應(yīng)用可能不能在其它的MIDP設(shè)備上運行。MIDP應(yīng)用的種類:-MIDP:一個MIDP應(yīng)用或稱為MIDlet,它必需只使用MIDP和CLDC規(guī)范中所定義的APIs。該類應(yīng)用能在應(yīng)是在MIDP設(shè)備上最常見的應(yīng)用。-OEM-specific:一個OEM-specific的應(yīng)用會使用一些不在MIDP中定義的APIs(OEM-specificclasses)。這些應(yīng)用不能在不同的MIDP設(shè)備上運行。-Native:一個本地應(yīng)用使指用非Java語言編寫的直接運行于設(shè)備操作系統(tǒng)之上的應(yīng)用。在MIDP規(guī)范中不涉及OEM-specific和Native的應(yīng)用。J2ME在各種Java版本中的定位在Java2平臺下,Sun重新定義了Java技術(shù)的架構(gòu),將其分為三個版本。針對企業(yè)級應(yīng)用的J2EE(Java2EnterpriseEdition)、針對普通PC應(yīng)用的J2SE(Java2StandardEdition)和針對嵌入式設(shè)備及消費類電器的J2ME(Java2MicroEdition)三個版本。Java2規(guī)范中有一組所謂的核心類別函數(shù)庫(CoreClass,即java.*),在核心類別之外還有所謂的擴(kuò)充類別函數(shù)庫(ExtendClass,即javax.*)。根據(jù)對這兩種類別所支持的程度,SunMicrosystems從而區(qū)分出三種不同的Java版本:J2EEJ2EE是Sun公司推出的一種全新概念的模型,比傳統(tǒng)的互聯(lián)網(wǎng)應(yīng)用程序模型更具有優(yōu)勢。它是Java技術(shù)企業(yè)級應(yīng)用的最佳平臺,可以讓程序員迅速、快捷地開發(fā)企業(yè)級應(yīng)用程序。J2EE地應(yīng)用編程模型(JavaBlueprints)提供一種用于實施基于J2EE多層應(yīng)用的文檔和實施套件的體系模型,它要求開發(fā)者將自己的工作分成兩類:商業(yè)邏輯和表示邏輯,其余則由系統(tǒng)資源自動處理,不必為中間層管道進(jìn)行編碼。這樣開發(fā)人員就能將更多的時間花在商業(yè)邏輯和表示邏輯上面。對重視縮短項目周期的公司來說,這種轉(zhuǎn)變深受歡迎。J2EE應(yīng)用程序的開發(fā)階段分為四步:首先Enterprisebean創(chuàng)建;其次WebComponent創(chuàng)建;接下來J2EE應(yīng)用程序的裝配;最后J2EE應(yīng)用程序分布。J2EE除了支持所有的標(biāo)準(zhǔn)核心類別函數(shù)庫以外,還增加了許多支持企業(yè)內(nèi)部使用的擴(kuò)充類別函數(shù)庫,比如支持Servlet/JSP的javax.servlet.*類別函數(shù)庫、支持EnterpriseJavaBean的javax.ejb.*類別函數(shù)庫。當(dāng)然,J2EE必定支持所有的Java基本類別。J2EE定位在服務(wù)器端(server-side)程序的應(yīng)用上。J2SEJ2SE是一種開發(fā)和部署平臺,提供了編寫桌面、工作站應(yīng)用程序所有必須的功能,是快速開發(fā)、部署關(guān)鍵任務(wù)和企業(yè)應(yīng)用程序的首先解決方案。J2SE是基于Java跨平臺技術(shù)和強(qiáng)有力的安全模塊而開發(fā)的,其特點在于:良好的計算性能和縮放能力;跨平臺;支持Web服務(wù);完整性的開發(fā)環(huán)境。J2SE是多種不同風(fēng)格軟件的開發(fā)基礎(chǔ),包括客戶端Java小程序和應(yīng)用程序,以及獨立的服務(wù)器應(yīng)用程序等。J2SE還是J2ME的基礎(chǔ),是J2EE執(zhí)行程序的推動力。J2SE包括了所有Java標(biāo)準(zhǔn)規(guī)格中所定義的核心類別函數(shù)庫,也支持所有的Java基礎(chǔ)類別。J2SE定位在客戶端(Client-side)程序的應(yīng)用上。J2MEJ2ME只支持標(biāo)準(zhǔn)核心類別函數(shù)庫的子集合,比如J2MECLDC規(guī)格中,只支持java.lang.*、java.io.*、java.util.*這些類別函數(shù)庫。J2ME加入了一些支持嵌入式系統(tǒng)的擴(kuò)充類別函數(shù)庫,如javax.Microedition.io.*類別函數(shù)庫。這個版本不支持所有的Java基本類別,以標(biāo)準(zhǔn)J2MECLDC為例,也就是能在PalmOS上執(zhí)行的KVM來說,它就不支持浮點數(shù)(float,double)。J2ME定位在嵌入式系統(tǒng)的應(yīng)用。綜上所述,在以上每一種Java版本中,都有屬于它們自己的虛擬機(jī),從而達(dá)到“Writeonce,runanywhere”的目標(biāo)。而我們關(guān)注的J2ME世界里,包括兩種虛擬機(jī):KVM和CVM。KVM用來執(zhí)行下載到較低層次(硬件功能不強(qiáng))的嵌入式設(shè)備上的Spotlet或MIDlet,而CVM用來執(zhí)行較高層次(硬件功能相對較強(qiáng))的嵌入式設(shè)備上的Java程序。J2ME開發(fā)的優(yōu)勢和不足優(yōu)勢移動信息設(shè)備框架(MIDP)是對主要產(chǎn)品類別的廣義分類,它為每個類別定義了框架并要求產(chǎn)品生產(chǎn)商選擇和遵循某一個框架。以目前的GSM蜂窩電話為例,這類設(shè)備遵循的框架都具有如下特性:擁有640KB的內(nèi)存、一個比較慢的處理器、有限的圖形能力和基于像素的文本顯示。用戶接口也非常簡單:典型地是兩個側(cè)面按鈕用于向左、向右移動;一個中間按鈕提供上下滾屏和翻頁功能。J2ME最關(guān)鍵的優(yōu)勢是框架層(profile)是可擴(kuò)展的。它可以對原始的API進(jìn)行擴(kuò)充,以增加更多的系統(tǒng)功能,這一點使開發(fā)人員獲益匪淺。由于技術(shù)是基于Java的,因此只需加入新的軟件包,就可以方便地增加新功能。因此,在設(shè)計新的設(shè)備模型時,開發(fā)者就不必重新切換到一組新的API。J2ME可以單獨運行在一臺設(shè)備上,并向消費者提供各種解決方案和服務(wù)。很明顯,簡單的游戲、地址薄、日歷和日程安排應(yīng)用程序是開發(fā)者首先要開發(fā)的應(yīng)用,它們都能在現(xiàn)有設(shè)備上順利運行。當(dāng)這些應(yīng)用能夠通過網(wǎng)絡(luò)從公司名稱數(shù)據(jù)庫、企業(yè)日歷或消息服務(wù)器上取回數(shù)據(jù)時,它們對企業(yè)的實際價值就顯現(xiàn)出來了。但是與過分單純的WAP(無線訪問協(xié)議)瀏覽器必須反復(fù)從服務(wù)器獲取數(shù)據(jù)的做法不同,J2ME還提供了客戶端的智能。例如,通過WAP獲取數(shù)據(jù)時,應(yīng)用必須不斷地從服務(wù)器上獲取信息,但如果使用J2ME。整卷數(shù)據(jù)就可以一次下載,然后通過獨立的應(yīng)用程序進(jìn)行離線閱讀。諸如Email信息、地址簿、下周日程安排等各種各樣的數(shù)據(jù)都可以高速緩存在本地設(shè)備上。除了由設(shè)備廠商提供的安全機(jī)制,J2ME還提供了本地的安全選項。這些選項包括一個或多個用戶訪問時的本地口令、本地數(shù)據(jù)加密后交由第三方保存,在需要時再取回,以及安全的點對點通信.開發(fā)者不再受到設(shè)備自身有限選項的限制,也不再受帶寬服務(wù)提供商的限制。J2ME的客戶機(jī)也可以為服務(wù)器減輕負(fù)載。有兩個例子可以說明:一個是基于Web的地址薄,另一個是格式化內(nèi)容。在利用WAP手機(jī)訪問基于Web的地址搏應(yīng)用時,用戶首先登錄到服務(wù)器,并向服務(wù)器提交一個請求;然后服務(wù)器搜索地址并將其呈送給客戶端。在這種情況下,每個新的地址條目或以前執(zhí)行過的查詢將一次又一次地提交給服務(wù)器。如果使用J2ME,地址薄的主要內(nèi)容或者整個地址薄可以一次發(fā)送過來并暫時存儲在手機(jī)上,如此一來,每次搜索都是在本地手機(jī)上執(zhí)行,大大減少了對服務(wù)器的訪問次數(shù)。劣勢利用J2ME進(jìn)行無線應(yīng)用開發(fā)與桌面或企業(yè)計算應(yīng)用開發(fā)有很大的不同。對桌面和企業(yè)計算應(yīng)用來說,開發(fā)平臺通常與部署環(huán)境相同,任何人都可以提供有線網(wǎng)絡(luò)和應(yīng)用系統(tǒng)建立連接。但無線設(shè)備的情況恰好與之相反,在過去很長時間內(nèi),無線設(shè)備都處于處理器性能低下、內(nèi)存和圖形用戶接口資源有限、網(wǎng)絡(luò)連接速度慢而不可靠的狀況中。所以其局限性是顯而易見的。(1)所有無線應(yīng)用開發(fā)都主要通過軟件仿真程序完成,這些仿真程序極少有非常出色的。(2)無線設(shè)備的種類繁多,沒有一種仿真程序能夠模擬所有的無線設(shè)備。最常見的情形是,在仿真程序中運行很好的應(yīng)用程序部署到實際的設(shè)備中時卻對工作環(huán)境提出了一些特殊的怪異要求。MIDP應(yīng)用程序編寫MIDP的UI如上所述,移動信息設(shè)備框架(MIDP)適合類似于移動電話這樣的設(shè)備[3]。MIDP提供一種標(biāo)準(zhǔn)的運行時環(huán)境,允許在終端用戶設(shè)備上動態(tài)地配置新的應(yīng)用程序和服務(wù)。MIDP包括一個低級的UIAPI和一個高級的UIAPI.低級的API允許您完全訪問一個設(shè)備的顯示屏,也允許訪問原始鍵和指針事件。然而,使用低級API時,沒有可用的用戶界面控件。應(yīng)用程序必須精確地繪制出按鈕和其它所有的控件。相反,高級API提供簡單的用戶界面控件但不能直接訪問原始的輸入事件或顯示屏。由于顯示屏的尺寸和MIDP設(shè)備輸入方法的差異,控件顯得很抽象。MIDP的實現(xiàn)確定了繪制控件的方法,也確定了如何管理用戶輸入。MIDP的APIMIDP包含四個核心CLDC軟件包(java.lang,Java.io,java.util和javax.mi-croedition.io),另加下面的三個特定于MIDP的軟件包:javax.microedition.lcduijavax.microedition.midletjavax.microedition.rms除了上面新的軟件包之外,MIDP還向核心CLDC軟件包添加了四個新類,如下所示:java.util.Timer――用于為后臺線程中將來要執(zhí)行的任務(wù)確定時間。Java.util.TimerTask――被java.util.Timer類使用,用來為后臺線程中稍后的執(zhí)行定義任務(wù)。java.microedition.io.HttpConnection――一個接口,為HTTP連接定義必要的方法和常量。Java.lang.IllegalStateException――一個RuntimeException,指出在不合法或不合適的時間己經(jīng)調(diào)用的一個方法。什么是MIDletMIDlet是一個Java類,它擴(kuò)展了javax.microedition.midlet.MIDlet抽象類。實現(xiàn)startApp()、pauseApp()和destroyApp()方法,這些方法類似于J2SE的java.applet.Applet類中的start()、stop()和destroy()方法。[18]除了擴(kuò)充javax.microedition.midlet.MIDlet的主MIDlet類外,一個MIDlet應(yīng)用程序通常還包括其它一些類,這些類隨它們的資源一起被打包成為jar文件――稱之為MIDlet套件。一個MIDlet套件中的不同MIDlet能共享jar文件的資源,盡管不同套件中的MIDlet不能被直接相互作用。MIDlet在應(yīng)用程序生命周期中有三個狀態(tài),分別是pause、active和destroyed。在啟動一個MIDlet的時候,應(yīng)用管理軟件會首先創(chuàng)建一個MIDlet實例并使得他處于pause狀態(tài),當(dāng)startApp()方法被調(diào)用的時候MIDlet進(jìn)入active狀態(tài),也就是所說的運行狀態(tài)。在active狀態(tài)調(diào)用destroyApp(booleanunconditional)或者pauseApp()方法可以使得MIDlet進(jìn)入destroyed或者pause狀態(tài)。值得一提的是destroyApp(booleanunconditional)方法,事實上,當(dāng)destroyApp()方法被調(diào)用的時候,AMS通知MIDlet進(jìn)入destroyed狀態(tài)。在destroyed狀態(tài)的MIDlet必須釋放了所有的資源,并且保存了數(shù)據(jù)。如果unconditional為false的時候,MIDlet可以在接到通知后拋出MIDletStateChangeException而保持在當(dāng)前狀態(tài),如果設(shè)置為true的話,則必須立即進(jìn)入destroyed狀態(tài)。下圖說明了MIDlet狀態(tài)改變情況:圖1.SEQ圖\*ARABIC3MIDlet狀態(tài)圖一個MIDlet例子這個MIDlet會在MIDP設(shè)備的顯示屏上顯示“HelloWorld!”和EXIT按鈕,按下EXIT按鈕,程序就會被終止。HelloWorld.java文件以下面的代碼行開始,這些代碼行的作用是導(dǎo)入會在HelloWorld類中使用的類。importjavax.microedition.midlet.MIDlet;importjavax.microedition.lcdui.Display;importjavax.microedition.lcdui.Form;importjavax.microedition.Commandimportjavax.microedition.CommandListener//由于HelloWorld類是一個MIDlet應(yīng)用程序,它擴(kuò)展了MIDlet,也實現(xiàn)CommandListener接口來處理事件publicclassHelloWorldextendsMIDletimplementsCommandListener{privateDisplaydisplay;privateFormform;privateCommandexitCommand;//構(gòu)造函數(shù),創(chuàng)建一個表單,在上面初始化控件,然后顯示出來publicHelloWorld(){//創(chuàng)建一個Form對象用來顯示文本form=newForm("HelloWorld”);//創(chuàng)建一個Command對象exitCommand=newCommand(“Exit”,command.EXIT,1);//添加一個命令form.addCommand(exitCommand);//設(shè)置commandListenerform.setCommandListener(this);System.out.println("Constructor");
}
publicvoidstartApp()throwsMIDletStateChangeException{//獲得顯示對象,并且顯示formDisplay.getDisplay(this).setCurrnt(form);System.out.println("startAppiscalled.");}
//暫停程序publicvoidpauseApp(){
System.out.println("pauseAppiscalled.");
}
//銷毀程序publicvoiddestroyApp(booleanunconditional){
System.out.println("destroyAppiscalled.");
}//commandActive()方法是事件處理程序,被請求實現(xiàn)CommandListener接口publicvoidcommandActive(Commandc,Displayabled){//關(guān)閉這個MIDletif(c=exitCommand){try{destroyApp(false);}catch(MIDletStateChangeExceptionexception){System.out.println(“MIDletStateChangeException”);//向應(yīng)用程序管理器確認(rèn)這個應(yīng)用程序已經(jīng)進(jìn)入關(guān)閉狀態(tài)notifyDestroy();}}}MIDP軟件包除標(biāo)準(zhǔn)CLDC軟件包之外,MIDP還包含三個附加的軟件包。javax.microedition.lcdui――定義用來控制UI的類,這個軟件包既包含高級UI類(例如Form、TextBox和Alter等),有包含低級UI類(允許用低級方式控制控制UI)。java.microedition.midlet――包含MIDP主類中的一個MIDP類,為MIDP應(yīng)用程序提供訪問關(guān)于其運行所在環(huán)境信息的權(quán)限。java.microedition.rms――定義一個類的集合,這些類為MIDlet提供了永久存儲并隨后重新得到數(shù)據(jù)的機(jī)制。MIDP無線網(wǎng)絡(luò)開發(fā)概述Java的網(wǎng)絡(luò)編程能力是相當(dāng)健壯的。Java2標(biāo)準(zhǔn)版(J2SE)在java.io和程序包中定義了100多個接口程序,類和異常。這些庫實現(xiàn)的功能是很強(qiáng)大的,但是這只適用于傳統(tǒng)的計算機(jī)系統(tǒng),這些計算機(jī)系統(tǒng)有強(qiáng)大的CPU處理能力,快速的內(nèi)存和持久的數(shù)據(jù)儲存,但是這些在大多數(shù)的無線設(shè)備上是不現(xiàn)實的。因此,J2ME定義了這些函數(shù)的子集[5],并提供了一套用于網(wǎng)絡(luò)和文件訪問的固定的程序包一javax.microedition.io程序包[6]。由于可移動設(shè)備種類繁多,個程序包僅僅定義了一套接口,而為每個可移動設(shè)備供應(yīng)廠商留下了實際的應(yīng)用程序接口實現(xiàn)。就在可移植性和設(shè)備特定特征的應(yīng)用中找到了一個最佳的平衡點。定義在javax.microedition.io類中的抽象網(wǎng)絡(luò)和文件輸入輸出框架稱為通用連接框架(GenericConnectionFramework,簡稱GCF)。[14]GCF定義了一套有關(guān)抽象化的內(nèi)容來描述不同的通信方法.最高級的抽象被稱作連接(Connection如),還聲明了六個接口(四個是直接的,兩個是間接的)。這七個接口就構(gòu)成了J2ME的CLDC的一部分。圖2.1MIDP的Connection接口層次在GenericConnectionFramework之中,定義了幾種常見的網(wǎng)絡(luò)連接方式。不管我們打算用何種方式同外界溝通,所有的連接都是由接口Connector類的open()方法所開始的:創(chuàng)建HTTP連接:Connector.open(“Http://”);創(chuàng)建Socket連接Connector.open(“Socket://:8080”);創(chuàng)建Datagram連接Connector.open(“Datagram://:9000”);創(chuàng)建本地文件連接Connector.open(“file://newfile.txt”);雖然GCF的目的是成為公用網(wǎng)絡(luò)和文件輸入輸出框架,但是各個廠家并不一定支持GCF中聲明的所有的接口。有的廠家可以決定只支持socket連接,而其它的廠家可以選擇只支持基于Datagram的通信。為了促進(jìn)跨越類似裝置的可移植性,MIDP規(guī)范要求所有的MIDP設(shè)備都必須實現(xiàn)HttpConnection接口。HttpConnection不是GCF的一部分,但是它是從GCF的一個接口ContentConnection衍生出來的。使用Http進(jìn)行網(wǎng)絡(luò)連接從上可知,HTTP協(xié)議是當(dāng)前僅有的,被所有的遵從MIDP規(guī)范的設(shè)備支持的網(wǎng)絡(luò)協(xié)議,它也是用于開發(fā)無線網(wǎng)絡(luò)應(yīng)用程序的最好的候選者。在下面的例子中,玩家通過Http連接向Web服務(wù)器發(fā)出請求,要求查看幫助信息網(wǎng)頁help.html.其步驟如下:(1)在Connector.open()之中使用http作為通訊協(xié)議。如果Connector.open()與Web服務(wù)器連接成功,為了以后使用的方便,我們將它傳回到HttpConnection類。代碼如下:Stringurl=/help.html;HttpConnectionhc=(HttpConnection)Connector.open(url);(2)利用HttpConnection的openInputStream打開輸入流,如此才能取得Web服務(wù)器所回傳的資料。代碼如下:hc.openInputStream();(3)InputStream只能讀取二進(jìn)制資料,為了正確地讀取字符串,我們將InputStream和DataInputStream合并在一起使用。代碼如下:DataInputStreamdis=newDataInputStream(hr.openInputStream());(4)當(dāng)輸入流打開以后,我們開始利用DataInputStream類的read()方法將收到的字節(jié)一個一個地讀取進(jìn)來。代碼如下:dis.read();我們將Web服務(wù)器傳過來的數(shù)據(jù)讀取完畢以后,再將資料一次性加到Form組件中,就可以一次顯示在手機(jī)屏幕上。在上面的例子中,我們只要指定了URL,Web服務(wù)器就可以立刻將網(wǎng)頁的內(nèi)容傳回來。其原理在于,當(dāng)我們下達(dá)命令:/help.html的時候,程序?qū)嶋H上執(zhí)行了兩個步驟:建立與上的port80的連接。送出Get/test.htmlHTTP/1.0\n\n指令。J2ME與服務(wù)器交互信息MIDP2.0的HTTP連接方式提供了兩種與服務(wù)器的網(wǎng)頁交互信息的方式,一種是Get方法,另一種是Post方法。目前客戶端訪問網(wǎng)頁的方式是通過Java服務(wù)器使用的JSP和Servlet技術(shù)的,JSP技術(shù)是Servlet技術(shù)的擴(kuò)展,一般用于發(fā)送給客戶靜態(tài)文本和標(biāo)記,里面只有小部分的內(nèi)容是Java代碼動態(tài)生成的,而客戶端的訪問方式就如一般訪問網(wǎng)頁的方式一樣,也是以閱讀網(wǎng)頁的形式閱讀JSP頁面的。事實上,一項Servlet不產(chǎn)生任何內(nèi)容,它們只是代表客戶執(zhí)行的一項任務(wù),然后調(diào)用其它的Servlet或JSP來提供響應(yīng)。如果把J2ME技術(shù)的手機(jī)設(shè)備作為類型臺式機(jī)一樣的客戶端,則手機(jī)與JSP服務(wù)器交互的基本流程如圖2.2所示,首先,用戶在手機(jī)發(fā)出的請求信息被存儲在Response對象中并發(fā)送給Web服務(wù)器,JSP引擎(通常綁定在Web服務(wù)器上)根據(jù)JSP文件的指示處理Request對象,或者根據(jù)實際需要將Request對象轉(zhuǎn)發(fā)給由JSP文件所指定的其它服務(wù)器端組件(如Servlet組件、JavaBean組件或EJB組件等)來處理。處理結(jié)果則以Response對象的方式返回給JSP引擎,JSP引擎和Web服務(wù)器根據(jù)Response對象最終生成JSP頁面,返回給手機(jī)上的瀏覽器程序或者其它應(yīng)用程序,這也是手機(jī)上最終看到的內(nèi)容。用于客戶和服務(wù)器之間的通信協(xié)議最常用的是HTTP,此外也可以使用特定的私有協(xié)議。圖2.2J2ME客戶端與服務(wù)器端交互流程圖移動Web服務(wù)的實現(xiàn)移動Web服務(wù)的背景互聯(lián)網(wǎng)把全球的資訊和服務(wù)展現(xiàn)在電腦上,而移動互聯(lián)網(wǎng)則是把全球的資訊和服務(wù)進(jìn)一步地濃縮到口袋中。這是一個全新地領(lǐng)域,其革命性地突破蘊含了無限地商機(jī)。因此,世界上的各個行業(yè),無論是傳統(tǒng)的還是新型的,都把對移動互聯(lián)網(wǎng)的開發(fā)和應(yīng)用作為保持原有競爭地位以及改變自己不利競爭局面的重要籌碼。[13]其中銀行業(yè)務(wù)業(yè)不例外,所以就產(chǎn)生了移動銀行計算機(jī)系統(tǒng)?!耙苿鱼y行”又稱“手機(jī)銀行”,是利用移動終端辦理銀行有關(guān)業(yè)務(wù)的簡稱,是中國移動通信集團(tuán)公司與銀行部門合作,聯(lián)合向社會推出的一個新服務(wù)項目,是移動通信網(wǎng)絡(luò)上的一項電子商務(wù)。移動銀行業(yè)務(wù)的開通大大加強(qiáng)了移動通信公司和銀行的競爭實力。移動銀行通過全球統(tǒng)GSM網(wǎng)絡(luò)將客戶手機(jī)連接至銀行,實現(xiàn)利用手機(jī)界面直接完成各種金融理財業(yè)務(wù)的服務(wù),主要功能涉及賬務(wù)查詢,自助繳費,銀行轉(zhuǎn)賬等。[20]移動銀行是隨著短消息和WAP的應(yīng)用而提上日程的,正是因為它具備傳統(tǒng)銀行以及銀行網(wǎng)絡(luò)所沒有的優(yōu)勢才又了它的生存空間,因而備受業(yè)界關(guān)注。據(jù)了解,全球大部分銀行都推出了移動銀行服務(wù)。這種結(jié)合了貨幣電子化和移動通信的嶄新服務(wù),豐富了銀行服務(wù)內(nèi)涵,它意味著人們不僅可以在旅游、出差中高效便利地處理各種金融理財業(yè)務(wù)。通過移動銀行服務(wù),消費者能夠在任何時間任何地點,通過移動以及安全的方式訪問銀行,而無需親自光臨或給支行打電話?,F(xiàn)有的可選服務(wù)從查詢賬戶結(jié)余、審核最新交易情況,到在賬戶間進(jìn)行轉(zhuǎn)賬、支付帳單。移動銀行的實現(xiàn)技術(shù),從最先采用的基于STK卡的短消息方式,到WAP方式、基于信令通道的USSD方式,移動通信網(wǎng)絡(luò)道2.5代又出現(xiàn)了KJava方式,它是專門用于嵌入式設(shè)備的Java應(yīng)用,是Java技術(shù)在無線小終端設(shè)備上的延伸。J2ME平臺技術(shù)擴(kuò)大了Java技術(shù)的使用范圍。這種多功能的KJava應(yīng)用程序開發(fā)平臺,可以開發(fā)許多新的功能強(qiáng)大的信息產(chǎn)品。KJava技術(shù)可以使用戶、服務(wù)提供商、設(shè)備制造商通過物理連接或無線連接,按照需要隨時使用豐富的應(yīng)用程序。J2ME的配置和框架使得信息設(shè)備的靈活性,包括計算機(jī)技術(shù)和應(yīng)用程序安裝方式等方面得到很大提高。其優(yōu)勢有(1)實時在線,交互式對話。(2)圖形化界面,操作非常友好。(3)采用一些1024位的RSA認(rèn)證加密技術(shù)和128位的三重DES加密技術(shù),安全性相對較高。服務(wù)簡介目前移動銀行實現(xiàn)的系統(tǒng)結(jié)構(gòu)如圖3.1所示,主要有應(yīng)用系統(tǒng)、具體實現(xiàn)技術(shù)的接口、移動設(shè)備以及移動設(shè)備使用的軟件3部分組成。由于“移動銀行”本身就是一個非常大型的應(yīng)用系統(tǒng),本次畢業(yè)設(shè)計不可能完全實現(xiàn)。本次設(shè)計主要模擬移動銀行的繳費查詢系統(tǒng),實現(xiàn)一個通過網(wǎng)絡(luò)訪問服務(wù)器系統(tǒng)的功能,而且是重在企業(yè)級的程序開發(fā)設(shè)計的方面。圖3.1移動銀行的系統(tǒng)結(jié)構(gòu)整體設(shè)計本次設(shè)計的內(nèi)容重點不在于如何模擬移動銀行的功能,而在于如何設(shè)計一個大型系統(tǒng),如何是MIDP客戶端更好的與J2EE服務(wù)器端的程序結(jié)合起來。[12]繳費查詢系統(tǒng)的整體結(jié)構(gòu)如圖3.2所示??蛻舳顺绦蚩梢韵蚍?wù)器端查詢信息,服務(wù)器接受到請求查詢的信息以后,則查詢數(shù)據(jù)庫相關(guān)信息,然后返回結(jié)果給客戶端。圖3.2整體結(jié)構(gòu)圖系統(tǒng)將簡單地實現(xiàn)查詢繳費清單和用戶登錄兩個功能,但是使用了整體系統(tǒng)設(shè)計地方法,衡容易擴(kuò)展許多其它的功能,其實就是一個小型的企業(yè)級應(yīng)用的程序開發(fā)框架。繳費查詢系統(tǒng)的功能模塊系統(tǒng)涉及的功能有查詢繳費清單和用戶登錄,使用屏幕劃分不同的功能,每個屏幕類僅僅作為屏幕的實現(xiàn)功能,并不處理數(shù)據(jù)實際獲得的方式。在服務(wù)器端只用一個Servlet處理屏幕類的請求,需要在實現(xiàn)屏幕類的相關(guān)功能中使用一個消息通知服務(wù)器,究竟是哪一個模塊請求了申請服務(wù)器響應(yīng),因此設(shè)計了一個客戶端和服務(wù)器端公用的消息常量的類(MessageConstants.java)。如圖3.3所示,每個模塊都可以通過發(fā)送自己被分配的消息給服務(wù)器,然后可以根據(jù)具體消息處理不同的模塊。圖3.3功能模塊網(wǎng)絡(luò)處理模塊的設(shè)計MVC是一種目前廣泛流行的設(shè)計模式,近來,隨著J2EE的成熟,它正在成為在J2EE平臺上推薦的一種設(shè)計模式,也是廣大Java開發(fā)者非常感興趣的設(shè)計模式。模型層負(fù)責(zé)表達(dá)何訪問商業(yè)數(shù)據(jù),執(zhí)行商業(yè)邏輯和操作。也就是說,這一層就是現(xiàn)實生活中功能的軟件模型;在模型層變化的時候,它將通知試圖層并提供后者訪問自身狀態(tài)的能力,同時控制層也可以訪問其功能函數(shù)以完成相關(guān)的任務(wù)。視圖層負(fù)責(zé)顯示模型層的內(nèi)容。它從模型層取得數(shù)據(jù)并指定這些數(shù)據(jù)如何被顯示出來。在模型層變化的時候,它將自動更新。另外視圖層也會將用戶的輸入傳遞給控制器??刂茖迂?fù)責(zé)定義應(yīng)用程序的行為。它可以分派用戶的請求并選擇適當(dāng)?shù)囊晥D以用于顯示,同時它也可以解釋用戶的輸入并將它們映射為模型層科執(zhí)行的操作;在一個圖形界面中,常見的用戶輸入包括點擊按鈕和菜單選擇。在手機(jī)網(wǎng)絡(luò)應(yīng)用中,它包括聯(lián)網(wǎng)中的HTTP、GET和POST的請求;控制層可以基于用戶的交互和模型層的操作結(jié)果的選擇下一個可以顯示的視圖,一個應(yīng)用程序通常會基于一組相關(guān)的功能設(shè)定一個控制層的模塊,甚至一項應(yīng)用程序會根據(jù)不同的用戶類型具有不同的控制層設(shè)定,這主要是由于不同用戶的視圖交互和選擇也是不同的。在模型層、視圖層和控制層之間劃分責(zé)任可以減少代碼的重復(fù)度,并使用戶程序維護(hù)起來更簡單。同時由于數(shù)據(jù)和商務(wù)邏輯的分開,在新的數(shù)據(jù)源加入和數(shù)據(jù)顯示變化的時候,數(shù)據(jù)處理也會變得更簡單。雖然J2ME編寫手機(jī)軟件的時候考慮到程序發(fā)布時候文件的大小,應(yīng)該盡量減少程序的數(shù)量,但是對于移動銀行來說,可以隨時添加新的功能,所以應(yīng)該安裝MVC模式來構(gòu)造客戶端程序的,以方便將來功能上的擴(kuò)充。因此設(shè)計一個HTTPCommunication類,負(fù)責(zé)提供所有客戶端屏幕所需要的數(shù)據(jù)。如圖3.4所示,登錄屏幕、繳費信息屏幕和用戶信息屏幕都需要向控制器HTTPCommunication請求獲得數(shù)據(jù),而HTTPCommunication類中具體實現(xiàn)通用的連接網(wǎng)絡(luò),以及實現(xiàn)為提供給請求的屏幕所需的數(shù)據(jù)函數(shù)。圖3.4MVC結(jié)構(gòu)圖用戶界面程序的主屏幕就是一個簡單的列表屏幕,如圖3.5所示,主屏幕把程序擁有的功能顯示出來,然后科以根據(jù)手機(jī)用戶選擇了哪一個具體的功能而調(diào)用不同的屏幕類。圖3.5主屏幕根據(jù)MVC的思路,客戶端的屏幕類應(yīng)該設(shè)計為僅僅作為顯示,并盡量不處理任何實際的邏輯上的功能,程序設(shè)計了3個基本的屏幕,登錄屏幕、查詢屏幕和設(shè)置賬戶屏幕。登錄屏幕如圖3.6所示,提供了輸入用戶名和秘密的功能。查詢屏幕如圖3.7所示,把獲得的信息顯示到屏幕。設(shè)置賬戶屏幕如圖3.8所示,提供輸入用戶信用卡到一些基本功能。圖3.6登錄屏幕圖3.7查詢屏幕圖3.8設(shè)置賬戶屏幕服務(wù)器服務(wù)器介紹服務(wù)器端端程序負(fù)責(zé)對客戶端的請求進(jìn)行處理和訪問數(shù)據(jù)庫,以及盡量把需要的計算都放在服務(wù)器上運行。本次設(shè)計運用JBOSS服務(wù)器。JBOSS是一個運行EJB的J2EE應(yīng)用服務(wù)器,它是開放源代碼的項目,遵循最新的J2EE規(guī)范。JBOSS自帶了一個小型數(shù)據(jù)庫Hypersonic,本次設(shè)計使用Hypersonic數(shù)據(jù)庫作為服務(wù)器端程序的數(shù)據(jù)存儲數(shù)據(jù)庫。編寫服務(wù)器端Servlet服務(wù)器需要對從客戶發(fā)送過來的然后根據(jù)客戶端發(fā)送過來的消息類型而執(zhí)行不同的函數(shù)加以響應(yīng)客戶端的請求,然后執(zhí)行相應(yīng)的代碼,完成一定的功能,并把結(jié)果返回給客戶端。如圖3.9所示,客戶端可能同時發(fā)送多個不同的消息請求不同的服務(wù),所以服務(wù)器端應(yīng)該根據(jù)接收到的不同消息而轉(zhuǎn)向不同的功能模塊,分別處理客戶端不同的請求。圖3.9服務(wù)器端和客戶端信息交流示意圖結(jié)論本次畢業(yè)設(shè)計模擬了一個銀行繳費查詢系統(tǒng)的一個小的功能,僅僅完成了登錄和查詢信息的功能,用戶查詢繳費情況是通過服務(wù)器的Servlet程序訪問數(shù)據(jù)庫的信息后得到的。本次設(shè)計不再是客戶端和服務(wù)器端的簡單交流,而著重關(guān)注于如何設(shè)計一個有實際應(yīng)用價值的系統(tǒng)框架,可以在這個框架的基礎(chǔ)上容易添加更多的功能,并且程序的維護(hù)更加的方便。雖然J2ME不能完全使用J2EE的設(shè)計模式,但是可以參考它們的一些思想,把它運用到實際當(dāng)中去。下一階段到工作就是在這一框架上添加更多的功能,例如對帳、行內(nèi)轉(zhuǎn)帳、跨行轉(zhuǎn)帳、信貸、網(wǎng)上證券、投資理財以及其它貿(mào)易或非貿(mào)易的全方位銀行業(yè)務(wù)服務(wù)。同時,隨著J2ME技術(shù)的飛快發(fā)展,如何更有效的學(xué)習(xí)掌握這一技術(shù)也是下一階段的重點。致謝本次畢業(yè)設(shè)計完成過程中,得到了指導(dǎo)老師xxx老師的大力幫助,并參閱了諸多的參考文獻(xiàn)資料,在此對xxx教授及各文獻(xiàn)作者的辛勤勞動一并表示深深的感謝!同時,學(xué)院領(lǐng)導(dǎo)的關(guān)心和幫助,讓本人得到了一個學(xué)習(xí)和鍛煉的機(jī)會,謹(jǐn)致以衷心的感謝和崇高的敬意!另外,家人的支持能夠使我安心投入到畢業(yè)設(shè)計之中,在此對我的家人表達(dá)我的謝意!參考文獻(xiàn)[1]JamesKeogh.J2ME開發(fā)大全[M].北京:清華大學(xué)出版社,2004:25-460.[2]EricGiguere.J2MEProgrammingGuide[EB/OL]./2006/07/19/the-j2me-programming-guide/,2006.[3]MichaelJuntaoYuan.EnterpriseJ2ME:DevelopeingMobileJavaApplication[M].美國::PrenticeHallPTR,2003:50-97.[4]MartinJ.Wells.J2MEGameProgramming[M].美國:PremierPress,2004:25-57.[5]詹建飛.J2ME開發(fā)精解[M].北京:電子工業(yè)出版,2006:20-121.[6]KimTopley.J2ME技術(shù)手冊[M].北京:中國電力出版社,2004:50-201.[7]施錚.J2ME技術(shù)參考手冊[M].北京:電子工業(yè)出版社,2004:20-65.[8]李偉章.移動數(shù)據(jù)通信技術(shù)與業(yè)務(wù)[M].北京:人民郵電出版社,2006:12-50.[9]VikramGoyal.J2METutorial[EB/OL]./pub/a/today/2005/02/09/j2me1.html,2005.[10]MichaelKroll,StefanHaustein.J2MEApplicationDevelopment[M].美國:SamsPublishing,2002:10-22.[11]劉杰,段曉勇,黃麒麟.基于J2ME的Java手機(jī)應(yīng)用程序的開發(fā)[J].科技廣場,2007(1):66-68.[12]韓冬,賀東鴻.MIDlet與J2EE結(jié)合開發(fā)移動商務(wù)應(yīng)用[J].計算機(jī)與數(shù)字工程,2006,34(12):188-191.[13]張新猛.基于J2ME/J2EE構(gòu)建移動CRM系統(tǒng)[J].福建電腦,2007(2):125-126.[14]任繼濤.基于J2ME的移動無線應(yīng)用開發(fā)[J].青海大學(xué)學(xué)報(自然科學(xué)版),2006,24(6):74-78.[15]丁俊松,石蕾,王鵬飛.J2ME在電子商務(wù)中的應(yīng)用[J].計算機(jī)系統(tǒng)應(yīng)用,2006(12):37-39.[16]王聰,夏德洲.基于J2ME的手機(jī)應(yīng)用程序界面的描繪[J].十堰職業(yè)技術(shù)學(xué)院學(xué)報,2006,19(5):82-83.[17]張璞,文登敏.基于J2ME和J2EE的移動電子商務(wù)系統(tǒng)研究[J].成都信息工程學(xué)院學(xué)報,2006,21(4):504-507.[18]丁月華.基于J2ME的手機(jī)程序開發(fā)與研究[J].武漢工業(yè)學(xué)校學(xué)報,2006,25(3):40-44.[19]陳天煌,張錦恒.基于J2ME/Servlet技術(shù)的應(yīng)用開發(fā)與研究[J].交通與計算機(jī),2006,24(3):116-119.[20]吳敏,劉萍.基于J2ME和J2EE的手機(jī)銀行設(shè)計與實現(xiàn)[J],微計算機(jī)信息,2006,07Z:294-296.附錄主要源程序//控制器,負(fù)責(zé)提供客戶端屏幕顯示所需的數(shù)據(jù)packagebankbillClent;importjavax.microedition.io.*;importshared.*;importjava.io.*;publicclassHTTPCommunication{ privateStringserviceURL; privatebooleanoffline=true; privateProgressObserverUIprogressObserverUI=null; publicHTTPCommunication(StringserviceURL,ProgressObserverUIprogressObserverUI){ this.serviceURL=serviceURL; gressObserverUI=progressObserverUI; return; } //判斷是否正在聯(lián)網(wǎng) publicbooleanisOffline(){ returnoffline; } publicvoidsetOffline(booleanoffline){ this.offline=offline; return; } //處理登陸模塊的功能 publicbooleanlogin(StringuserName,Stringpassword){ intpassed=0; HttpConnectionconnection=null; DataOutputStreamoutputStream=null; DataInputStreaminputStream=null; try{ connection=openConnection(); updateProgress(); outputStream=openConnectionOutputStream(connection); //發(fā)送登陸的消息給服務(wù)器 outputStream.writeByte(MessageConstants.OPERATION_LOGIN_USER); //發(fā)送登陸消息 outputStream.writeUTF(userName); outputStream.writeUTF(password); outputStream.close(); //進(jìn)度條往前前進(jìn)一步 updateProgress(); //獲得服務(wù)器上傳過來的消息 inputStream=openConnectionInputStream(connection); passed=inputStream.readInt(); System.out.println(passed); updateProgress(); }catch(IOExceptionioe){ }finally{ closeConnection(connection,outputStream,inputStream); } //如果服務(wù)器返回1,則表示登陸成功 if(passed==1) returntrue; else returnfalse; } //處理繳費模塊的功能 publicBillInfo[]getBillData()throwsIOException{ HttpConnectionconn=null; DataOutputStreamoutputStream=null; DataInputStreaminputStream=null; try{ conn=openConnection(); updateProgress(); outputStream=openConnectionOutputStream(conn); outputStream.writeByte(MessageConstants.OPERATION_LIST_ACCOUNT); if(conn.getResponseCode()==HttpConnection.HTTP_OK){ inputStream=openConnectionInputStream(conn); updateProgress(); intlength=(int)conn.getLength(); if(length>0){ intnum=inputStream.readInt(); BillInfo[]binfo=newBillInfo[num]; //把清單列表存儲到數(shù)組中 for(inti=0;i<num;i++){ byte[]data=newbyte[inputStream.readInt()]; //讀取數(shù)據(jù) inputStream.read(data); binfo[i]=newBillInfo(); binfo[i].deserialize(data); } updateProgress(); returnbinfo; } } }catch(Exceptione){ System.out.println(e.toString()); }finally{ if(progressObserverUI!=null){ progressObserverUI=null; } closeConnection(conn,outputStream,inputStream); } returnnull; } //處理用戶消息更新模塊的功能 publicbooleanupdateAccount(AccountInfoaccountInfo){ intpassed=0; HttpConnectionconnection=null; DataOutputStreamoutputStream=null; DataInputStreaminputStream=null; try{ connection=openConnection(); updateProgress(); outputStream=openConnectionOutputStream(connection); outputStream.writeByte(MessageConstants.OPERATION_UPDATE_ACCOUNT); byte[]data=accountInfo.serialize(); outputStream.writeInt(data.length); outputStream.write(data); outputStream.close(); updateProgress(); inputStream=openConnectionInputStream(connection); passed=inputStream.readInt(); updateProgress(); }catch(IOExceptionioe){ }finally{ closeConnection(connection,outputStream,inputStream); } if(passed==1) returntrue; else returnfalse; } privateHttpConnectionopenConnection()throwsIOException{ try{ HttpConnectionconnection=(HttpConnection)Connector.open(serviceURL); connection.setRequestProperty("User-Agent","BANKBILL1.0/MIDP-2.0Configuration/CLDC-1.1"); connection.setRequestProperty("Content-Type","application/octet-stream"); connection.setRequestMethod(HttpConnection.POST); offline=false; returnconnection; }catch(IOExceptionioe){ offline=true; throwioe; } } privateDataOutputStreamopenConnectionOutputStream(HttpConnectionconnection)throwsIOException{ try{ returnconnection.openDataOutputStream(); }catch(IOExceptionioe){ offline=true; throwioe; } } privateDataInputStreamopenConnectionInputStream(HttpConnectionconnection)throwsIOException{ try{ intresponseCode=connection.getResponseCode(); if(responseCode==HttpConnection.HTTP_OK){ DataInputStreaminputStream=connection.openDataInputStream(); returninputStream; } }catch(IOExceptionioe){ offline=true; } returnnull; } voidcloseConnection(HttpConnectionconnection,DataOutputStreamoutputStream,DataInputStreaminputStream){ if(outputStream!=null){ try{ outputStream.close(); }catch(IOExceptionioe){ } } if(inputStream!=null){ try{ inputStream.close(); }catch(IOExceptionioe){ } } if(connection!=null){ try{ connection.close(); }catch(IOExceptionioe){ } } return; } protectedvoidupdateProgress(){ if(progressObserverUI!=null){ if(!progressObserverUI.isStopped()){ progressObserverUI.updateProgress(); return; } } }}//服務(wù)器Servlet設(shè)計packagebankbill;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjavax.naming.InitialContext;importjavax.servlet.ServletConfig;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.sql.DataSource;importshared.*;publicclassBankBillServletextendsHttpServlet{ /** * */ privatestaticfinallongserialVersionUID=5446079542560335435L; protectedstaticfinalStringDBName="java:/DefaultDS"; privateDataSourcedataSource; publicvoidinit(ServletConfigconfig)throwsServletException{ try{ InitialContextic=newInitialContext(); dataSource=(DataSource)ic.lookup
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 提前解除勞動合同的賠償計算與支付方式
- 聯(lián)合經(jīng)營協(xié)議書范本
- 證人保證書范文2024年
- 買賣定金合同協(xié)議書
- 2024年外墻施工分包合同范本
- 2024中國銀行信托投資公司外匯固定資產(chǎn)貸款合同
- 互聯(lián)網(wǎng)投資合作協(xié)議書怎么寫
- 2024設(shè)備保修合同模板
- 土方設(shè)備互換協(xié)議
- 2024年二手車轉(zhuǎn)讓合同模板
- 項目主要施工管理人員情況
- 個人借條電子版模板
- 關(guān)于學(xué)習(xí)“國語普通話”發(fā)聲亮劍【三篇】
- 玻璃廠應(yīng)急預(yù)案
- 嬰幼兒游戲照料(嬰幼兒回應(yīng)性照護(hù)課件)
- 貨車進(jìn)入車間安全要求
- MAC地址-廠商對應(yīng)表
- 2022年中國出版業(yè)總體狀況分析
- BIM大賽題庫含答案
- 造紙術(shù)學(xué)習(xí)課件
- (完整版)譯林版四年級上冊Unit7單元測試
評論
0/150
提交評論