版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
畢業(yè)設(shè)計(jì)(論文)第PAGEII頁(yè)P(yáng)AGEI畢業(yè)設(shè)計(jì)(論文)第PAGEI頁(yè)基于J2ME技術(shù)的手機(jī)網(wǎng)上繳費(fèi)查詢的設(shè)計(jì)與實(shí)現(xiàn)摘要本次畢業(yè)設(shè)計(jì)設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)移動(dòng)Web服務(wù)的框架,所謂移動(dòng)Web服務(wù),是一種讓人們使用移動(dòng)電話、PDA等無(wú)線通訊設(shè)備接入Internet的全新接入方式,通過(guò)這類(lèi)服務(wù)的用戶可以享受到高速的無(wú)線傳輸,包括Internet上的各類(lèi)新聞、在線游戲、銀行各種網(wǎng)上業(yè)務(wù)等一系列網(wǎng)絡(luò)應(yīng)用服務(wù)。本文的工作主要集中在:詳細(xì)闡述開(kāi)發(fā)移動(dòng)Web服務(wù)所需要的兩種關(guān)鍵技術(shù)(J2ME和HTTP)的工作原理。利用自己的開(kāi)發(fā)實(shí)例分析了移動(dòng)Web服務(wù)的主要編程思想,即MIDP(MobileInformationDeviceProfile)網(wǎng)絡(luò)程序設(shè)計(jì),以及J2ME(Java2PlatformMicroEdition)技術(shù)與HTTP(HypertextTransferProtocol,超文本傳輸協(xié)議)技術(shù)的結(jié)合。本文具體展示了作者如何實(shí)現(xiàn)移動(dòng)Web服務(wù)的客戶端,其中包含以下工作:首先,提出了一個(gè)完整的移動(dòng)Web服務(wù)的解決方案,包括客戶端與服務(wù)器的結(jié)構(gòu)框架;其次,實(shí)現(xiàn)了移動(dòng)Web服務(wù)中的查詢繳費(fèi)清單的功能。本論文程序涉及9個(gè)J2ME類(lèi)和一個(gè)Servlet類(lèi)。關(guān)鍵詞:J2ME,HTTP,移動(dòng)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開(kāi)發(fā)的優(yōu)勢(shì)和不足71.3.1 優(yōu)勢(shì)71.3.2 劣勢(shì)81.4 MIDP應(yīng)用程序編寫(xiě)91.4.1 MIDP的UI91.4.2 MIDP的API91.4.3 什么是MIDlet101.4.4 一個(gè)MIDlet例子111.4.5 MIDP軟件包132 MIDP無(wú)線網(wǎng)絡(luò)開(kāi)發(fā)142.1 概述142.2 使用Http進(jìn)行網(wǎng)絡(luò)連接152.2.1 J2ME與服務(wù)器交互信息163 移動(dòng)Web服務(wù)的實(shí)現(xiàn)183.1 移動(dòng)Web服務(wù)的背景183.2 服務(wù)簡(jiǎn)介193.3 整體設(shè)計(jì)193.4 繳費(fèi)查詢系統(tǒng)的功能模塊203.5 網(wǎng)絡(luò)處理模塊的設(shè)計(jì)213.6 用戶界面223.7 服務(wù)器243.7.1 服務(wù)器介紹243.7.2 編寫(xiě)服務(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移動(dòng)銀行的系統(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è)計(jì)(論文)第2頁(yè)Java2MicroEdition概述引言隨著無(wú)線通訊時(shí)代的來(lái)臨,通訊行業(yè)的前景相當(dāng)廣闊。手機(jī)的功能越來(lái)越強(qiáng)大,使得更多的廠商相繼投入到無(wú)線通訊設(shè)備的生產(chǎn)與開(kāi)發(fā)中,其平臺(tái)和操作系統(tǒng)比起目前的PDA更加復(fù)雜。除了Symbian針對(duì)手機(jī)推出的EPOC操作系統(tǒng)之外,微軟在手機(jī)上的操作系統(tǒng)Stinger也己經(jīng)亮相,但是目前市面上的手機(jī)仍然多以廠商自行開(kāi)發(fā)的操作系統(tǒng)居多。同時(shí),在進(jìn)行針對(duì)無(wú)線設(shè)備的應(yīng)用開(kāi)發(fā)時(shí),開(kāi)發(fā)者面臨著三個(gè)主要問(wèn)題:開(kāi)發(fā)工具的適用性、擁有實(shí)際的無(wú)線應(yīng)用測(cè)試環(huán)境以及可靠和可伸縮的服務(wù)支持。到目前為止,造成這些問(wèn)題的部分原因是缺少針對(duì)無(wú)線設(shè)備的開(kāi)放和一致性的應(yīng)用開(kāi)發(fā)環(huán)境,以及缺少適當(dāng)?shù)臒o(wú)線應(yīng)用基礎(chǔ)設(shè)施。J2ME[1](Java2PlatformMicroEdition)編程語(yǔ)言和技術(shù)為解決這些問(wèn)題鋪平了道路。因?yàn)镴ava語(yǔ)言是跨平臺(tái)運(yùn)行的,即Java的“writeonce,runanywhere”特性,這一特性使Java技術(shù)將一大批設(shè)備(從服務(wù)器到臺(tái)式機(jī)和移動(dòng)設(shè)備)集中到一種語(yǔ)言和一種技術(shù)之下。雖然這些設(shè)備的應(yīng)用不同,但Java技術(shù)為這些不同點(diǎn)起到了橋梁的作用,使原本致力于單一領(lǐng)域的開(kāi)發(fā)人員能將其技能發(fā)揮到跨越不同設(shè)備和應(yīng)用的領(lǐng)域,同時(shí),J2ME也被定義為一種以廣泛的消費(fèi)性產(chǎn)品為目標(biāo)的的高度優(yōu)化的Java運(yùn)行環(huán)境。[15]在本文中,主要介紹在J2ME環(huán)境下如何實(shí)現(xiàn)移動(dòng)Web服務(wù)。文章中著重闡述了J2ME如何結(jié)合HTTP技術(shù)實(shí)現(xiàn)移動(dòng)Web服務(wù)的過(guò)程。從而展示出在手機(jī)平臺(tái)上實(shí)現(xiàn)移動(dòng)Web服務(wù)的廣闊前景。本文組織如下:第一章介紹了J2ME的基本概念和體系結(jié)構(gòu),以及它的優(yōu)勢(shì)與不足。第二章闡述了HTTP的基本概念和主要功能,以及在Web服務(wù)中的應(yīng)用優(yōu)勢(shì)。第三章是本文的重點(diǎn),詳細(xì)闡述了一個(gè)移動(dòng)Web服務(wù)的工作原理和實(shí)現(xiàn)過(guò)程。J2ME的體系結(jié)構(gòu)J2ME基本概念Java是SunMicrosystems公司在1995年中推出的一套程序語(yǔ)言兼平臺(tái)。Sun在JDK1.2版公開(kāi)后將Java改名為Java2,并重新定義了Java技術(shù)的架構(gòu),將其分為3個(gè)版本:[2](1)企業(yè)版(J2EE-Java2EnterpriseEdition)(2)標(biāo)準(zhǔn)版(J2SE-Java2StandardEdition)(3)袖珍版(J2ME-Java2MicroEdition)J2EE適用于服務(wù)器,面向以企業(yè)為環(huán)境的應(yīng)用程序的開(kāi)發(fā);J2SE適用于一般的計(jì)算機(jī),為桌面開(kāi)發(fā)和低端的商務(wù)應(yīng)用提供了可行的解決方案;J2ME則適用于消費(fèi)型電子產(chǎn)品,是致力于消費(fèi)產(chǎn)品和嵌入式設(shè)備開(kāi)發(fā)的最佳選擇。如下圖所示:圖SEQ圖\*ARABIC1.1J2ME、J2SE與J2EE之間的比較SunMicrosystems將J2ME定義為“一種以廣泛的消費(fèi)性產(chǎn)品為目標(biāo)的高度優(yōu)化的Java運(yùn)行時(shí)環(huán)境,包括移動(dòng)電話、可視電話、數(shù)字機(jī)頂盒和汽車(chē)導(dǎo)航系統(tǒng)。”也就是說(shuō),J2ME是為無(wú)線電子市場(chǎng)所設(shè)計(jì)的,它包括JVM規(guī)范和API規(guī)范。其API規(guī)范是基于J2SE的。J2ME定義了一套合適的類(lèi)和虛擬機(jī)技術(shù)。這些技術(shù)可以使用戶、服務(wù)提供商和設(shè)備制造商通過(guò)物理(有限)連接或無(wú)線連接,按照需要隨時(shí)使用豐富的應(yīng)用程序。J2ME總體架構(gòu)(1)概述J2ME使用配置層(Configuration)和架構(gòu)層(Profile)定制Java運(yùn)行時(shí)環(huán)境(JRE),作為一個(gè)完整的JRE,配置決定了使用的Java虛擬機(jī)(JVM),而框架則通過(guò)添加特定于域的類(lèi)來(lái)定義應(yīng)用程序。(2)配置層配置層包括虛擬機(jī)(virtualmachine)、核心的類(lèi)庫(kù)和API[9]。配置層向開(kāi)發(fā)人員提供了一個(gè)最基礎(chǔ)和最核心的Java平臺(tái)。它將基本運(yùn)行時(shí)環(huán)境定義為一組核心類(lèi)和一個(gè)運(yùn)行在特定類(lèi)型設(shè)備上的特定JVM。J2ME定義了兩種類(lèi)型設(shè)備:連接設(shè)備(connecteddevice)和有限連接設(shè)備(limitedconnecteddevice)。連接設(shè)備是指那些有電源的、電力充沛的、較大的設(shè)備,有32位或64位處理器,超過(guò)512k的存儲(chǔ)器。例如:智能通信器、交互式數(shù)字、電視機(jī)頂盒等。有限連接設(shè)備主要使用電池,小型的設(shè)備,具有16位或32位處理器,可用內(nèi)存為160-512kb。例如:手機(jī)、PDA等。對(duì)應(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ī)的大小和類(lèi)庫(kù)以減小為50-80kb目標(biāo)代碼的標(biāo)準(zhǔn);存儲(chǔ)器占用已經(jīng)減小為幾十K字節(jié)的標(biāo)準(zhǔn);在具有16位和32位處理器的設(shè)備上,性能有效;體系結(jié)構(gòu)是高可移植的,基于特定機(jī)器和平臺(tái)的代碼很少;多線程和垃圾回收是獨(dú)立于系統(tǒng)的;可以對(duì)虛擬機(jī)的組件進(jìn)行配置,以適合于特定設(shè)備。(3)框架層框架層定義了應(yīng)用程序所支持的設(shè)備類(lèi)型。它也包含一組API,主要針對(duì)于特定的某一族系的設(shè)備而定義的。框架層在特定的配置層上實(shí)現(xiàn),而應(yīng)用則是建立在特定的框架層上。對(duì)于手機(jī)、PDA等CLDC設(shè)備的框架層我們稱為“移動(dòng)信息設(shè)備框架”MIDP(MobileInformationDeviceProfile)。MIDP與CLDC和在一起就構(gòu)成了一個(gè)完整的J2ME架構(gòu)。如下圖為J2ME體系結(jié)構(gòu)的框架圖:圖1.SEQ圖\*ARABIC2CLDC/MIDP架構(gòu)說(shuō)明:在CLDC之上有兩類(lèi)API:-MIDPAPIs:這些APIs正是MIDPv.0規(guī)范所要定義的APIs.-OEM-specificAPIs:MIDP規(guī)范所涉及的無(wú)線通訊設(shè)備多種多樣,因此它不可能涉及所有設(shè)備的需求。因此這一類(lèi)的APIs是由OEM廠商提供以便訪問(wèn)特定設(shè)備的特定功能。但基于這些APIs的應(yīng)用可能不能在其它的MIDP設(shè)備上運(yùn)行。MIDP應(yīng)用的種類(lèi):-MIDP:一個(gè)MIDP應(yīng)用或稱為MIDlet,它必需只使用MIDP和CLDC規(guī)范中所定義的APIs。該類(lèi)應(yīng)用能在應(yīng)是在MIDP設(shè)備上最常見(jiàn)的應(yīng)用。-OEM-specific:一個(gè)OEM-specific的應(yīng)用會(huì)使用一些不在MIDP中定義的APIs(OEM-specificclasses)。這些應(yīng)用不能在不同的MIDP設(shè)備上運(yùn)行。-Native:一個(gè)本地應(yīng)用使指用非Java語(yǔ)言編寫(xiě)的直接運(yùn)行于設(shè)備操作系統(tǒng)之上的應(yīng)用。在MIDP規(guī)范中不涉及OEM-specific和Native的應(yīng)用。J2ME在各種Java版本中的定位在Java2平臺(tái)下,Sun重新定義了Java技術(shù)的架構(gòu),將其分為三個(gè)版本。針對(duì)企業(yè)級(jí)應(yīng)用的J2EE(Java2EnterpriseEdition)、針對(duì)普通PC應(yīng)用的J2SE(Java2StandardEdition)和針對(duì)嵌入式設(shè)備及消費(fèi)類(lèi)電器的J2ME(Java2MicroEdition)三個(gè)版本。Java2規(guī)范中有一組所謂的核心類(lèi)別函數(shù)庫(kù)(CoreClass,即java.*),在核心類(lèi)別之外還有所謂的擴(kuò)充類(lèi)別函數(shù)庫(kù)(ExtendClass,即javax.*)。根據(jù)對(duì)這兩種類(lèi)別所支持的程度,SunMicrosystems從而區(qū)分出三種不同的Java版本:J2EEJ2EE是Sun公司推出的一種全新概念的模型,比傳統(tǒng)的互聯(lián)網(wǎng)應(yīng)用程序模型更具有優(yōu)勢(shì)。它是Java技術(shù)企業(yè)級(jí)應(yīng)用的最佳平臺(tái),可以讓程序員迅速、快捷地開(kāi)發(fā)企業(yè)級(jí)應(yīng)用程序。J2EE地應(yīng)用編程模型(JavaBlueprints)提供一種用于實(shí)施基于J2EE多層應(yīng)用的文檔和實(shí)施套件的體系模型,它要求開(kāi)發(fā)者將自己的工作分成兩類(lèi):商業(yè)邏輯和表示邏輯,其余則由系統(tǒng)資源自動(dòng)處理,不必為中間層管道進(jìn)行編碼。這樣開(kāi)發(fā)人員就能將更多的時(shí)間花在商業(yè)邏輯和表示邏輯上面。對(duì)重視縮短項(xiàng)目周期的公司來(lái)說(shuō),這種轉(zhuǎn)變深受歡迎。J2EE應(yīng)用程序的開(kāi)發(fā)階段分為四步:首先Enterprisebean創(chuàng)建;其次WebComponent創(chuàng)建;接下來(lái)J2EE應(yīng)用程序的裝配;最后J2EE應(yīng)用程序分布。J2EE除了支持所有的標(biāo)準(zhǔn)核心類(lèi)別函數(shù)庫(kù)以外,還增加了許多支持企業(yè)內(nèi)部使用的擴(kuò)充類(lèi)別函數(shù)庫(kù),比如支持Servlet/JSP的javax.servlet.*類(lèi)別函數(shù)庫(kù)、支持EnterpriseJavaBean的javax.ejb.*類(lèi)別函數(shù)庫(kù)。當(dāng)然,J2EE必定支持所有的Java基本類(lèi)別。J2EE定位在服務(wù)器端(server-side)程序的應(yīng)用上。J2SEJ2SE是一種開(kāi)發(fā)和部署平臺(tái),提供了編寫(xiě)桌面、工作站應(yīng)用程序所有必須的功能,是快速開(kāi)發(fā)、部署關(guān)鍵任務(wù)和企業(yè)應(yīng)用程序的首先解決方案。J2SE是基于Java跨平臺(tái)技術(shù)和強(qiáng)有力的安全模塊而開(kāi)發(fā)的,其特點(diǎn)在于:良好的計(jì)算性能和縮放能力;跨平臺(tái);支持Web服務(wù);完整性的開(kāi)發(fā)環(huán)境。J2SE是多種不同風(fēng)格軟件的開(kāi)發(fā)基礎(chǔ),包括客戶端Java小程序和應(yīng)用程序,以及獨(dú)立的服務(wù)器應(yīng)用程序等。J2SE還是J2ME的基礎(chǔ),是J2EE執(zhí)行程序的推動(dòng)力。J2SE包括了所有Java標(biāo)準(zhǔn)規(guī)格中所定義的核心類(lèi)別函數(shù)庫(kù),也支持所有的Java基礎(chǔ)類(lèi)別。J2SE定位在客戶端(Client-side)程序的應(yīng)用上。J2MEJ2ME只支持標(biāo)準(zhǔn)核心類(lèi)別函數(shù)庫(kù)的子集合,比如J2MECLDC規(guī)格中,只支持java.lang.*、java.io.*、java.util.*這些類(lèi)別函數(shù)庫(kù)。J2ME加入了一些支持嵌入式系統(tǒng)的擴(kuò)充類(lèi)別函數(shù)庫(kù),如javax.Microedition.io.*類(lèi)別函數(shù)庫(kù)。這個(gè)版本不支持所有的Java基本類(lèi)別,以標(biāo)準(zhǔn)J2MECLDC為例,也就是能在PalmOS上執(zhí)行的KVM來(lái)說(shuō),它就不支持浮點(diǎn)數(shù)(float,double)。J2ME定位在嵌入式系統(tǒng)的應(yīng)用。綜上所述,在以上每一種Java版本中,都有屬于它們自己的虛擬機(jī),從而達(dá)到“Writeonce,runanywhere”的目標(biāo)。而我們關(guān)注的J2ME世界里,包括兩種虛擬機(jī):KVM和CVM。KVM用來(lái)執(zhí)行下載到較低層次(硬件功能不強(qiáng))的嵌入式設(shè)備上的Spotlet或MIDlet,而CVM用來(lái)執(zhí)行較高層次(硬件功能相對(duì)較強(qiáng))的嵌入式設(shè)備上的Java程序。J2ME開(kāi)發(fā)的優(yōu)勢(shì)和不足優(yōu)勢(shì)移動(dòng)信息設(shè)備框架(MIDP)是對(duì)主要產(chǎn)品類(lèi)別的廣義分類(lèi),它為每個(gè)類(lèi)別定義了框架并要求產(chǎn)品生產(chǎn)商選擇和遵循某一個(gè)框架。以目前的GSM蜂窩電話為例,這類(lèi)設(shè)備遵循的框架都具有如下特性:擁有640KB的內(nèi)存、一個(gè)比較慢的處理器、有限的圖形能力和基于像素的文本顯示。用戶接口也非常簡(jiǎn)單:典型地是兩個(gè)側(cè)面按鈕用于向左、向右移動(dòng);一個(gè)中間按鈕提供上下滾屏和翻頁(yè)功能。J2ME最關(guān)鍵的優(yōu)勢(shì)是框架層(profile)是可擴(kuò)展的。它可以對(duì)原始的API進(jìn)行擴(kuò)充,以增加更多的系統(tǒng)功能,這一點(diǎn)使開(kāi)發(fā)人員獲益匪淺。由于技術(shù)是基于Java的,因此只需加入新的軟件包,就可以方便地增加新功能。因此,在設(shè)計(jì)新的設(shè)備模型時(shí),開(kāi)發(fā)者就不必重新切換到一組新的API。J2ME可以單獨(dú)運(yùn)行在一臺(tái)設(shè)備上,并向消費(fèi)者提供各種解決方案和服務(wù)。很明顯,簡(jiǎn)單的游戲、地址薄、日歷和日程安排應(yīng)用程序是開(kāi)發(fā)者首先要開(kāi)發(fā)的應(yīng)用,它們都能在現(xiàn)有設(shè)備上順利運(yùn)行。當(dāng)這些應(yīng)用能夠通過(guò)網(wǎng)絡(luò)從公司名稱數(shù)據(jù)庫(kù)、企業(yè)日歷或消息服務(wù)器上取回?cái)?shù)據(jù)時(shí),它們對(duì)企業(yè)的實(shí)際價(jià)值就顯現(xiàn)出來(lái)了。但是與過(guò)分單純的WAP(無(wú)線訪問(wèn)協(xié)議)瀏覽器必須反復(fù)從服務(wù)器獲取數(shù)據(jù)的做法不同,J2ME還提供了客戶端的智能。例如,通過(guò)WAP獲取數(shù)據(jù)時(shí),應(yīng)用必須不斷地從服務(wù)器上獲取信息,但如果使用J2ME。整卷數(shù)據(jù)就可以一次下載,然后通過(guò)獨(dú)立的應(yīng)用程序進(jìn)行離線閱讀。諸如Email信息、地址簿、下周日程安排等各種各樣的數(shù)據(jù)都可以高速緩存在本地設(shè)備上。除了由設(shè)備廠商提供的安全機(jī)制,J2ME還提供了本地的安全選項(xiàng)。這些選項(xiàng)包括一個(gè)或多個(gè)用戶訪問(wèn)時(shí)的本地口令、本地?cái)?shù)據(jù)加密后交由第三方保存,在需要時(shí)再取回,以及安全的點(diǎn)對(duì)點(diǎn)通信.開(kāi)發(fā)者不再受到設(shè)備自身有限選項(xiàng)的限制,也不再受帶寬服務(wù)提供商的限制。J2ME的客戶機(jī)也可以為服務(wù)器減輕負(fù)載。有兩個(gè)例子可以說(shuō)明:一個(gè)是基于Web的地址薄,另一個(gè)是格式化內(nèi)容。在利用WAP手機(jī)訪問(wèn)基于Web的地址搏應(yīng)用時(shí),用戶首先登錄到服務(wù)器,并向服務(wù)器提交一個(gè)請(qǐng)求;然后服務(wù)器搜索地址并將其呈送給客戶端。在這種情況下,每個(gè)新的地址條目或以前執(zhí)行過(guò)的查詢將一次又一次地提交給服務(wù)器。如果使用J2ME,地址薄的主要內(nèi)容或者整個(gè)地址薄可以一次發(fā)送過(guò)來(lái)并暫時(shí)存儲(chǔ)在手機(jī)上,如此一來(lái),每次搜索都是在本地手機(jī)上執(zhí)行,大大減少了對(duì)服務(wù)器的訪問(wèn)次數(shù)。劣勢(shì)利用J2ME進(jìn)行無(wú)線應(yīng)用開(kāi)發(fā)與桌面或企業(yè)計(jì)算應(yīng)用開(kāi)發(fā)有很大的不同。對(duì)桌面和企業(yè)計(jì)算應(yīng)用來(lái)說(shuō),開(kāi)發(fā)平臺(tái)通常與部署環(huán)境相同,任何人都可以提供有線網(wǎng)絡(luò)和應(yīng)用系統(tǒng)建立連接。但無(wú)線設(shè)備的情況恰好與之相反,在過(guò)去很長(zhǎng)時(shí)間內(nèi),無(wú)線設(shè)備都處于處理器性能低下、內(nèi)存和圖形用戶接口資源有限、網(wǎng)絡(luò)連接速度慢而不可靠的狀況中。所以其局限性是顯而易見(jiàn)的。(1)所有無(wú)線應(yīng)用開(kāi)發(fā)都主要通過(guò)軟件仿真程序完成,這些仿真程序極少有非常出色的。(2)無(wú)線設(shè)備的種類(lèi)繁多,沒(méi)有一種仿真程序能夠模擬所有的無(wú)線設(shè)備。最常見(jiàn)的情形是,在仿真程序中運(yùn)行很好的應(yīng)用程序部署到實(shí)際的設(shè)備中時(shí)卻對(duì)工作環(huán)境提出了一些特殊的怪異要求。MIDP應(yīng)用程序編寫(xiě)MIDP的UI如上所述,移動(dòng)信息設(shè)備框架(MIDP)適合類(lèi)似于移動(dòng)電話這樣的設(shè)備[3]。MIDP提供一種標(biāo)準(zhǔn)的運(yùn)行時(shí)環(huán)境,允許在終端用戶設(shè)備上動(dòng)態(tài)地配置新的應(yīng)用程序和服務(wù)。MIDP包括一個(gè)低級(jí)的UIAPI和一個(gè)高級(jí)的UIAPI.低級(jí)的API允許您完全訪問(wèn)一個(gè)設(shè)備的顯示屏,也允許訪問(wèn)原始鍵和指針事件。然而,使用低級(jí)API時(shí),沒(méi)有可用的用戶界面控件。應(yīng)用程序必須精確地繪制出按鈕和其它所有的控件。相反,高級(jí)API提供簡(jiǎn)單的用戶界面控件但不能直接訪問(wèn)原始的輸入事件或顯示屏。由于顯示屏的尺寸和MIDP設(shè)備輸入方法的差異,控件顯得很抽象。MIDP的實(shí)現(xiàn)確定了繪制控件的方法,也確定了如何管理用戶輸入。MIDP的APIMIDP包含四個(gè)核心CLDC軟件包(java.lang,Java.io,java.util和javax.mi-croedition.io),另加下面的三個(gè)特定于MIDP的軟件包:javax.microedition.lcduijavax.microedition.midletjavax.microedition.rms除了上面新的軟件包之外,MIDP還向核心CLDC軟件包添加了四個(gè)新類(lèi),如下所示:java.util.Timer――用于為后臺(tái)線程中將來(lái)要執(zhí)行的任務(wù)確定時(shí)間。Java.util.TimerTask――被java.util.Timer類(lèi)使用,用來(lái)為后臺(tái)線程中稍后的執(zhí)行定義任務(wù)。java.microedition.io.HttpConnection――一個(gè)接口,為HTTP連接定義必要的方法和常量。Java.lang.IllegalStateException――一個(gè)RuntimeException,指出在不合法或不合適的時(shí)間己經(jīng)調(diào)用的一個(gè)方法。什么是MIDletMIDlet是一個(gè)Java類(lèi),它擴(kuò)展了javax.microedition.midlet.MIDlet抽象類(lèi)。實(shí)現(xiàn)startApp()、pauseApp()和destroyApp()方法,這些方法類(lèi)似于J2SE的java.applet.Applet類(lèi)中的start()、stop()和destroy()方法。[18]除了擴(kuò)充javax.microedition.midlet.MIDlet的主MIDlet類(lèi)外,一個(gè)MIDlet應(yīng)用程序通常還包括其它一些類(lèi),這些類(lèi)隨它們的資源一起被打包成為jar文件――稱之為MIDlet套件。一個(gè)MIDlet套件中的不同MIDlet能共享jar文件的資源,盡管不同套件中的MIDlet不能被直接相互作用。MIDlet在應(yīng)用程序生命周期中有三個(gè)狀態(tài),分別是pause、active和destroyed。在啟動(dòng)一個(gè)MIDlet的時(shí)候,應(yīng)用管理軟件會(huì)首先創(chuàng)建一個(gè)MIDlet實(shí)例并使得他處于pause狀態(tài),當(dāng)startApp()方法被調(diào)用的時(shí)候MIDlet進(jìn)入active狀態(tài),也就是所說(shuō)的運(yùn)行狀態(tài)。在active狀態(tài)調(diào)用destroyApp(booleanunconditional)或者pauseApp()方法可以使得MIDlet進(jìn)入destroyed或者pause狀態(tài)。值得一提的是destroyApp(booleanunconditional)方法,事實(shí)上,當(dāng)destroyApp()方法被調(diào)用的時(shí)候,AMS通知MIDlet進(jìn)入destroyed狀態(tài)。在destroyed狀態(tài)的MIDlet必須釋放了所有的資源,并且保存了數(shù)據(jù)。如果unconditional為false的時(shí)候,MIDlet可以在接到通知后拋出MIDletStateChangeException而保持在當(dāng)前狀態(tài),如果設(shè)置為true的話,則必須立即進(jìn)入destroyed狀態(tài)。下圖說(shuō)明了MIDlet狀態(tài)改變情況:圖1.SEQ圖\*ARABIC3MIDlet狀態(tài)圖一個(gè)MIDlet例子這個(gè)MIDlet會(huì)在MIDP設(shè)備的顯示屏上顯示“HelloWorld!”和EXIT按鈕,按下EXIT按鈕,程序就會(huì)被終止。HelloWorld.java文件以下面的代碼行開(kāi)始,這些代碼行的作用是導(dǎo)入會(huì)在HelloWorld類(lèi)中使用的類(lèi)。importjavax.microedition.midlet.MIDlet;importjavax.microedition.lcdui.Display;importjavax.microedition.lcdui.Form;importjavax.microedition.Commandimportjavax.microedition.CommandListener//由于HelloWorld類(lèi)是一個(gè)MIDlet應(yīng)用程序,它擴(kuò)展了MIDlet,也實(shí)現(xiàn)CommandListener接口來(lái)處理事件publicclassHelloWorldextendsMIDletimplementsCommandListener{privateDisplaydisplay;privateFormform;privateCommandexitCommand;//構(gòu)造函數(shù),創(chuàng)建一個(gè)表單,在上面初始化控件,然后顯示出來(lái)publicHelloWorld(){//創(chuàng)建一個(gè)Form對(duì)象用來(lái)顯示文本form=newForm("HelloWorld”);//創(chuàng)建一個(gè)Command對(duì)象exitCommand=newCommand(“Exit”,command.EXIT,1);//添加一個(gè)命令form.addCommand(exitCommand);//設(shè)置commandListenerform.setCommandListener(this);System.out.println("Constructor");
}
publicvoidstartApp()throwsMIDletStateChangeException{//獲得顯示對(duì)象,并且顯示formDisplay.getDisplay(this).setCurrnt(form);System.out.println("startAppiscalled.");}
//暫停程序publicvoidpauseApp(){
System.out.println("pauseAppiscalled.");
}
//銷(xiāo)毀程序publicvoiddestroyApp(booleanunconditional){
System.out.println("destroyAppiscalled.");
}//commandActive()方法是事件處理程序,被請(qǐng)求實(shí)現(xiàn)CommandListener接口publicvoidcommandActive(Commandc,Displayabled){//關(guān)閉這個(gè)MIDletif(c=exitCommand){try{destroyApp(false);}catch(MIDletStateChangeExceptionexception){System.out.println(“MIDletStateChangeException”);//向應(yīng)用程序管理器確認(rèn)這個(gè)應(yīng)用程序已經(jīng)進(jìn)入關(guān)閉狀態(tài)notifyDestroy();}}}MIDP軟件包除標(biāo)準(zhǔn)CLDC軟件包之外,MIDP還包含三個(gè)附加的軟件包。javax.microedition.lcdui――定義用來(lái)控制UI的類(lèi),這個(gè)軟件包既包含高級(jí)UI類(lèi)(例如Form、TextBox和Alter等),有包含低級(jí)UI類(lèi)(允許用低級(jí)方式控制控制UI)。java.microedition.midlet――包含MIDP主類(lèi)中的一個(gè)MIDP類(lèi),為MIDP應(yīng)用程序提供訪問(wèn)關(guān)于其運(yùn)行所在環(huán)境信息的權(quán)限。java.microedition.rms――定義一個(gè)類(lèi)的集合,這些類(lèi)為MIDlet提供了永久存儲(chǔ)并隨后重新得到數(shù)據(jù)的機(jī)制。MIDP無(wú)線網(wǎng)絡(luò)開(kāi)發(fā)概述Java的網(wǎng)絡(luò)編程能力是相當(dāng)健壯的。Java2標(biāo)準(zhǔn)版(J2SE)在java.io和程序包中定義了100多個(gè)接口程序,類(lèi)和異常。這些庫(kù)實(shí)現(xiàn)的功能是很強(qiáng)大的,但是這只適用于傳統(tǒng)的計(jì)算機(jī)系統(tǒng),這些計(jì)算機(jī)系統(tǒng)有強(qiáng)大的CPU處理能力,快速的內(nèi)存和持久的數(shù)據(jù)儲(chǔ)存,但是這些在大多數(shù)的無(wú)線設(shè)備上是不現(xiàn)實(shí)的。因此,J2ME定義了這些函數(shù)的子集[5],并提供了一套用于網(wǎng)絡(luò)和文件訪問(wèn)的固定的程序包一javax.microedition.io程序包[6]。由于可移動(dòng)設(shè)備種類(lèi)繁多,個(gè)程序包僅僅定義了一套接口,而為每個(gè)可移動(dòng)設(shè)備供應(yīng)廠商留下了實(shí)際的應(yīng)用程序接口實(shí)現(xiàn)。就在可移植性和設(shè)備特定特征的應(yīng)用中找到了一個(gè)最佳的平衡點(diǎn)。定義在javax.microedition.io類(lèi)中的抽象網(wǎng)絡(luò)和文件輸入輸出框架稱為通用連接框架(GenericConnectionFramework,簡(jiǎn)稱GCF)。[14]GCF定義了一套有關(guān)抽象化的內(nèi)容來(lái)描述不同的通信方法.最高級(jí)的抽象被稱作連接(Connection如),還聲明了六個(gè)接口(四個(gè)是直接的,兩個(gè)是間接的)。這七個(gè)接口就構(gòu)成了J2ME的CLDC的一部分。圖2.1MIDP的Connection接口層次在GenericConnectionFramework之中,定義了幾種常見(jiàn)的網(wǎng)絡(luò)連接方式。不管我們打算用何種方式同外界溝通,所有的連接都是由接口Connector類(lèi)的open()方法所開(kāi)始的:創(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ò)和文件輸入輸出框架,但是各個(gè)廠家并不一定支持GCF中聲明的所有的接口。有的廠家可以決定只支持socket連接,而其它的廠家可以選擇只支持基于Datagram的通信。為了促進(jìn)跨越類(lèi)似裝置的可移植性,MIDP規(guī)范要求所有的MIDP設(shè)備都必須實(shí)現(xiàn)HttpConnection接口。HttpConnection不是GCF的一部分,但是它是從GCF的一個(gè)接口ContentConnection衍生出來(lái)的。使用Http進(jìn)行網(wǎng)絡(luò)連接從上可知,HTTP協(xié)議是當(dāng)前僅有的,被所有的遵從MIDP規(guī)范的設(shè)備支持的網(wǎng)絡(luò)協(xié)議,它也是用于開(kāi)發(fā)無(wú)線網(wǎng)絡(luò)應(yīng)用程序的最好的候選者。在下面的例子中,玩家通過(guò)Http連接向Web服務(wù)器發(fā)出請(qǐng)求,要求查看幫助信息網(wǎng)頁(yè)help.html.其步驟如下:(1)在Connector.open()之中使用http作為通訊協(xié)議。如果Connector.open()與Web服務(wù)器連接成功,為了以后使用的方便,我們將它傳回到HttpConnection類(lèi)。代碼如下:Stringurl=/help.html;HttpConnectionhc=(HttpConnection)Connector.open(url);(2)利用HttpConnection的openInputStream打開(kāi)輸入流,如此才能取得Web服務(wù)器所回傳的資料。代碼如下:hc.openInputStream();(3)InputStream只能讀取二進(jìn)制資料,為了正確地讀取字符串,我們將InputStream和DataInputStream合并在一起使用。代碼如下:DataInputStreamdis=newDataInputStream(hr.openInputStream());(4)當(dāng)輸入流打開(kāi)以后,我們開(kāi)始利用DataInputStream類(lèi)的read()方法將收到的字節(jié)一個(gè)一個(gè)地讀取進(jìn)來(lái)。代碼如下:dis.read();我們將Web服務(wù)器傳過(guò)來(lái)的數(shù)據(jù)讀取完畢以后,再將資料一次性加到Form組件中,就可以一次顯示在手機(jī)屏幕上。在上面的例子中,我們只要指定了URL,Web服務(wù)器就可以立刻將網(wǎng)頁(yè)的內(nèi)容傳回來(lái)。其原理在于,當(dāng)我們下達(dá)命令:/help.html的時(shí)候,程序?qū)嶋H上執(zhí)行了兩個(gè)步驟:建立與上的port80的連接。送出Get/test.htmlHTTP/1.0\n\n指令。J2ME與服務(wù)器交互信息MIDP2.0的HTTP連接方式提供了兩種與服務(wù)器的網(wǎng)頁(yè)交互信息的方式,一種是Get方法,另一種是Post方法。目前客戶端訪問(wèn)網(wǎng)頁(yè)的方式是通過(guò)Java服務(wù)器使用的JSP和Servlet技術(shù)的,JSP技術(shù)是Servlet技術(shù)的擴(kuò)展,一般用于發(fā)送給客戶靜態(tài)文本和標(biāo)記,里面只有小部分的內(nèi)容是Java代碼動(dòng)態(tài)生成的,而客戶端的訪問(wèn)方式就如一般訪問(wèn)網(wǎng)頁(yè)的方式一樣,也是以閱讀網(wǎng)頁(yè)的形式閱讀JSP頁(yè)面的。事實(shí)上,一項(xiàng)Servlet不產(chǎn)生任何內(nèi)容,它們只是代表客戶執(zhí)行的一項(xiàng)任務(wù),然后調(diào)用其它的Servlet或JSP來(lái)提供響應(yīng)。如果把J2ME技術(shù)的手機(jī)設(shè)備作為類(lèi)型臺(tái)式機(jī)一樣的客戶端,則手機(jī)與JSP服務(wù)器交互的基本流程如圖2.2所示,首先,用戶在手機(jī)發(fā)出的請(qǐng)求信息被存儲(chǔ)在Response對(duì)象中并發(fā)送給Web服務(wù)器,JSP引擎(通常綁定在Web服務(wù)器上)根據(jù)JSP文件的指示處理Request對(duì)象,或者根據(jù)實(shí)際需要將Request對(duì)象轉(zhuǎn)發(fā)給由JSP文件所指定的其它服務(wù)器端組件(如Servlet組件、JavaBean組件或EJB組件等)來(lái)處理。處理結(jié)果則以Response對(duì)象的方式返回給JSP引擎,JSP引擎和Web服務(wù)器根據(jù)Response對(duì)象最終生成JSP頁(yè)面,返回給手機(jī)上的瀏覽器程序或者其它應(yīng)用程序,這也是手機(jī)上最終看到的內(nèi)容。用于客戶和服務(wù)器之間的通信協(xié)議最常用的是HTTP,此外也可以使用特定的私有協(xié)議。圖2.2J2ME客戶端與服務(wù)器端交互流程圖移動(dòng)Web服務(wù)的實(shí)現(xiàn)移動(dòng)Web服務(wù)的背景互聯(lián)網(wǎng)把全球的資訊和服務(wù)展現(xiàn)在電腦上,而移動(dòng)互聯(lián)網(wǎng)則是把全球的資訊和服務(wù)進(jìn)一步地濃縮到口袋中。這是一個(gè)全新地領(lǐng)域,其革命性地突破蘊(yùn)含了無(wú)限地商機(jī)。因此,世界上的各個(gè)行業(yè),無(wú)論是傳統(tǒng)的還是新型的,都把對(duì)移動(dòng)互聯(lián)網(wǎng)的開(kāi)發(fā)和應(yīng)用作為保持原有競(jìng)爭(zhēng)地位以及改變自己不利競(jìng)爭(zhēng)局面的重要籌碼。[13]其中銀行業(yè)務(wù)業(yè)不例外,所以就產(chǎn)生了移動(dòng)銀行計(jì)算機(jī)系統(tǒng)?!耙苿?dòng)銀行”又稱“手機(jī)銀行”,是利用移動(dòng)終端辦理銀行有關(guān)業(yè)務(wù)的簡(jiǎn)稱,是中國(guó)移動(dòng)通信集團(tuán)公司與銀行部門(mén)合作,聯(lián)合向社會(huì)推出的一個(gè)新服務(wù)項(xiàng)目,是移動(dòng)通信網(wǎng)絡(luò)上的一項(xiàng)電子商務(wù)。移動(dòng)銀行業(yè)務(wù)的開(kāi)通大大加強(qiáng)了移動(dòng)通信公司和銀行的競(jìng)爭(zhēng)實(shí)力。移動(dòng)銀行通過(guò)全球統(tǒng)GSM網(wǎng)絡(luò)將客戶手機(jī)連接至銀行,實(shí)現(xiàn)利用手機(jī)界面直接完成各種金融理財(cái)業(yè)務(wù)的服務(wù),主要功能涉及賬務(wù)查詢,自助繳費(fèi),銀行轉(zhuǎn)賬等。[20]移動(dòng)銀行是隨著短消息和WAP的應(yīng)用而提上日程的,正是因?yàn)樗邆鋫鹘y(tǒng)銀行以及銀行網(wǎng)絡(luò)所沒(méi)有的優(yōu)勢(shì)才又了它的生存空間,因而備受業(yè)界關(guān)注。據(jù)了解,全球大部分銀行都推出了移動(dòng)銀行服務(wù)。這種結(jié)合了貨幣電子化和移動(dòng)通信的嶄新服務(wù),豐富了銀行服務(wù)內(nèi)涵,它意味著人們不僅可以在旅游、出差中高效便利地處理各種金融理財(cái)業(yè)務(wù)。通過(guò)移動(dòng)銀行服務(wù),消費(fèi)者能夠在任何時(shí)間任何地點(diǎn),通過(guò)移動(dòng)以及安全的方式訪問(wèn)銀行,而無(wú)需親自光臨或給支行打電話。現(xiàn)有的可選服務(wù)從查詢賬戶結(jié)余、審核最新交易情況,到在賬戶間進(jìn)行轉(zhuǎn)賬、支付帳單。移動(dòng)銀行的實(shí)現(xiàn)技術(shù),從最先采用的基于STK卡的短消息方式,到WAP方式、基于信令通道的USSD方式,移動(dòng)通信網(wǎng)絡(luò)道2.5代又出現(xiàn)了KJava方式,它是專(zhuān)門(mén)用于嵌入式設(shè)備的Java應(yīng)用,是Java技術(shù)在無(wú)線小終端設(shè)備上的延伸。J2ME平臺(tái)技術(shù)擴(kuò)大了Java技術(shù)的使用范圍。這種多功能的KJava應(yīng)用程序開(kāi)發(fā)平臺(tái),可以開(kāi)發(fā)許多新的功能強(qiáng)大的信息產(chǎn)品。KJava技術(shù)可以使用戶、服務(wù)提供商、設(shè)備制造商通過(guò)物理連接或無(wú)線連接,按照需要隨時(shí)使用豐富的應(yīng)用程序。J2ME的配置和框架使得信息設(shè)備的靈活性,包括計(jì)算機(jī)技術(shù)和應(yīng)用程序安裝方式等方面得到很大提高。其優(yōu)勢(shì)有(1)實(shí)時(shí)在線,交互式對(duì)話。(2)圖形化界面,操作非常友好。(3)采用一些1024位的RSA認(rèn)證加密技術(shù)和128位的三重DES加密技術(shù),安全性相對(duì)較高。服務(wù)簡(jiǎn)介目前移動(dòng)銀行實(shí)現(xiàn)的系統(tǒng)結(jié)構(gòu)如圖3.1所示,主要有應(yīng)用系統(tǒng)、具體實(shí)現(xiàn)技術(shù)的接口、移動(dòng)設(shè)備以及移動(dòng)設(shè)備使用的軟件3部分組成。由于“移動(dòng)銀行”本身就是一個(gè)非常大型的應(yīng)用系統(tǒng),本次畢業(yè)設(shè)計(jì)不可能完全實(shí)現(xiàn)。本次設(shè)計(jì)主要模擬移動(dòng)銀行的繳費(fèi)查詢系統(tǒng),實(shí)現(xiàn)一個(gè)通過(guò)網(wǎng)絡(luò)訪問(wèn)服務(wù)器系統(tǒng)的功能,而且是重在企業(yè)級(jí)的程序開(kāi)發(fā)設(shè)計(jì)的方面。圖3.1移動(dòng)銀行的系統(tǒng)結(jié)構(gòu)整體設(shè)計(jì)本次設(shè)計(jì)的內(nèi)容重點(diǎn)不在于如何模擬移動(dòng)銀行的功能,而在于如何設(shè)計(jì)一個(gè)大型系統(tǒng),如何是MIDP客戶端更好的與J2EE服務(wù)器端的程序結(jié)合起來(lái)。[12]繳費(fèi)查詢系統(tǒng)的整體結(jié)構(gòu)如圖3.2所示??蛻舳顺绦蚩梢韵蚍?wù)器端查詢信息,服務(wù)器接受到請(qǐng)求查詢的信息以后,則查詢數(shù)據(jù)庫(kù)相關(guān)信息,然后返回結(jié)果給客戶端。圖3.2整體結(jié)構(gòu)圖系統(tǒng)將簡(jiǎn)單地實(shí)現(xiàn)查詢繳費(fèi)清單和用戶登錄兩個(gè)功能,但是使用了整體系統(tǒng)設(shè)計(jì)地方法,衡容易擴(kuò)展許多其它的功能,其實(shí)就是一個(gè)小型的企業(yè)級(jí)應(yīng)用的程序開(kāi)發(fā)框架。繳費(fèi)查詢系統(tǒng)的功能模塊系統(tǒng)涉及的功能有查詢繳費(fèi)清單和用戶登錄,使用屏幕劃分不同的功能,每個(gè)屏幕類(lèi)僅僅作為屏幕的實(shí)現(xiàn)功能,并不處理數(shù)據(jù)實(shí)際獲得的方式。在服務(wù)器端只用一個(gè)Servlet處理屏幕類(lèi)的請(qǐng)求,需要在實(shí)現(xiàn)屏幕類(lèi)的相關(guān)功能中使用一個(gè)消息通知服務(wù)器,究竟是哪一個(gè)模塊請(qǐng)求了申請(qǐng)服務(wù)器響應(yīng),因此設(shè)計(jì)了一個(gè)客戶端和服務(wù)器端公用的消息常量的類(lèi)(MessageConstants.java)。如圖3.3所示,每個(gè)模塊都可以通過(guò)發(fā)送自己被分配的消息給服務(wù)器,然后可以根據(jù)具體消息處理不同的模塊。圖3.3功能模塊網(wǎng)絡(luò)處理模塊的設(shè)計(jì)MVC是一種目前廣泛流行的設(shè)計(jì)模式,近來(lái),隨著J2EE的成熟,它正在成為在J2EE平臺(tái)上推薦的一種設(shè)計(jì)模式,也是廣大Java開(kāi)發(fā)者非常感興趣的設(shè)計(jì)模式。模型層負(fù)責(zé)表達(dá)何訪問(wèn)商業(yè)數(shù)據(jù),執(zhí)行商業(yè)邏輯和操作。也就是說(shuō),這一層就是現(xiàn)實(shí)生活中功能的軟件模型;在模型層變化的時(shí)候,它將通知試圖層并提供后者訪問(wèn)自身狀態(tài)的能力,同時(shí)控制層也可以訪問(wèn)其功能函數(shù)以完成相關(guān)的任務(wù)。視圖層負(fù)責(zé)顯示模型層的內(nèi)容。它從模型層取得數(shù)據(jù)并指定這些數(shù)據(jù)如何被顯示出來(lái)。在模型層變化的時(shí)候,它將自動(dòng)更新。另外視圖層也會(huì)將用戶的輸入傳遞給控制器。控制層負(fù)責(zé)定義應(yīng)用程序的行為。它可以分派用戶的請(qǐng)求并選擇適當(dāng)?shù)囊晥D以用于顯示,同時(shí)它也可以解釋用戶的輸入并將它們映射為模型層科執(zhí)行的操作;在一個(gè)圖形界面中,常見(jiàn)的用戶輸入包括點(diǎn)擊按鈕和菜單選擇。在手機(jī)網(wǎng)絡(luò)應(yīng)用中,它包括聯(lián)網(wǎng)中的HTTP、GET和POST的請(qǐng)求;控制層可以基于用戶的交互和模型層的操作結(jié)果的選擇下一個(gè)可以顯示的視圖,一個(gè)應(yīng)用程序通常會(huì)基于一組相關(guān)的功能設(shè)定一個(gè)控制層的模塊,甚至一項(xiàng)應(yīng)用程序會(huì)根據(jù)不同的用戶類(lèi)型具有不同的控制層設(shè)定,這主要是由于不同用戶的視圖交互和選擇也是不同的。在模型層、視圖層和控制層之間劃分責(zé)任可以減少代碼的重復(fù)度,并使用戶程序維護(hù)起來(lái)更簡(jiǎn)單。同時(shí)由于數(shù)據(jù)和商務(wù)邏輯的分開(kāi),在新的數(shù)據(jù)源加入和數(shù)據(jù)顯示變化的時(shí)候,數(shù)據(jù)處理也會(huì)變得更簡(jiǎn)單。雖然J2ME編寫(xiě)手機(jī)軟件的時(shí)候考慮到程序發(fā)布時(shí)候文件的大小,應(yīng)該盡量減少程序的數(shù)量,但是對(duì)于移動(dòng)銀行來(lái)說(shuō),可以隨時(shí)添加新的功能,所以應(yīng)該安裝MVC模式來(lái)構(gòu)造客戶端程序的,以方便將來(lái)功能上的擴(kuò)充。因此設(shè)計(jì)一個(gè)HTTPCommunication類(lèi),負(fù)責(zé)提供所有客戶端屏幕所需要的數(shù)據(jù)。如圖3.4所示,登錄屏幕、繳費(fèi)信息屏幕和用戶信息屏幕都需要向控制器HTTPCommunication請(qǐng)求獲得數(shù)據(jù),而HTTPCommunication類(lèi)中具體實(shí)現(xiàn)通用的連接網(wǎng)絡(luò),以及實(shí)現(xiàn)為提供給請(qǐng)求的屏幕所需的數(shù)據(jù)函數(shù)。圖3.4MVC結(jié)構(gòu)圖用戶界面程序的主屏幕就是一個(gè)簡(jiǎn)單的列表屏幕,如圖3.5所示,主屏幕把程序擁有的功能顯示出來(lái),然后科以根據(jù)手機(jī)用戶選擇了哪一個(gè)具體的功能而調(diào)用不同的屏幕類(lèi)。圖3.5主屏幕根據(jù)MVC的思路,客戶端的屏幕類(lèi)應(yīng)該設(shè)計(jì)為僅僅作為顯示,并盡量不處理任何實(shí)際的邏輯上的功能,程序設(shè)計(jì)了3個(gè)基本的屏幕,登錄屏幕、查詢屏幕和設(shè)置賬戶屏幕。登錄屏幕如圖3.6所示,提供了輸入用戶名和秘密的功能。查詢屏幕如圖3.7所示,把獲得的信息顯示到屏幕。設(shè)置賬戶屏幕如圖3.8所示,提供輸入用戶信用卡到一些基本功能。圖3.6登錄屏幕圖3.7查詢屏幕圖3.8設(shè)置賬戶屏幕服務(wù)器服務(wù)器介紹服務(wù)器端端程序負(fù)責(zé)對(duì)客戶端的請(qǐng)求進(jìn)行處理和訪問(wèn)數(shù)據(jù)庫(kù),以及盡量把需要的計(jì)算都放在服務(wù)器上運(yùn)行。本次設(shè)計(jì)運(yùn)用JBOSS服務(wù)器。JBOSS是一個(gè)運(yùn)行EJB的J2EE應(yīng)用服務(wù)器,它是開(kāi)放源代碼的項(xiàng)目,遵循最新的J2EE規(guī)范。JBOSS自帶了一個(gè)小型數(shù)據(jù)庫(kù)Hypersonic,本次設(shè)計(jì)使用Hypersonic數(shù)據(jù)庫(kù)作為服務(wù)器端程序的數(shù)據(jù)存儲(chǔ)數(shù)據(jù)庫(kù)。編寫(xiě)服務(wù)器端Servlet服務(wù)器需要對(duì)從客戶發(fā)送過(guò)來(lái)的然后根據(jù)客戶端發(fā)送過(guò)來(lái)的消息類(lèi)型而執(zhí)行不同的函數(shù)加以響應(yīng)客戶端的請(qǐng)求,然后執(zhí)行相應(yīng)的代碼,完成一定的功能,并把結(jié)果返回給客戶端。如圖3.9所示,客戶端可能同時(shí)發(fā)送多個(gè)不同的消息請(qǐng)求不同的服務(wù),所以服務(wù)器端應(yīng)該根據(jù)接收到的不同消息而轉(zhuǎn)向不同的功能模塊,分別處理客戶端不同的請(qǐng)求。圖3.9服務(wù)器端和客戶端信息交流示意圖結(jié)論本次畢業(yè)設(shè)計(jì)模擬了一個(gè)銀行繳費(fèi)查詢系統(tǒng)的一個(gè)小的功能,僅僅完成了登錄和查詢信息的功能,用戶查詢繳費(fèi)情況是通過(guò)服務(wù)器的Servlet程序訪問(wèn)數(shù)據(jù)庫(kù)的信息后得到的。本次設(shè)計(jì)不再是客戶端和服務(wù)器端的簡(jiǎn)單交流,而著重關(guān)注于如何設(shè)計(jì)一個(gè)有實(shí)際應(yīng)用價(jià)值的系統(tǒng)框架,可以在這個(gè)框架的基礎(chǔ)上容易添加更多的功能,并且程序的維護(hù)更加的方便。雖然J2ME不能完全使用J2EE的設(shè)計(jì)模式,但是可以參考它們的一些思想,把它運(yùn)用到實(shí)際當(dāng)中去。下一階段到工作就是在這一框架上添加更多的功能,例如對(duì)帳、行內(nèi)轉(zhuǎn)帳、跨行轉(zhuǎn)帳、信貸、網(wǎng)上證券、投資理財(cái)以及其它貿(mào)易或非貿(mào)易的全方位銀行業(yè)務(wù)服務(wù)。同時(shí),隨著J2ME技術(shù)的飛快發(fā)展,如何更有效的學(xué)習(xí)掌握這一技術(shù)也是下一階段的重點(diǎn)。致謝本次畢業(yè)設(shè)計(jì)完成過(guò)程中,得到了指導(dǎo)老師xxx老師的大力幫助,并參閱了諸多的參考文獻(xiàn)資料,在此對(duì)xxx教授及各文獻(xiàn)作者的辛勤勞動(dòng)一并表示深深的感謝!同時(shí),學(xué)院領(lǐng)導(dǎo)的關(guān)心和幫助,讓本人得到了一個(gè)學(xué)習(xí)和鍛煉的機(jī)會(huì),謹(jǐn)致以衷心的感謝和崇高的敬意!另外,家人的支持能夠使我安心投入到畢業(yè)設(shè)計(jì)之中,在此對(duì)我的家人表達(dá)我的謝意!參考文獻(xiàn)[1]JamesKeogh.J2ME開(kāi)發(fā)大全[M].北京:清華大學(xué)出版社,2004:25-460.[2]EricGiguere.J2MEProgrammingGuide[EB/OL]./2006/07/19/the-j2me-programming-guide/,2006.[3]MichaelJuntaoYuan.EnterpriseJ2ME:DevelopeingMobileJavaApplication[M].美國(guó)::PrenticeHallPTR,2003:50-97.[4]MartinJ.Wells.J2MEGameProgramming[M].美國(guó):PremierPress,2004:25-57.[5]詹建飛.J2ME開(kāi)發(fā)精解[M].北京:電子工業(yè)出版,2006:20-121.[6]KimTopley.J2ME技術(shù)手冊(cè)[M].北京:中國(guó)電力出版社,2004:50-201.[7]施錚.J2ME技術(shù)參考手冊(cè)[M].北京:電子工業(yè)出版社,2004:20-65.[8]李偉章.移動(dòng)數(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].美國(guó):SamsPublishing,2002:10-22.[11]劉杰,段曉勇,黃麒麟.基于J2ME的Java手機(jī)應(yīng)用程序的開(kāi)發(fā)[J].科技廣場(chǎng),2007(1):66-68.[12]韓冬,賀東鴻.MIDlet與J2EE結(jié)合開(kāi)發(fā)移動(dòng)商務(wù)應(yīng)用[J].計(jì)算機(jī)與數(shù)字工程,2006,34(12):188-191.[13]張新猛.基于J2ME/J2EE構(gòu)建移動(dòng)CRM系統(tǒng)[J].福建電腦,2007(2):125-126.[14]任繼濤.基于J2ME的移動(dòng)無(wú)線應(yīng)用開(kāi)發(fā)[J].青海大學(xué)學(xué)報(bào)(自然科學(xué)版),2006,24(6):74-78.[15]丁俊松,石蕾,王鵬飛.J2ME在電子商務(wù)中的應(yīng)用[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2006(12):37-39.[16]王聰,夏德洲.基于J2ME的手機(jī)應(yīng)用程序界面的描繪[J].十堰職業(yè)技術(shù)學(xué)院學(xué)報(bào),2006,19(5):82-83.[17]張璞,文登敏.基于J2ME和J2EE的移動(dòng)電子商務(wù)系統(tǒng)研究[J].成都信息工程學(xué)院學(xué)報(bào),2006,21(4):504-507.[18]丁月華.基于J2ME的手機(jī)程序開(kāi)發(fā)與研究[J].武漢工業(yè)學(xué)校學(xué)報(bào),2006,25(3):40-44.[19]陳天煌,張錦恒.基于J2ME/Servlet技術(shù)的應(yīng)用開(kāi)發(fā)與研究[J].交通與計(jì)算機(jī),2006,24(3):116-119.[20]吳敏,劉萍.基于J2ME和J2EE的手機(jī)銀行設(shè)計(jì)與實(shí)現(xiàn)[J],微計(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ù)器上傳過(guò)來(lái)的消息 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; } //處理繳費(fèi)模塊的功能 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]; //把清單列表存儲(chǔ)到數(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è)計(jì)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海市長(zhǎng)寧區(qū)2023屆高三上學(xué)期教學(xué)質(zhì)量調(diào)研(一模)政治試卷(解析版)
- 村鎮(zhèn)銀行支持農(nóng)村電商的信貸政策研究
- 2025年度醫(yī)療機(jī)構(gòu)科室承包項(xiàng)目合同書(shū)4篇
- 買(mǎi)賣(mài)碎石合同協(xié)議書(shū)(2024版)
- 玉溪云南玉溪市司法局招聘編外人員筆試歷年參考題庫(kù)附帶答案詳解
- 玉林2025年廣西北流市公安局招聘輔警30人筆試歷年參考題庫(kù)附帶答案詳解
- 濰坊2025年山東濰坊市產(chǎn)業(yè)技術(shù)研究院招聘7人筆試歷年參考題庫(kù)附帶答案詳解
- 滁州2025年安徽滁州全椒縣公證處招聘公證人員筆試歷年參考題庫(kù)附帶答案詳解
- 深圳2025年上半年廣東深圳法院勞動(dòng)合同制審判輔助人員招錄109人筆試歷年參考題庫(kù)附帶答案詳解
- 濟(jì)南山東濟(jì)南高新東區(qū)醫(yī)院招聘勞務(wù)派遣制病房護(hù)士4人筆試歷年參考題庫(kù)附帶答案詳解
- 2024年內(nèi)蒙古電力集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 阿米巴落地實(shí)操方案
- 火龍罐綜合灸療法
- 藥物制劑工(三級(jí))理論試題題庫(kù)及答案
- 高強(qiáng)度間歇訓(xùn)練(HIIT)對(duì)代謝健康的長(zhǎng)期影響
- ICU患者導(dǎo)管留置登記表
- 中建商務(wù)工作指南手冊(cè)
- 耳鼻咽喉:頭頸外科疾病診斷流程與冶療策略
- 貴州省2023年中考英語(yǔ)真題
- 個(gè)人借條電子版模板
- 中國(guó)思想史 馬工程329P
評(píng)論
0/150
提交評(píng)論