摘要:該文設(shè)計(jì)了一種移動(dòng)票證信息查詢平臺(tái),選擇J2ME作為手機(jī)客戶端應(yīng)用開(kāi)發(fā)環(huán)境, 遵循HTTP協(xié)議實(shí)現(xiàn)服務(wù)器與手機(jī)客戶端的交互,平臺(tái)利用部署在WebLogic上的Servlet實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接。終端客戶可以方便的通過(guò)現(xiàn)有移動(dòng)通信網(wǎng)絡(luò)查詢當(dāng)前最新的票證信息。
關(guān)鍵詞:J2ME;midlet;Servlet;jdbc
中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)34-1675-02
Application of J2ME in Mobile Enquiry System
XIONG Yi-long, DU Juan
(Department of Computer Science and Technology, Wuhan University of Technology, Wuhan 430063,China)
Abstract: The article designs a kind of mobile platform for ticketing requiring, which uses J2ME as the developing environment of client-side mobile phone and follows the HTTP protocol to accomplish the interaction between the server and mobile phone clients. The platform utilizes the servlet on the weblogic to connect to the database. End-users can query the latest ticketing information conveniently through the existing Mobile Communication Network.
Key words: J2ME; midlet; Servlet; jdbc
1 引言
隨著移動(dòng)電話等無(wú)線通信設(shè)備數(shù)量的戲劇化增長(zhǎng)和功能的逐漸成熟,對(duì)運(yùn)行在這些設(shè)備上的應(yīng)用程序的需求也越來(lái)越大。消費(fèi)者和企業(yè)都需要將移動(dòng)通信設(shè)備的功能從語(yǔ)言通信擴(kuò)展到運(yùn)行在膝上型計(jì)算機(jī)和PC上的傳統(tǒng)應(yīng)用程序。同時(shí),國(guó)際互聯(lián)網(wǎng)將分散在各地的人鏈接在一起,國(guó)際互聯(lián)網(wǎng)已經(jīng)逐漸成為人們所不能離開(kāi)的一種通信和信息處理工具,但是它卻存在著受位置限制的缺點(diǎn),例如:你在旅途的火車(chē)上想了解股市行情、進(jìn)行在線交易;你出差某地想了解當(dāng)?shù)氐奶鞖馇闆r;銷(xiāo)售人員在和客戶談判時(shí)可能想立刻獲知當(dāng)前在庫(kù)產(chǎn)品價(jià)格和數(shù)量以爭(zhēng)取到一筆大的銷(xiāo)售定單等,都無(wú)法及時(shí)通過(guò)國(guó)際互聯(lián)網(wǎng)來(lái)實(shí)現(xiàn)。無(wú)線技術(shù)應(yīng)用延伸了客戶端用戶對(duì)空間位置的需求,使這些用戶需求變?yōu)楝F(xiàn)實(shí)。
JAVA 手機(jī)是一種支持JAVA虛擬機(jī)的無(wú)線移動(dòng)終端,通過(guò)開(kāi)發(fā)JAVA 手機(jī)程式,可以實(shí)現(xiàn)手機(jī)訪問(wèn)現(xiàn)有的網(wǎng)絡(luò)資源。本文介紹了結(jié)合J2ME 和J2EE技術(shù),進(jìn)行移動(dòng)查詢業(yè)務(wù)的開(kāi)發(fā),并研究了手機(jī)訪問(wèn)網(wǎng)絡(luò)數(shù)據(jù)庫(kù)的方法。
2 問(wèn)題的引出
對(duì)于水路稽查的人員來(lái)說(shuō),及時(shí)準(zhǔn)確地獲得船舶各種票據(jù)和證件的具體信息顯得十分重要。通過(guò)移動(dòng)終端能實(shí)時(shí)在線獲得最新的票據(jù)和證件信息,是本課題研究的中心任務(wù)。基于實(shí)際需求,本課題主要實(shí)現(xiàn)以下目標(biāo):
1) 實(shí)現(xiàn)移動(dòng)查詢的框架設(shè)計(jì);
2) 移動(dòng)終端的具體實(shí)現(xiàn)設(shè)計(jì),并進(jìn)行移動(dòng)網(wǎng)絡(luò)聯(lián)網(wǎng)技術(shù)探討。
3 J2ME簡(jiǎn)介
J2ME即Java2 Micro Edition(Java2的微型版),是Sun公司Java2的重要組成部分。它是針對(duì)有限硬件、有限功率、有限網(wǎng)絡(luò)連接的設(shè)備,進(jìn)行應(yīng)用開(kāi)發(fā)的技術(shù),它適合在無(wú)線通信設(shè)備上開(kāi)發(fā)交互性較強(qiáng)的網(wǎng)絡(luò)應(yīng)用。在此基礎(chǔ)上編寫(xiě)的MIDP 應(yīng)用程序具有良好的兼容性和可移植性,可在手機(jī)PDA等手持設(shè)備上很好的運(yùn)行。J2ME 與WAP 的手機(jī)上網(wǎng)方式相比,具有一定優(yōu)勢(shì),例如WAP必須通過(guò)WAP 網(wǎng)關(guān)才能訪問(wèn)Internet,并且僅能訪問(wèn)基于WML 構(gòu)件的網(wǎng)站,而J2ME 由于提供對(duì)HTTP 和TCP 等高級(jí)Internet 協(xié)議的支持,使得通信終端可以訪問(wèn)Internet 上的所有信息。WAP 適合于文本主的內(nèi)容,而J2ME 很適合于圖形應(yīng)用,有很穩(wěn)定而可靠的安全機(jī)制。
J2ME的體系結(jié)構(gòu)包括:
1) Configuration 應(yīng)該注意到,J2ME要支持的硬件平臺(tái)也有很大差異,其中有比較高端的設(shè)備,例如電視機(jī)的機(jī)頂盒、網(wǎng)絡(luò)電視等;也有比較低端的,像手機(jī)等。作為Java平臺(tái)必須要保證兼容性,必須要舍棄所有設(shè)備的特殊性.J2ME規(guī)定了configuration的概念,Configuration是支持通用設(shè)備的最小Java平臺(tái)。作為所用設(shè)備的最小公分母來(lái)保證不同設(shè)備間平臺(tái)的兼容性,這里的Java平臺(tái)主要指Java虛擬機(jī)(JVM)和核心庫(kù)。
2) Profileconfiguration舍棄了設(shè)備的特殊性來(lái)保證Java平臺(tái)的相容性,但僅僅有configuration是遠(yuǎn)遠(yuǎn)不夠的,特殊設(shè)備的具體功能和硬件條件都沒(méi)有得到支持,為此在configuration的基礎(chǔ)上,必須根據(jù)設(shè)備的具體功能在劃分一次。Profile(簡(jiǎn)表或簡(jiǎn)擋)針對(duì)每一類(lèi)功能設(shè)備特殊定義的與設(shè)備特性相關(guān)的API,建于configuration之上,作為configuration的補(bǔ)充。
4 系統(tǒng)設(shè)計(jì)
4.1 總體設(shè)計(jì)
基于J2ME 平臺(tái)開(kāi)發(fā)手機(jī)客戶端程序,支持打開(kāi)網(wǎng)絡(luò)連接、傳送數(shù)據(jù)、訪問(wèn)遠(yuǎn)程服務(wù)器,但并不支持直接訪問(wèn)數(shù)據(jù)庫(kù)的能力,因此我們需要編寫(xiě)一套服務(wù)器端程序來(lái)接受手機(jī)客戶端的請(qǐng)求指令,通過(guò)解析請(qǐng)求、與數(shù)據(jù)層交互、執(zhí)行邏輯、響應(yīng)結(jié)果的方式把數(shù)據(jù)再傳回給手機(jī)。圖1為整個(gè)移動(dòng)查詢系統(tǒng)網(wǎng)絡(luò)的構(gòu)成。
4.2 服務(wù)器和客戶端的連接以及數(shù)據(jù)的傳輸
通用連接框架(Generic Connection Framework,GCF)為資源有限的設(shè)備提供了一個(gè)可擴(kuò)展的、通用的I/O 框架。GCF 是一組在 javax.microedition.io 包中定義的接口。GCF連接接口為網(wǎng)絡(luò)操作提供了基本的體系結(jié)構(gòu),并且為編寫(xiě)網(wǎng)絡(luò)代碼提供了獨(dú)立的網(wǎng)絡(luò)協(xié)議,使用GCF連接接口同樣忽略底層的網(wǎng)絡(luò)協(xié)議,這些接口分別是Connection,ContentConnection,Datagram Connection,InputConnection,OutputConnection,StreamConnection和StreamConnectionNotifier。
由于無(wú)線設(shè)備所能支持的網(wǎng)絡(luò)協(xié)議非常有限,僅限于HTTP、Socket 和UDP 等幾種協(xié)議,為了能在不同類(lèi)型的手機(jī)上移植,我們盡量采用HTTP 作為網(wǎng)絡(luò)連接的首選協(xié)議。由于HTTP 是一個(gè)基于文本的效率較低的協(xié)議,因此,必須仔細(xì)考慮手機(jī)和服務(wù)器端的通信內(nèi)容,盡可能地提高效率。服務(wù)器通過(guò)消息常量選擇處理事件請(qǐng)求的Servlet 調(diào)用的方法。
4.3 客戶端MIDlet程序設(shè)計(jì)
客戶端主要包括實(shí)現(xiàn)用戶界面和發(fā)送查詢請(qǐng)求兩部分。以“票據(jù)有效性查詢” 這一主要功能模塊為例,MIDlet 主要包括以下內(nèi)容:設(shè)置一個(gè)TextField 類(lèi)用于在相關(guān)界面的文本框輸入“船檢登記號(hào)”等數(shù)據(jù);設(shè)置網(wǎng)絡(luò)請(qǐng)求方法為HttpConnection.POST發(fā)出請(qǐng)求,打開(kāi)網(wǎng)絡(luò),利用HttpConnection 的openOutputStream()打開(kāi)輸出流,將請(qǐng)求及數(shù)據(jù)發(fā)送給服務(wù)器端的Servlet程序;接Servlet的響應(yīng)數(shù)據(jù)并顯示;關(guān)閉輸入輸出流等。手機(jī)端在進(jìn)入查詢系統(tǒng)的主菜單界面后,可選擇“船名查找”或是“船檢登記號(hào)查找”。以“船檢登記號(hào)查找”為例,在該頁(yè)面下填入船檢登記號(hào)信息,之后點(diǎn)擊“Send”按鍵,即可通過(guò)無(wú)線網(wǎng)絡(luò),發(fā)出請(qǐng)求數(shù)據(jù)庫(kù)的信息流。若找到記錄則返回相應(yīng)的票面信息數(shù)據(jù),如圖2顯示了一個(gè)查詢的過(guò)程。
部分主要設(shè)計(jì)代碼如下:
StreamConnection connection=1;
InputStream in=1;
StringBuffer buffer=new StringBuffer();
try{
String cjdjh=this.cjdjh.getString();
String url=\"http://localhost:7001/cwts/pzyxxcx?
cjdjh=\"+cjdjh;
connection =(StreamConnection)Connector.open(url);in=connection.openInputStream();
int ch;
while((ch=in.read())!=-1){
buffer.append
((char)ch);}
String str=buffer.toString();
str=new String(str.getBytes
(\"ISO-8859-1\"),\"GB2312\");
cjdjh_form.append(str);
}catch(Exception e){
e.printStackTrace();}
4.4 服務(wù)器端程序設(shè)計(jì)
Servlet是服務(wù)器端語(yǔ)言,它可自動(dòng)開(kāi)啟多個(gè)線程為多個(gè)用戶提供服務(wù)。本文中Servlet程序包括如下的內(nèi)容:利用doGet()、doPost()和destroy()方法設(shè)置一定網(wǎng)絡(luò)響應(yīng)屬性;設(shè)計(jì)輸入流接收客戶端的請(qǐng)求和數(shù)據(jù);注冊(cè)數(shù)據(jù)庫(kù),利用JDBC(Java數(shù)據(jù)庫(kù)連接Java Database Connectivity)對(duì)數(shù)據(jù)庫(kù)進(jìn)行連接;利用SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)實(shí)施查詢;對(duì)查詢結(jié)果進(jìn)行適當(dāng)處理,并設(shè)計(jì)輸出流用以將查詢結(jié)果發(fā)送回手機(jī);關(guān)閉輸入輸出流及其連接。
部分主要設(shè)計(jì)代碼如下:
response.setContentType(\"text/html\");
PrintWriter out = response.getWriter();
String cjdjh=request.getParameter(\"cjdjh\").trim();
DBConnect conn=1;
ResultSet rs=1;
String sql=\"select * from tjz where cjdjh='\"+cjdjh+\"' and sfzf='否' order by pzhm\";
try{
conn=new DBConnect();
rs=conn.executeQuery(sql);(下轉(zhuǎn)第1682頁(yè))
(上接第1676頁(yè))
out.print(new String(\"查詢結(jié)果如下:\".getBytes(\"GB2312\"),\"ISO-8859-1\")+\"\\");
while(rs.next()){
out.print(new String(\"票證號(hào)碼:\".getBytes(\"GB2312\"),\"ISO-8859-1\")+rs.getString(\"pzhm\")+\"\\");
out.print(new String(\"有效期起:\".getBytes(\"GB2312\"),\"ISO-8859-1\")+rs.getString(\"yxqq\").substring(0,10)+\"\\");
out.print(new String(\"有效期止:\".getBytes(\"GB2312\"),\"ISO-8859-1\")+
rs.getString(\"yxqz\").substring(0,10)+\"\\");
out.print(\"------------------------\"+\"\\");
}
}catch(Exception e){
e.printStackTrace();
}
5 結(jié)束語(yǔ)
本文移動(dòng)查詢系統(tǒng)的實(shí)現(xiàn)具有很現(xiàn)實(shí)的意義,能解決即時(shí)稽查時(shí)信息需求問(wèn)題,通過(guò)不斷更新數(shù)據(jù)庫(kù),能做到與現(xiàn)有票證信息的同步。從社會(huì)效益上看,它為廣大移動(dòng)網(wǎng)絡(luò)用戶提供信息化服務(wù),適應(yīng)當(dāng)今社會(huì)的信息需求,從水路征稽部門(mén)的工作看,能夠及時(shí)發(fā)布票證信息,減輕稽查人員的工作量,提升工作效率。
參考文獻(xiàn):
[1] 溫尚書(shū).J2ME無(wú)線通信實(shí)用案例教程[M].北京:清華大學(xué)出版社,2003.
[2] Keogh J.J2ME開(kāi)發(fā)大全[M].潘穎,王磊,譯.北京:清華大學(xué)出版社,2004.
[3] 柳永坡.JSP應(yīng)用開(kāi)發(fā)技術(shù)[M].北京:人民郵電出版社,2006.