今天,無線、跨平臺(tái)、以及嵌入式應(yīng)用已經(jīng)成為非常流行和時(shí)尚的技術(shù)應(yīng)用。在手機(jī)、PDA、以及其他一些智能移動(dòng)設(shè)備已經(jīng)隨處可見, MICROSOFT,SYMBIAN在手機(jī),PDA這些小型設(shè)備上的OS開發(fā)已日趨成熟的同時(shí),用戶對(duì)于智能移動(dòng)設(shè)備應(yīng)用軟件的種類、性能提出更高的要求,對(duì)于如何在這些平臺(tái)上為程序員提供良好,可移植應(yīng)用軟件的開發(fā)環(huán)境成為一個(gè)新的課題。
1、J2me以及J2me的總體架構(gòu)
J2me的誕生:我們知道SUN公司在設(shè)計(jì)java語言之初是要面向消費(fèi)類電器,并將它定位于實(shí)現(xiàn)一種為嵌入式處理器編寫程序的可移植方法。SUN的工程師們帶著這個(gè)目的開發(fā)出來的JAVA語言以及虛擬機(jī)的運(yùn)行機(jī)制,必然具有可以在設(shè)備間移植代碼的CPU無關(guān)性,安全性,簡(jiǎn)潔性??梢奐AVA作為開發(fā)小型智能移動(dòng)設(shè)備的開發(fā)語言在合適不過了,于是SUN公司在J2SE(JAVA 2 STANDARD EDITION)的基礎(chǔ)上為小型智能設(shè)備量身訂做了J2SE的簡(jiǎn)化版本J2ME(Java 2 MICRO EDITION),并在1999 年 6loper Conference 上正式宣布J2ME的誕生。
J2ME的總體架構(gòu):J2ME使用配置和簡(jiǎn)表定制 Java 運(yùn)行時(shí)環(huán)境,配置將基本運(yùn)行時(shí)環(huán)境定義為一組核心類和一個(gè)運(yùn)行在特定類型設(shè)備上的特定 JVM,而簡(jiǎn)表則定義了應(yīng)用程序所支持的設(shè)備類型。
配置:正如上面所說配置將基本運(yùn)行時(shí)環(huán)境定義為一組核心類和一個(gè)運(yùn)行在特定類型設(shè)備上的特定 JVM。當(dāng)前 J2ME 主要存在兩種配置:連接設(shè)備配置 (CDC) CDC是應(yīng)用在具有較大內(nèi)存,特別是2MB以上的設(shè)備上的,CDC針對(duì)有限和間歇的無線連接設(shè)備,CDC與CVM和Foundation profile共同定義了完全的J2ME環(huán)境。連接限制設(shè)備配置 (CLDC)是針對(duì)少于512KB內(nèi)存footprint的設(shè)備的配置。CLDC采用的是KVM,它是高度優(yōu)化的JVM方式,他針對(duì)的是16比特或32比特的微處理器,160到512 KB內(nèi)存為基礎(chǔ)的低端,網(wǎng)絡(luò)連接,電池驅(qū)動(dòng)的設(shè)備。這里需要說明的是,無論應(yīng)用在J2ME上的虛擬機(jī)CVM還是KVM都是J2SE虛擬機(jī)JVM的縮略版。他們之間的關(guān)系如下圖:

簡(jiǎn)表:正如前面所講的,簡(jiǎn)表為J2ME定義了應(yīng)用程序所支持的設(shè)備類型,它是通過向 J2ME 配置添加了特定于域的類來定義設(shè)備的某種作用的。它位于配置的頂部。J2me為CLDC主要定義了兩種簡(jiǎn)表:MIDP(移動(dòng)信息簡(jiǎn)表)和KJAVA,支持小型設(shè)備。同時(shí)為CDC也定義了一種基礎(chǔ)表(也叫綱要簡(jiǎn)表)主要應(yīng)用于家用電器,汽車導(dǎo)航系統(tǒng)這種比較大的終端。?
??? 注:CDC和CLDC目標(biāo)設(shè)備的區(qū)別:?

