摘 要: Java ME是一種高度優(yōu)化的Java運(yùn)行平臺,它具有平臺無關(guān)性、安全性、分布式等特點(diǎn),廣泛應(yīng)用于機(jī)頂盒、移動電話和PDA等電子設(shè)備中。文章簡述了Java ME的體系結(jié)構(gòu),包括千字節(jié)虛擬機(jī)、連接設(shè)備配置、有限連接配置和移動信息設(shè)備簡表,以及Java ME的關(guān)鍵技術(shù);運(yùn)用套接字技術(shù)實現(xiàn)了客戶端與服務(wù)端之間的通信;通過RMS(Record Management System,記錄管理系統(tǒng))將聊天記錄保存到手機(jī)中。
關(guān)鍵詞: Java ME; 有限連接配置; 信息設(shè)備簡表; 套接字; RMS
中圖分類號:TP319 文獻(xiàn)標(biāo)志碼:A 文章編號:1006-8228(2013)03-04-04
0 引言
近年來,全球移動通信產(chǎn)業(yè)飛速發(fā)展,發(fā)展中國家手機(jī)用戶總量呈指數(shù)增長。截止2012年12月底,我國網(wǎng)民規(guī)模達(dá)到5.64億,其中手機(jī)網(wǎng)民數(shù)量為4.2億,年增長率達(dá)18.1%,手機(jī)網(wǎng)絡(luò)各項指標(biāo)增長速度全面超越傳統(tǒng)網(wǎng)絡(luò)。據(jù)中國互聯(lián)網(wǎng)絡(luò)信息中心(CNNIC)于2013年1月15日發(fā)布的《第31次中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計報告》顯示,網(wǎng)民中使用手機(jī)上網(wǎng)的比例繼續(xù)提升,由69.3%上升到74.5%。由此可見,手機(jī)在人們生活中的地位越來越高,人們也越來越多地傾向于使用手機(jī)等平臺進(jìn)行交流和溝通。本文對Java ME做了簡要的概述,并通過其相關(guān)的技術(shù)設(shè)計并實現(xiàn)了手機(jī)通信系統(tǒng)。
1 Java ME體系結(jié)構(gòu)
Java ME(Java Platform Micro Edition)是由Sun公司聯(lián)合了摩托羅拉、諾基亞、西門子等設(shè)備制造商共同推出的無線設(shè)備標(biāo)準(zhǔn)化應(yīng)用開發(fā)平臺[1]。Java ME是針對那些內(nèi)存、處理能力以及圖形用戶界面等受限的小型設(shè)備,包括手機(jī)、PDA和電視機(jī)頂盒等。
Java ME總體上采用四層結(jié)構(gòu)[2]。由下至上依次為:Java虛擬機(jī)層、配置層、簡表層和MIDP層。Java虛擬機(jī)層處于Java ME的最底層,是Java ME運(yùn)行所必需的,因為所有的Java ME程序都必須要在虛擬機(jī)上運(yùn)行,這也是為什么Java ME能夠跨平臺的原因。通常,在PDA等內(nèi)存比較大和處理器比較強(qiáng)的設(shè)備中,使用的是Java虛擬機(jī),而在手機(jī)等內(nèi)存小、處理能力比較弱的設(shè)備中,則使用KVM(Kilo-byte Virtual Machine,千字節(jié)虛擬機(jī))。Java ME四層結(jié)構(gòu)如圖1所示。
圖1 Java ME體系結(jié)構(gòu)
1.1 配置(Configuration)
Java ME平臺上有兩種連接配置[3]:連接設(shè)備配置(Connected Device Configuration, CDC)和連接受限設(shè)備配置(Connected Limited Device Configuration, CLDC)。
1.1.1 CLDC配置
CLDC是為運(yùn)行于資源非常有限的設(shè)備上的Java ME應(yīng)用程序制定的架構(gòu)。CLDC的官方定義是這樣的:“輕便、覆蓋區(qū)域最小的Java構(gòu)建塊,適合小型的、有資源限制的設(shè)備?!盋LDC配置是為將由企業(yè)定義的簡表中使用一個虛擬機(jī)和一套核心庫準(zhǔn)備的。它簡要描述了高度受限的設(shè)備上每個Java ME執(zhí)行所要求的一套最基本的庫和Java虛擬機(jī)特征。
1.1.2 CDC配置
CDC配置是面向如電視機(jī)機(jī)頂盒這樣運(yùn)算能力較強(qiáng)、電源充足的系統(tǒng)。CDC是應(yīng)用在具有較大的內(nèi)存上的設(shè)備,針對有限和間歇的無線連接設(shè)備,CDC與CVM和Foundation Profile共同定義了完整的Java ME環(huán)境。CDC是CLDC的一個擴(kuò)展集,所以在兩種配置之間存在著向上的兼容性。
1.2 簡表(Profile)
簡表定義了用戶的應(yīng)用程序所支持的設(shè)備類型[4],它向Java ME配置添加了特定域的類來定義設(shè)備的某種作用。簡表在一個特定的配置層上實現(xiàn)。應(yīng)用程序是針對特定的簡表編寫的。因此,可以移植到支持該簡表的任何設(shè)備上。用戶和應(yīng)用程序開發(fā)者看到最多的就是簡表層。
1.3 MIDP(Mobile Information Device Profile)
MIDP是第一個實現(xiàn)的簡表,它補(bǔ)充了CLDC并且提供應(yīng)用程序語義和控件、用戶界面、持久存儲器、網(wǎng)絡(luò)和用于移動電話的計時器、雙通道呼叫器和其他無線電設(shè)備。MIDP是一個Java API集合,它定義了處理雙向無線通訊設(shè)備的用戶接口界面、應(yīng)用模式、存儲管理及網(wǎng)絡(luò)功能等規(guī)范。
1.4 Java ME關(guān)鍵技術(shù)
Java ME中涉及到很多關(guān)鍵技術(shù):在游戲方面,有GameCanvas類、Sprite類等解決方案;在網(wǎng)絡(luò)通信方面,有HTTP、套接字和數(shù)據(jù)報等連接模式;在無線網(wǎng)絡(luò)方面,有GPRS、藍(lán)牙等技術(shù);在持久化方面,則有RMS、XML文件和嵌入式數(shù)據(jù)庫等解決方案。本系統(tǒng)在網(wǎng)絡(luò)通信方面采用套接字技術(shù),在聊天記錄的保存時采用RMS,接下來我們對套接字和RMS進(jìn)行簡要的闡述。
1.4.1 套接字Socket
套接字通訊是基于低級網(wǎng)絡(luò)應(yīng)用的一種通訊方式,在MIDP1.0中沒有得到實現(xiàn),而在MIDP2.0中才得以實現(xiàn)。實現(xiàn)接口是SocketConnection,該接口繼承自StreamConnection,提供了Socket客戶端對Socket服務(wù)器端的連接。另外,MIDP2.0還提供了對Socket服務(wù)器的連接,在StreamConnectionNotifier接口上實現(xiàn)的ServerSocketConnection便提供了此功能。
1.4.2 RMS
數(shù)據(jù)的持久存儲是把數(shù)據(jù)保存在可能斷開的設(shè)備中的過程,它是傳統(tǒng)的計算機(jī)設(shè)備所體現(xiàn)的主要功能之一。MIDP的RMS(記錄管理系統(tǒng))借助移動設(shè)備中記錄存儲來促進(jìn)持久數(shù)據(jù)的存儲,其主要功能是提供一組用于組織和操作設(shè)備資料庫的類別和界面[5],可以將RMS視為一張二維表。RMS提供了插入、修改、刪除和枚舉等操縱記錄的功能。
RMS中有兩個重要概念:Record Store和Record。Record Store提供了諸如打開、關(guān)閉和刪除記錄存儲等功能的不同方法。一個Record Store由一些記錄的集合組成,供一個或多個MIDlet調(diào)用,用長整型來記錄最后修改的時間和日期,用整型來記錄版本信息。Record則是由一串byte組成。在一個Record Store中,每一個Record使用RecordId惟一的標(biāo)識。RecordId是一個整數(shù),被用作記錄的主鍵。第一個記錄創(chuàng)建的時候,RecordId為1,之后每個RecordId的依次增1。
2 手機(jī)通信系統(tǒng)的設(shè)計
本系統(tǒng)在Java ME平臺上,通過套接字技術(shù)實現(xiàn)服務(wù)器端對客戶端的監(jiān)聽;通過用MySQL數(shù)據(jù)庫保存聊天用戶的基本信息;通過RMS實現(xiàn)聊天記錄信息的保存。
在本系統(tǒng)中,每個用戶都有一個惟一的用戶名,客戶端將用戶的信息發(fā)送到服務(wù)器端,服務(wù)器端接收后在數(shù)據(jù)庫中已存在的用戶列表中進(jìn)行檢測,并將檢測結(jié)果返回給客戶端??蛻舳藙t根據(jù)服務(wù)器端返回的結(jié)果代碼來判斷該用戶是否已存在并且通過密碼驗證。如果不存在,則進(jìn)行注冊。如果用戶名或者密碼不正確,則重新輸入。本系統(tǒng)的總體流程如圖2所示。
2.1 數(shù)據(jù)庫設(shè)計
MySQL數(shù)據(jù)庫具有體積小、速度快、總體成本低等特點(diǎn)。由于本系統(tǒng)中用到的數(shù)據(jù)及表都不龐大,所以選擇MySQL數(shù)據(jù)庫。本系統(tǒng)主要用到三張表:tbluser、tbldetail、tblonline。tbluser記錄用戶的用戶名、用戶密碼以及注冊時間。tbldetail記錄用戶的用戶名、用戶性別、用戶出生日期和用戶住址。tblonline記錄在線用戶情況,當(dāng)用戶下線后即在該表中刪除該用戶。用戶使用該系統(tǒng)注冊時,用戶名、用戶密碼和注冊時間存入tbluser表中,同時,在tbldetail表中存儲用戶的詳細(xì)信息。由于用戶名惟一,所以兩張表的用戶名相對應(yīng)。
2.2 服務(wù)器端設(shè)計
本系統(tǒng)的服務(wù)器端有兩個功能:一個是通過套接字實現(xiàn)服務(wù)器端和客戶端的通信;另一個是對數(shù)據(jù)庫進(jìn)行操作。服務(wù)器端通過ServerSocket來監(jiān)聽來自客戶端的信息,主程序具有創(chuàng)建ServerSocket、監(jiān)聽請求、接收數(shù)據(jù)、返回數(shù)據(jù)的功能。客戶端的MIDlet程序建立客戶端Socket發(fā)送到服務(wù)器端,服務(wù)器端的監(jiān)聽程序?qū)⑵洳东@而做出相應(yīng)的處理。服務(wù)器端通信的流程如圖3所示。
服務(wù)器端對數(shù)據(jù)庫的操作封裝在ServerConnection類中,其中有一個getDBStatement方法用來連接數(shù)據(jù)庫。此外,該類還封裝了根據(jù)客戶端傳來的不同代碼對其進(jìn)行相應(yīng)處理的方法。
2.3 客戶端設(shè)計
客戶端有一個入口類ChatMIDlet類,它繼承了MIDlet。要運(yùn)行客戶端,必須先運(yùn)行ChatMIDlet類??蛻舳酥饕兴膫€界面:登錄界面、注冊界面、在線用戶大廳界面、聊天界面。另外還通過Alert實現(xiàn)查看系統(tǒng)幫助、系統(tǒng)的信息、用戶的基本資料和聊天記錄等功能。為了實現(xiàn)更人性化的設(shè)計,本系統(tǒng)中的Alert通過setTimeout(Alert.FOREVER)方法使得提示界面根據(jù)用戶喜好停留一定的時間,當(dāng)用戶想返回時,則可以點(diǎn)擊提示頁面中的【完成】按鈕。
2.3.1 登錄設(shè)計
登錄界面主要通過LoginForm類實現(xiàn)。該類繼承Form類,并且實現(xiàn)了CommandListener,ItemCommandListener兩個接口。在登錄界面中,可以進(jìn)行以下三個操作:
⑴ 輸入用戶名和用戶密碼登錄系統(tǒng);
⑵ 通過菜單進(jìn)入幫助界面和系統(tǒng)信息界面;
⑶ 選擇【注冊】選項進(jìn)入注冊界面。
用戶在登錄界面輸入用戶名和用戶密碼后,選擇【登錄】進(jìn)入聊天系統(tǒng)。當(dāng)用戶輸入的用戶名不存在時,系統(tǒng)會提示無此用戶,如圖4所示。
登錄系統(tǒng)的整個流程如圖5所示。
2.3.2 注冊設(shè)計
注冊界面通過RegForm類實現(xiàn)。該類繼承Form并且實現(xiàn)CommandListener。主要功能就是根據(jù)用戶輸入的信息進(jìn)行判斷,將輸入的信息通過MessageConnection類傳遞給服務(wù)器端,并根據(jù)服務(wù)器端返回的信息給出相應(yīng)的提示。注冊流程如圖6所示。
2.3.3 在線用戶大廳設(shè)計
在線用戶大廳由HallList類實現(xiàn), HallList繼承javax.microedition.lcdui.List類并且實現(xiàn)CommandListener接口,主要功能就是顯示當(dāng)前在線用戶情況,以及根據(jù)用戶選擇的聊天對象通過MessageConnection類進(jìn)行處理,之后進(jìn)入聊天界面。
2.3.4 聊天界面設(shè)計
聊天界面通過ChatForm實現(xiàn)。該類繼承了Form類,并且實現(xiàn)了CommandListener,ItemCommandListener兩個接口。ChatForm中有個內(nèi)部類Chat,該類繼承CustomItem并且實現(xiàn)Runnable接口,主要功能是將聊天的內(nèi)容實時展現(xiàn)給用戶。
3 手機(jī)通信系統(tǒng)的實現(xiàn)
3.1 服務(wù)器端的實現(xiàn)
服務(wù)器端主要有兩個類,分別是MultipleUserServer類和ServerConnection類。MultipleUserServer類通過ServerSocket server=new ServerSocket(8043);創(chuàng)建一個ServerSocket對象,其中的端口號是8043,并且通過while(true){ ServerConnection serverConn=new ServerConnection(server.accept()); }不斷監(jiān)聽客戶端的請求。當(dāng)有客戶端請求時,就將請求通過ServerConnection類進(jìn)行處理,并將處理后的信息通過套接字的輸出流返回給客戶端。ServerConnection類連接數(shù)據(jù)庫是通過下面方法實現(xiàn)的:
3.2 客戶端的實現(xiàn)
客戶端的功能主要包括用戶的登錄、用戶的注冊、在線用戶列表的顯示、聊天信息的發(fā)送以及聊天記錄的查看。
3.2.1 登錄與注冊的實現(xiàn)
登錄與注冊有些類似,都是通過MessageConnection類將客戶端所填信息通過套接字的輸出流傳遞給服務(wù)器端,然后服務(wù)器端訪問數(shù)據(jù)庫,并將處理結(jié)果反饋給客戶端,而客戶端根據(jù)服務(wù)器端返回的信息做出相應(yīng)的處理。登錄界面和注冊界面如圖7所示。
3.2.2 在線用戶列表的實現(xiàn)
在線用戶列表是在用戶登錄成功后通過LoginForm調(diào)用HallList類來實現(xiàn)用戶列表的實時顯示。HallList類是通過訪問數(shù)據(jù)庫中的tblonline顯示所有在線用戶信息,包括在線的人數(shù)、在線人的用戶名及用戶頭像。在線用戶列表界面如圖8所示。
3.2.3 聊天界面的實現(xiàn)
聊天界面是通過ChatForm類實現(xiàn)的,該類有個內(nèi)部類Chat通過實現(xiàn)Runnable 的run()方法每隔一定的時間就repaint聊天信息,實現(xiàn)聊天信息的實時更新。run()方法通過睡眠一定的時間來實時刷新聊天信息。run方法的關(guān)鍵代碼如下:
3.2.4 保存及查看聊天記錄的實現(xiàn)
保存和查看聊天記錄通過RecordManage類實現(xiàn)。該類封裝了打開及創(chuàng)建記錄,添加新紀(jì)錄到存儲記錄中的方法。打開記錄主要通過RecordStore類的靜態(tài)方法openRecordStore實現(xiàn)的。添加新記錄功能則主要通過RecordStore的addRecord方法實現(xiàn)。聊天記錄的查看只能在兩個用戶的聊天界面中查看。聊天記錄界面如圖9所示。
圖9 聊天記錄界面
3.2.5 提示界面的實現(xiàn)
本系統(tǒng)中多處用到Alert來實現(xiàn)提示界面的顯示。提示界面包括系統(tǒng)的幫助、系統(tǒng)的信息、用戶的詳細(xì)信息、用戶聊天記錄和登錄或注冊時的提示。提示界面主要通過ChatMIDlet.instance.display.setCurrent(alert)實現(xiàn)。通過Alert的setTimeout方法可以設(shè)置提示界面顯示的時間。部分提示界面如圖10所示。
4 結(jié)束語
藉著高覆蓋率的移動通訊網(wǎng)、高速無線網(wǎng)絡(luò)和各種不同類型的移動信息終端,移動技術(shù)的應(yīng)用開辟了廣闊的移動交互空間。Java ME是一個具有很多優(yōu)良特點(diǎn)的平臺,在手機(jī)等小型平臺上具有很重要的應(yīng)用價值。本文簡要介紹了Java ME平臺的體系結(jié)構(gòu)和關(guān)鍵技術(shù),基于Java ME平臺設(shè)計和實現(xiàn)了手機(jī)通信系統(tǒng),該系統(tǒng)通過套接字技術(shù)在特定的端口進(jìn)行數(shù)據(jù)交換以實現(xiàn)不同客戶端之間的通信。該系統(tǒng)的實現(xiàn)為移動平臺的研究打下了良好的基礎(chǔ)。
參考文獻(xiàn):
[1] 劉文軍,朱華生,付美桃.基于J2ME平臺的無線應(yīng)用系統(tǒng)的開發(fā)[J].
南昌工程學(xué)院學(xué)報,2005.24(1):51-54
[2] 時婧婧.基于J2ME的移動聊天系統(tǒng)的研究與實現(xiàn)[J].赤峰學(xué)院學(xué)報,
2009.25(12):37-39
[3] 蘇長明.基于J2ME-J2EE的校園移動信息查詢系統(tǒng)設(shè)計與實現(xiàn)[J].
成都大學(xué)學(xué)報(自然科學(xué)版),2012.31(3):254-257
[4] 陸昌輝等.J2ME應(yīng)用開發(fā)詳解[M].電子工業(yè)出版社,2009.
[5] 李瑩,王晰,毛迪林,高傳善.J2ME MIDP中RMS的設(shè)計實現(xiàn)與性能
優(yōu)化[J].計算機(jī)工程,2006.31(16):52-69