●賀利娜,李嫄源,田增山
(重慶郵電大學 a.移動通信技術重點實驗室;b.科學技術處,重慶 400065)
隨著3G(3rd-generation,第三代移動通信技術)等移動通信技術的迅猛發(fā)展以及無線設備的普及,市場對于移動應用服務的需求越來越廣泛,手機圖書館也已經(jīng)成為手機移動應用服務中增長勢頭迅猛且潛力巨大的一項增值服務。[1]但是目前的圖書館主要存在兩大問題:一是多數(shù)的數(shù)字圖書館都要求用戶借助PC機才能上網(wǎng)查閱、檢索、閱讀和下載圖書,雖然有少數(shù)的圖書館實現(xiàn)了通過無線設備(如手機等)查詢,但是多數(shù)采用的是短信和WAP(WirelessAppl-ication Protocol,無線應用協(xié)議) 方式,速度慢而且效率低。二是不同制造商生產(chǎn)的手機的硬件性能和操作系統(tǒng)不同,同一個圖書館系統(tǒng)在不同的手機上不能實現(xiàn)兼容。為了較好地解決以上兩大弊端,開發(fā)一個不受手機本身性能限制的通用圖書館系統(tǒng)勢在必行,這也是各個圖書館及相關機構研究的一個新方向。
J2ME(Java 2 Micro Edition,Java2微縮版) 和J2EE(Java2Platform Enterprise Edition,Java2平臺企業(yè)版)是Java 2的兩個版本,它們能夠借助于JAVA良好的跨平臺性,將手機應用軟件順利地移植到不同的系統(tǒng)平臺中,同時J2ME支持離線查看。J2ME和J2EE技術的諸多優(yōu)點為構建手機圖書館提供了一個新的切入點,對發(fā)展中國的圖書館事業(yè)具有特殊意義。本文旨在探討如何使用J2ME和J2EE技術來研究和設計一個新型的手機圖書館系統(tǒng)。
目前無線設備訪問網(wǎng)絡主要有三種方式:WAP、I-Mode和J2ME方式。[2]無線設備通過WAP方式上網(wǎng)時要求手機通過WAP網(wǎng)關訪問互聯(lián)網(wǎng),用戶只能訪問WML格式的頁面而不是主流的HTML頁面,也不能顯示復雜格式的圖形,因此這種方式不夠智能化,而且不能訪問本地存儲,反應速度慢;[3]WAP服務每次獲取必須重新登錄,而且只要在線,就需付費。I-Mode方式是基于數(shù)據(jù)信息包的傳輸技術,但是I-Mode必須使用網(wǎng)關將無線網(wǎng)絡連接到服務器上,服務器上的站點必須是I-Mode格式。因此WAP和I-Mode均已不能滿足人們對信息多樣化、高速度、高效率閱讀的要求。
J2ME方式是一種高度優(yōu)化的Java運行環(huán)境,具有與系統(tǒng)無關、與平臺無關的優(yōu)良特性。J2ME提供了強大的Socket和Http網(wǎng)絡編程接口,通過記錄管理系統(tǒng)支持本地存儲,可以實現(xiàn)離線查看。J2ME采用分層軟件系統(tǒng)結(jié)構,底層為宿主機的操作系統(tǒng),內(nèi)部包括三層:JVM(Java VirtualMachine,Java虛擬機)層、配置文件層和J2ME應用層。J2ME通過CLDC(Connected Limited Device Con figuration,聯(lián)網(wǎng)的受限設備配置) 和MIDP(Mobile Information Device Profile,移動信息設備配置文件)來定義運行于手機之上的JVM的特性。為了加強J2ME在不同手機上的移植,CLDC/MIDP所定義的規(guī)范非常的低,基本上能夠滿足不同系統(tǒng)平臺的要求,這也是本文采用J2ME技術來開發(fā)手機客戶端應用程序的重要原因。[4,5]通用的J2ME架構和手機中的J2ME架構如圖所示。[6]
通用J2ME架構與手機J2ME架構對比圖
J2EE是Java 2平臺企業(yè)版的簡稱,擁有一套完全不同于傳統(tǒng)應用開發(fā)的技術架構,包含許多組件和核心API函數(shù)。J2EE技術支持異構環(huán)境,能夠開發(fā)部署在異構環(huán)境中的可移植程序?;贘2EE的應用程序不依賴任何特定的操作系統(tǒng)、中間件、硬件,因此設計合理的基于J2EE的程序只需開發(fā)一次就可部署到各種平臺。
開發(fā)J2EE應用程序,采用J2EE典型的四層結(jié)構:運行在客戶端機器上的客戶層組件;運行在J2EE服務器上的Web層組件;運行在J2EE服務器上的業(yè)務邏輯層組件;運行在EIS服務器上的企業(yè)信息系統(tǒng)層軟件。[7]J2EE的四層體系結(jié)構提供中間層集成框架用來滿足無需太多費用而又需要高可用性、高可靠性以及可擴展性的應用的需求。通過提供統(tǒng)一的開發(fā)平臺,J2EE大大降低了開發(fā)多層應用的費用和復雜性,同時對現(xiàn)有應用程序的集成提供強有力的支持,完全支持Enterprise JavaBeans,有良好的向?qū)碇С执虬筒渴饝茫鰪娏税踩珯C制,提高了性能。
基于J2ME和J2EE技術的手機圖書館采用的是客戶端的手機應用程序和后臺服務器端相結(jié)合的方式。手機客戶端通過無線網(wǎng)絡接入點訪問互聯(lián)網(wǎng),下載手機客戶端應用軟件。手機用戶利用個人賬號登錄之后,可以通過客戶端的MIDLet程序Tomcat服務器用來解釋執(zhí)行JSP網(wǎng)頁中的動態(tài)部分,Apache服務器用來支持靜態(tài)網(wǎng)頁,同時向服務器端發(fā)送服務請求。Web服務器端的功能主要由Tomcat和Apache服務器來實現(xiàn)。Web服務器使用Servlet程序接收客戶端的連接和請求,并通過JDBC-ODBC橋接技術與后臺數(shù)據(jù)庫連接,按SQL語句讀取數(shù)據(jù),對客戶的請求提供服務。對后臺數(shù)據(jù)庫的操作主要有兩種:一是Web服務器端將處理后的數(shù)據(jù)寫入數(shù)據(jù)庫,實現(xiàn)對數(shù)據(jù)信息的更新;二是Web服務器端將查詢結(jié)果返回給用戶。
整個手機圖書館系統(tǒng)的構建分為三層:表示層(手機客戶端)、功能層(Web服務器端)和數(shù)據(jù)庫服務器層。表示層采用J2ME技術來編寫MIDLet組件,利用Swing技術開發(fā)可視化的圖形用戶操作界面,用于顯示和接收用戶輸入的數(shù)據(jù),完成用戶與Web應用服務器之間的對話通信;功能層的核心是用J2EE編寫的Servlet程序,它相當于中間件,擁有一系列的API函數(shù),主要負責處理用戶輸入的信息、客戶端和服務器或者服務器和服務器之間的通信。Web服務器端的Servlet程序可開啟多個線程供多個用戶同時訪問;數(shù)據(jù)庫服務器層主要完成對數(shù)據(jù)的讀取和保存操作,保證DBMS能夠高效率地實現(xiàn)數(shù)據(jù)的同步更新和檢索。
(1)讀者導航。介紹圖書館的借閱制度、證件辦理等信息。(2)用戶身份認證。用戶需要輸入用戶名和密碼進行身份認證,系統(tǒng)只能授予合法用戶相關的操作權限。(3)用戶基本信息查詢。用戶可以查看讀者卡號、失效日期、累計借書等基本信息。(4) 書籍借閱信息查詢,用戶通過手機上網(wǎng)查詢自己的圖書借閱情況,包括書名、借閱日期和應還日期等。(5)館藏書目查詢。根據(jù)題目、作者、出版社等信息查詢圖書,顯示相關圖書的書目信息和在館信息。(6)在線瀏覽。通過手機在線瀏覽期刊、論文等圖書館電子資源。(7)下載電子圖書。用戶可以根據(jù)自己的需要下載相關的電子圖書。(8)圖書館續(xù)借預約。用戶通過手機上網(wǎng)可以輸入自己需要預約或者續(xù)借的圖書編號,系統(tǒng)響應該操作后返回結(jié)果。(9)動態(tài)催還。系統(tǒng)自行設置還書提醒時間,并發(fā)送提醒郵件到用戶設定的電子郵箱。(10)讀者卡掛失/尋回。用戶可以輸入讀者卡卡號及證件號對讀者卡進行掛失和尋回。(11) 圖書館公告信息。查看系統(tǒng)公告和相關的圖書館公告,方便及時了解圖書館的最近動態(tài)。(12) 系統(tǒng)設置。設置網(wǎng)絡連接方式和顯示字體等參數(shù)。
手機客戶端充當一個小型的移動數(shù)據(jù)庫。手機客戶端采用J2ME技術,可以使用J2ME技術來編寫MIDLet程序。用戶可以登錄圖書館的主頁面發(fā)送請求,手機將把數(shù)據(jù)發(fā)送到服務器端,服務器端進行相應的處理后把查詢結(jié)果返回給客戶端,客戶端MIDLet程序會把查詢結(jié)果顯示在用戶手機屏幕上。
基于J2ME設計手機圖書館的客戶端的優(yōu)勢在于用戶可以有兩種讀取電子資源的方式:一是網(wǎng)絡斷開時用戶可以離線閱讀已經(jīng)下載過的電子圖書。其關鍵在于如何從本地文件中讀取數(shù)據(jù)。這里的本地文件主要指下載過的電子圖書資源,它存儲在MIDP提供的記錄管理系統(tǒng)RMS中。RMS所在的包是javax.microedi tion.rms(),RecordStore類是 javax.microedition.rms包中僅有的類。采用RecordStore類的最大優(yōu)勢在于即使系統(tǒng)啟動了另外一個MIDLet,甚至手機更換電池,這些記錄也會持久保持,因此,在實現(xiàn)離線閱讀時,程序?qū)⒕€程類HttpConnectThread和RMS中的Record-Store類結(jié)合起來,實現(xiàn)在HttpConnectThread類內(nèi)部對RMS數(shù)據(jù)進行讀取。[8,9]二是用戶能夠在線閱讀或者下載新的電子圖書。其關鍵是如何通過建立手機閱讀程序與服務器之間的網(wǎng)絡連接來遠程共享電子資源。為了實現(xiàn)在不同類型的手機上進行移植,本系統(tǒng)采用Http作為網(wǎng)絡連接的首選協(xié)議來實現(xiàn)手機與服務器之間的網(wǎng)絡通信,這樣能夠重用服務器端的代碼,這也是本系統(tǒng)的優(yōu)勢之一。
Web服務器主要實現(xiàn)對網(wǎng)頁頁面的支持,并對從手機客戶端接收到的數(shù)據(jù)進行處理,根據(jù)用戶的請求類型查詢數(shù)據(jù)庫,并將查詢結(jié)果發(fā)送給手機用戶。
Web服務器在程序設計時可以采用J2EE技術的一整套服務(Services)、應用程序接口(APIs) 以及協(xié)議來實現(xiàn)。J2EE技術用來實現(xiàn)網(wǎng)絡程序的開發(fā),在設計時可以采用Apache+Tomcat+Jdk方式作為Web服務器來用。Apache服務器為HTML頁面服務;Tomcat服務器是一個Servlet程序,能解釋Java程序,可以運行JSP頁面和Java Servlet程序。JSP頁面由HTML代碼和嵌入其中的Java代碼所組成。服務器在頁面被客戶端請求之后對這些代碼進行處理,然后將生成的HTML頁面返回給客戶端。
系統(tǒng)的后臺數(shù)據(jù)庫采用Microsoft SQL Server 2000數(shù)據(jù)庫。由于微軟的數(shù)據(jù)庫不是用Java編寫的,但是我們需要用Java語言連接微軟的數(shù)據(jù)庫,這就需要使用JDBC-ODBC橋連接技術來實現(xiàn)Java代碼對數(shù)據(jù)庫的操作。由于建立JDBC-ODBC橋連接時可能會發(fā)生異常,因此,程序設計時要捕獲這個異常。建立橋連接的標準如下:
try{
Class.forName (“sun.jdbc.odbc.JdbcOdbcDriver”);
}catch(ClassNotFoundException e) {}
這里,Class是包java.lang中的一個類,該類通過調(diào)用靜態(tài)方法forName加載sun.jdbc.odbc包中JdbcOdbc Driver類來建立JDBC-ODBC橋接器。
在Web服務器與數(shù)據(jù)庫的連接過程中主要包括幾個步驟:加載驅(qū)動程序;建立與后臺數(shù)據(jù)庫的連接;SQL語句查詢;提交查詢結(jié)果;讀取結(jié)果等。
手機與數(shù)據(jù)庫服務器之間信息交互的過程是這樣的:客戶端的MIDlet程序與Web服務器之間進行連接并發(fā)出訪問請求,通過無線網(wǎng)絡對各種狀態(tài)的變化進行通知;Web服務器使用Servlet程序來監(jiān)聽和處理客戶端的連接和請求,并將其初始化。同時Servlet程序根據(jù)Post請求類型發(fā)送請求信息給數(shù)據(jù)庫服務器;Web服務器與數(shù)據(jù)庫服務器建立連接,執(zhí)行SQL查詢語句,查找符合條件的結(jié)果;Web服務器收到數(shù)據(jù)庫服務器傳來的數(shù)據(jù),Servlet程序?qū)⑦@些數(shù)據(jù)的格式轉(zhuǎn)化為手機終端可以識別的WML格式并將查詢結(jié)果返回給MIDLet程序,這樣,用戶就可以在手機屏幕上讀取所需要的數(shù)據(jù)信息。
用戶的鑒權認證包括兩個方面:一是用戶在手機客戶端輸入用戶名和密碼來對自己的身份進行認證;二是通過建立表與表之間的關聯(lián),賦予用戶合法的權限。有用戶、角色、用戶角色、權限、角色權限5個表信息。在這5個表中,一個用戶可以隸屬于多個角色,一個角色可以擁有一定數(shù)量的權限,通過角色賦予用戶權限。用戶和角色均由管理員創(chuàng)建,系統(tǒng)可以通過用戶角色表與角色權限表之間的關聯(lián)來查看用戶權限。用戶瀏覽下載圖書時,首先要對其身份進行驗證,即在每個頁面進行用戶校驗,可以通過在頁面中設置參數(shù)來校驗當前用戶是否為合法用戶。若為不合法用戶,頁面就強制回到登錄頁面,重新要求輸入用戶名和密碼。若為合法用戶,則授予該用戶權限信息。如果超越權限,就給出提示信息,如果相關操作在用戶權限內(nèi),就執(zhí)行操作。
設計閱覽器窗體時,各個控件的大小和位置是固定的,當應用軟件移植到與程序中所設置的屏幕分辨率及尺寸大小不同的手機終端時,軟件就會在手機上發(fā)生變型,因此程序設計時需使軟件能夠自適應手機屏幕的分辨率和尺寸大小,進而相應地調(diào)整控件的大小。
自適應調(diào)整控件大小主要考慮的是屏幕分辨率和尺寸大小。其主要思想是由GetSystemMetrics(SM_CYSCREEN) 和 GetSystemMetrics(SM_CXSCREEN) 來獲得屏幕的分辨率及尺寸大小,然后把獲得的屏幕分辨率和尺寸大小作為變量參與到控件尺寸的計算中,得到自適應后的正確尺寸,把正確尺寸畫出來。如果屏幕分辨率發(fā)生了改變,則固定窗口大小不變,不改變空間left和top的位置,從橫向和縱向?qū)丶妥煮w的大小按比例進行調(diào)節(jié);如果屏幕尺寸大小發(fā)生了改變,則可以用窗口的新的寬度和高度與改變前的值相對比,得到一個縮放比例,把這個比例與控件的left、top、width和height屬性的乘積作為新的空間位置和大小,重新布局這些控件,進而完成軟件的自適應調(diào)整。
系統(tǒng)實現(xiàn)時可在程序中設置一個計時器和超時的處理程序來實現(xiàn)對連接時間的控制。當手機發(fā)送請求信息接入網(wǎng)絡時,計時器開始計時。若連接成功,系統(tǒng)就將計時器關閉。若不能在規(guī)定的時間內(nèi)完成連接,系統(tǒng)用超時處理程序來處理超時問題,終止連接并給用戶發(fā)出提示信息,讓用戶選擇重新連接或者放棄連接。
選擇“添加書簽”時,程序會截取當前的句子作為書簽名放入緩存,并記錄當前打開的文件路徑。當讀者下次打開的時候,系統(tǒng)首先會判斷打開的文件是否有閱讀進度的記錄。如果有閱讀進度的記錄,直接跳轉(zhuǎn)到記錄的位置;如果沒有記錄,直接返回到系統(tǒng)主目錄。
本文結(jié)合J2EE和J2ME技術,提出了一種具有較好移植性和較高靈活性的手機圖書館設計方案。這一新型方案較好地運用了Java語言“編寫一次,隨處運行”的優(yōu)良特性,將圖書館從傳統(tǒng)模式擴展到無線應用領域,滿足了用戶隨時、隨地共享圖書館海量電子資源的要求,拓展了手機用戶獲取圖書館各種服務的渠道,大幅度提高了圖書館資源的整體利用率。
[1]朱全銀,章蕙.基于J2ME和J2EE的移動網(wǎng)絡游戲系統(tǒng) [J].計算機工程, 2008, 34 (16): 135-137.
[2]唐潤華,等.基于J2ME-J2EE移動集成查詢系統(tǒng)的設計與實現(xiàn) [J].科學技術與工程,2008,8(1): 87-90.
[3] 胡靜.基于 J2ME的無線 Internet應用方案 [J].江蘇通信技術, 2002, 18 (4): 17-19, 41.
[4]呂林濤,等. 一種基于J2ME的工程圖紙檔案管理平臺 [J].計算機工程, 2007, 33 (24): 283-285.
[5] 百度百科.J2ME[EB/OL].(2010-01-21) [2010-03-19].http://baike.baidu.com/view/7125.htm.
[6]張璞,文登敏.基于J2ME和J2EE的移動電子商務系統(tǒng)研究 [J].成都信息工程學院學報,2006,21 (4): 504-507.
[7] 百度百科.J2EE[EB/OL]. (2010-03-05) [2010-04-11].http://baike.baidu.com/view/1507.htm.
[8] 百度百科.RMS[EB/OL]. (2010-03-18) [2010-03-23].http://baikke.baidu.com/view/413451.htm.
[9]趙剛,等.基于J2ME的無線設備編程源代碼解析 [M].北京: 電子工業(yè)出版社, 2002: 101-103.