2、J2ME-J2EE架構(gòu)的優(yōu)勢(shì)?
我們知道雖然利用J2ME可以開發(fā)一些不需要運(yùn)行在無線網(wǎng)絡(luò)環(huán)境的小應(yīng)用程序(比如計(jì)算器,小游戲,日歷),但是這并不是J2ME誕生的真正意義,隨著信息社會(huì)的到來,人們對(duì)于資源需求的不斷膨脹,對(duì)于信息儲(chǔ)備極其有限的手機(jī),PDA這種小型設(shè)備來說,互連網(wǎng)絡(luò)是他們獲取信息的最佳的途徑。于是人們針對(duì)這個(gè)問題研究,并制定了各種各樣的方案,這里我首推J2ME-J2EE架構(gòu)。?
關(guān)于J2EE(Java 2 Platform Enterprise Edition):J2EE是一種利用Java 2平臺(tái)來簡(jiǎn)化企業(yè)解決方案的開發(fā)、部署和管理相關(guān)的復(fù)雜問題的體系結(jié)構(gòu)。J2EE技術(shù)的基礎(chǔ)就是核心Java平臺(tái)或Java 2平臺(tái)的標(biāo)準(zhǔn)版,J2EE不僅鞏固了標(biāo)準(zhǔn)版中的許多優(yōu)點(diǎn),例如"編寫一次、隨處運(yùn)行"的特性、方便存取數(shù)據(jù)庫的JDBC API、CORBA技術(shù)以及能夠在Internet應(yīng)用中保護(hù)數(shù)據(jù)的安全模式等等,同時(shí)還提供了對(duì) EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技術(shù)的全面支持。其最終目的就是成為一個(gè)能夠使企業(yè)開發(fā)者大幅縮短投放市場(chǎng)時(shí)間的體系結(jié)構(gòu)。有了J2EE,使得服務(wù)器端的開發(fā)有了強(qiáng)有力的支持。?
但是網(wǎng)絡(luò)應(yīng)用的模式有很多,為什么非要選擇J2ME+J2EE的架構(gòu)呢??
傳統(tǒng)的網(wǎng)絡(luò)開發(fā)通常采用瘦客戶端的形式,瘦客戶端是基于瀏覽器的應(yīng)用,主要使用HTML,WML,HDML。但是這種架構(gòu)需要連接到高速網(wǎng)絡(luò)才能很好的工作。這顯然不太適合無線網(wǎng)絡(luò)。憑借J2ME背后強(qiáng)大的JAVA技術(shù)的支持,再加上采用JAVA服務(wù)器技術(shù)J2EE作為服務(wù)端,J2ME完全可以設(shè)計(jì)出超越瘦客戶端的新的客戶端形式,即智能客戶端。?
J2ME-J2EE架構(gòu)圖示:

它的優(yōu)勢(shì)體現(xiàn)在:?
(1). 離線能力(即在設(shè)備掉線情況下仍能正常工作)?
(2).客戶端邏輯(即可以本地確認(rèn)和存儲(chǔ)數(shù)據(jù))?
(3).異步網(wǎng)絡(luò)(即數(shù)據(jù)能導(dǎo)向到設(shè)備)?
(4).更好的響應(yīng)效率 ?
這里需要強(qiáng)調(diào)的是J2ME+J2EE的架構(gòu)是基于HTTP協(xié)議的,HTTP協(xié)議,以及HTTP協(xié)議的擴(kuò)展協(xié)議HTTPS本身具有很多優(yōu)勢(shì),在互連網(wǎng)上有很廣泛的應(yīng)用。?
擁有了以上的優(yōu)勢(shì),J2ME+J2EE的架構(gòu)無疑為我們提供了一個(gè)很好的解決方案。?
3、J2ME-J2EE的架構(gòu)的分析和設(shè)計(jì)思路?
常用的應(yīng)用模型:隨著手機(jī)及其他小型設(shè)備的普及,我們可以看到很多基于手機(jī)的無線應(yīng)用,基于短信的居多(比如在線評(píng)球,在線竟猜,和一些在線的小游戲),顯然應(yīng)用在技術(shù)上已經(jīng)比較成熟。我們把這種模型稱為長(zhǎng)時(shí)間離線型。它的特點(diǎn)在于何時(shí)在線并不影響應(yīng)用,設(shè)立更多的本地模塊,通?;诙绦诺哪J健_@種設(shè)計(jì)可以極大的降低連接成本,并且由于數(shù)據(jù)交互在后臺(tái)進(jìn)行,不需要用戶在進(jìn)行干預(yù)。?
與長(zhǎng)時(shí)間離線型相對(duì)的另外一種應(yīng)用模型便是長(zhǎng)時(shí)間連線型,顧名思義這種應(yīng)用模型需要在線狀態(tài)下運(yùn)行,并且采用客戶端-服務(wù)端的運(yùn)行模式,使得用戶可以實(shí)時(shí)的查詢和更新數(shù)據(jù),J2ME-J2EE的架構(gòu)通常被這種模型的設(shè)計(jì)采用,下面我簡(jiǎn)單舉例說明一下采用J2ME-J2EE架構(gòu)實(shí)現(xiàn)的長(zhǎng)時(shí)間應(yīng)用模型的設(shè)計(jì)過程。
(天氣情況查詢系統(tǒng))客戶段的設(shè)計(jì):客戶端采用J2ME編寫,主要采用基于HTTP協(xié)議的javax.microedition.io.HttpConnection類來完成,手機(jī)在上網(wǎng)之后通過它可以實(shí)現(xiàn)與運(yùn)行在INTERNET上的J2EE服務(wù)器的數(shù)據(jù)交換。使用它的主要函數(shù)是GetWeather(),代碼片段如下:?
public void getWeather() {……?
try {……?
URL=”www.x.com/X.JSP?Country=x”?
StringBuffer sb = new StringBuffer(URL);?
sb.append(urlEncode(postalCode.getString()));?
??????? HttpConnection conn = (HttpConnection)Connector.open(sb.toString()):?
??????? InputStream is = conn.openInputStream();//獲取輸入流?
??????? String contentType = conn.getType();?
??????? int len = (int)conn.getLength();?
??????? receivedData = new byte[len];?
??????? int nb = is.read(receivedData);//得到數(shù)據(jù)?
??????? ……}?
上面的實(shí)例是基于HTTP協(xié)議的GET請(qǐng)求協(xié)議,并通過OpenInputStream來獲得數(shù)據(jù)流,當(dāng)然我們也可以采用POST的請(qǐng)求方式,我們知道POST請(qǐng)求的參數(shù)是存放到消息體里的,所以我們要用到OpenOutputStream來返回一個(gè)輸出流,并且采用write(“attributeA value”)將參數(shù)寫入消息體。(實(shí)際上基于J2ME的客戶端應(yīng)用主要發(fā)送HTTP的請(qǐng)求消息,輸出流已經(jīng)不想SOCKET編程應(yīng)用的那么頻繁,基本上只在寫入POST參數(shù)才會(huì)用到。)?
服務(wù)器的設(shè)計(jì):服務(wù)器端用一個(gè)簡(jiǎn)單的javaBean+JSP即可,這里就是簡(jiǎn)單的實(shí)現(xiàn)。?
Sring postalCode = (String)request.getParameter("postalCode");?
……?
????? ResultSet rs = stmt.executeQuery(query);?
????? if (rs.next()) {?
??????? request.setAttribute ("city", rs.getString("city")?
??????? request.setAttribute ("stateprovince", rs.getString("province"));?
??????? request.setAttribute ("weather", rs.getString("weather"));?
??????? nextJSP = "/ReportWeather.jsp";?
???? ??}?
……?
rd.forward(request, response);?
當(dāng)然在系統(tǒng)設(shè)計(jì)的同時(shí),我們通常有許多因素要考慮到,是我對(duì)于這個(gè)問題的一些思路。
應(yīng)當(dāng)考慮的因素:?
1.保證J2ME的應(yīng)用不會(huì)被外來的不可抗拒的因素破壞,中斷,這種因素主要來自于J2ME的設(shè)備的主要應(yīng)用(比如手機(jī)收到電話,短信),所以盡可能的采用后臺(tái)線程來管理應(yīng)用程序,避免這些因素的影響。?
2.小型設(shè)備并非采用像PC一樣的標(biāo)準(zhǔn)鍵盤,如何用小鍵盤進(jìn)行準(zhǔn)確的輸入也是應(yīng)當(dāng)考慮的問題(比如采用詳細(xì)的選擇列表代替用戶的輸入)。?
3.安全性,包括數(shù)據(jù)在傳輸過程中被竊取,J2ME設(shè)備的毀壞和遺失造成的數(shù)據(jù)丟失 (我們可以對(duì)數(shù)據(jù)進(jìn)行加密,并且采取措施定期的對(duì)數(shù)據(jù)備份)?
關(guān)于MIDP2。0:MIDP作為應(yīng)用在CLDC配置上的一種結(jié)構(gòu)已經(jīng)得到了日趨廣泛的應(yīng)用,MIDP2.0作為MIDP1.0的升級(jí)版本曾加了許多新的特性。包括HTTPS成為必要組件,一些包括播放聲音在內(nèi)的一些多媒體API集的引入,并且通過曾加用戶接口,對(duì)游戲編程提供了特別的支持。?
結(jié)束語?
通過上面的介紹,我們可以看到通過J2ME技術(shù)與J2EE技術(shù)的結(jié)合完全可以構(gòu)筑完備的企業(yè)級(jí)無線應(yīng)用,隨著手機(jī),PDA為代表的小型智能設(shè)備的進(jìn)一步發(fā)展,相信以J2ME為代表的JAVA技術(shù)會(huì)有更為廣闊的施展舞臺(tái)。?
參考文獻(xiàn):?
1.Sun公司J2ME 網(wǎng)站 ?
2.J2ME專業(yè)開發(fā)者指南 MIDP Wiley,IS BN 0471034657?
3.sun網(wǎng)絡(luò)社區(qū) ?
