J2ME及其基本慨念_JSP教程
推薦:J2ME基礎(chǔ)知識(shí)一、J2ME中需要的Java基礎(chǔ)知識(shí) 現(xiàn)在有大部分人,都是從零開(kāi)始學(xué)J2ME的,學(xué)習(xí)J2ME的時(shí)候,總是從Java基礎(chǔ)開(kāi)始學(xué)習(xí),而且現(xiàn)在講Java基礎(chǔ)的書籍中都是以J2SE來(lái)講基礎(chǔ),這就給學(xué)習(xí)造成
如果您曾經(jīng)http://www.javasoft.com ;網(wǎng)站上查詢有關(guān)Java 2 Micro Edition 的資料,十之八九會(huì)被一大堆的技術(shù)名詞搞的一頭霧水。 什么 KVM ,什么CLDC 、CDC 、MIDP ,后面面還冒出了Personal Java 、Embedded Java以及JES 等名詞。雖然名為Java 的微小版本,可是它的世界可真是不小,讓我們滿肚子“見(jiàn)山不是山,見(jiàn)水不是水”的疑惑。的確,在我剛開(kāi)始接觸 Java 2 Micro Edition 的時(shí)候,就感覺(jué)到這個(gè)玩意兒實(shí)在越看越讓人摸不著頭緒。
因此在本文中,我舍棄了技術(shù)上的細(xì)節(jié),希望帶大家從宏觀的角度來(lái)看待 Java 2 Micro Edition 的世界。希望讀過(guò)本文之后,可以使大家體驗(yàn)“見(jiàn)山是山,見(jiàn)水是水”,一切豁然開(kāi)朗的感覺(jué)。首先,我們必須先對(duì)Java 2 Micro Edition 在整個(gè)Java 技術(shù)之中的定位做個(gè)了解。
各種不同版本之Java 程序的開(kāi)發(fā)
如前面所說(shuō),各種不同的Java 版本,在其支持的核心類別函式庫(kù)之完整性以及所支持的 Java 基本型別這兩件事情上都有所差異,也就是說(shuō),不管您開(kāi)發(fā)的是企業(yè)所使用的Java 程序、嵌入式裝置上執(zhí)行的Java 程序、瀏覽器上執(zhí)行的Applet ,或是在PC 上執(zhí)行的應(yīng)用程序。您都必須在您的電腦上先安裝 J2SE ,然后再安裝各種版本的核心類別函式庫(kù)以及額外的擴(kuò)充類別函式庫(kù),如此才能成功地開(kāi)發(fā)各種不同目的的Java 程序。
J2SE所提供的Java 編譯器(javac.exe)可以幫助我們編譯各種不同平臺(tái)上的Java 程序,而J2SE 所提供的Java 虛擬機(jī)器(java.exe)則可以幫助我們?cè)赑C 上先行測(cè)試這些程序執(zhí)行結(jié)果的正確與否。
另外,Java 編譯器并不會(huì)幫您檢查您的程序是否符合各種平臺(tái)上所支持的核心類別函式庫(kù)與 Java 基本型別。舉例來(lái)說(shuō),雖然我們?cè)谇懊嬲f(shuō)過(guò),Smart Card 版本并不支持boolean 、byte 以外的Java 基本型別,而且該平臺(tái)也只支持java.lang.* 核心類別,可是當(dāng)我們?cè)谧珜?Smart Card 平臺(tái)上的程序時(shí),就算在程序碼里用了boolean 或byte 以外的Java 基本型別,或者使用了java.lang.*之外的其它核心類別,編譯器仍然可以照常幫您編譯出類別檔。
這個(gè)時(shí)候大家一定開(kāi)始產(chǎn)生疑惑——那么這些程序如果放到Smart Card 上頭執(zhí)行的時(shí)候,出了問(wèn)題怎么辦 ? 難道不會(huì)造成Smart Card 上的虛擬機(jī)器執(zhí)行時(shí)發(fā)生錯(cuò)誤嗎 ? 針對(duì)這個(gè)可能發(fā)生的潛在問(wèn)題,Sun Microsystems 在各種不同版本的開(kāi)發(fā)套件中,有些會(huì)內(nèi)附檢查器 (checker)或者預(yù)先審核器 preverifier),這兩個(gè)工具可以幫助您在將程序放到目標(biāo)平臺(tái)之前先做好檢查和預(yù)先審核的工作。檢查器會(huì)幫您找出類別檔之中不合目標(biāo)平臺(tái)規(guī)格的部分,并提醒你這些地方可能無(wú)法在目標(biāo)平臺(tái)上執(zhí)行。因此只要有檢查器的協(xié)助,您大致上可以確定您的程序可以符合目標(biāo)平臺(tái)的規(guī)定并順利執(zhí)行。 Java Card 的開(kāi)發(fā)套件中就附有檢查器。
而某些平臺(tái)的開(kāi)發(fā)套件則附有預(yù)先審核器,預(yù)先審核器除了做檢查器做的工作之外,還有一項(xiàng)額外的工作,就是減輕目標(biāo)平臺(tái)上虛擬機(jī)器的負(fù)擔(dān),要解釋預(yù)先審核器這個(gè)額外的工作,在傳統(tǒng)的 Java 程序之中,為了安全上的考慮,任何進(jìn)入執(zhí)行環(huán)境的類別檔 (不管該類別檔是來(lái)自本機(jī)或是遠(yuǎn)端機(jī)器 ),都必須先經(jīng)過(guò)Byte Code 審核器(Byte code verifier)的驗(yàn)證,以防止程序在傳送途中遭到惡意的修改,而使得 Java 程序在執(zhí)行時(shí)對(duì)系統(tǒng)有不良影響。
經(jīng)過(guò)審核之后,該類別檔才能開(kāi)始被J 虛擬機(jī)器所執(zhí)行。如果這個(gè)審核的動(dòng)作在一般的 PC 上執(zhí)行,速度倒是還能夠接受,可是一旦放到如 Palm 或是手機(jī)這些CPU 較慢、記憶體也比較少的機(jī)器上面就顯得十分吃力了。為了節(jié)省寶貴的 CPU 運(yùn)算時(shí)間(既能省電又能夠加速程序執(zhí)行 ),因此,在程序設(shè)計(jì)師產(chǎn)生能夠讓某些特定平臺(tái)執(zhí)行的類別檔之前,程序設(shè)計(jì)師必須先在 PC 上使用預(yù)先審核器做一些前置的審核工作,預(yù)先審核器會(huì)在類別檔之中加入一些特殊標(biāo)記或符號(hào)。如此一來(lái),當(dāng)這些程序放到目標(biāo)平臺(tái)上執(zhí)行時(shí),就可以大幅減少在目標(biāo)平臺(tái)上做審核時(shí)的時(shí)間,藉而加速程序的的啟動(dòng)及執(zhí)行速度。因此在J2ME 之下的程序(Spotlet 、MIDlet),其執(zhí)行步驟變成因?yàn)轭A(yù)先審核的關(guān)系,執(zhí)行時(shí)Byte Code,審核器的工作就變少了,也因此從程序載入到開(kāi)始執(zhí)行之間的時(shí)間因而縮短。 CLDC標(biāo)準(zhǔn)實(shí)作和MIDP 參考實(shí)作之中就附有預(yù)先審核器。
Java 版本的演進(jìn)
相信熟悉Java 演進(jìn)歷史的人或多或少都聽(tīng)說(shuō)過(guò),Java 技術(shù)一開(kāi)始并非就叫做 Java ,而是叫做OAK ,而且最早的時(shí)候就是為了嵌入式系統(tǒng)而設(shè)計(jì)的一項(xiàng)產(chǎn)品。后來(lái)因?yàn)榫W(wǎng)際網(wǎng)路的發(fā)達(dá),而OAK 的諸多特性剛好又適合用在網(wǎng)路上(例如可移植性、編譯后程序碼很小),因?yàn)樯虡?biāo)已被注冊(cè)的關(guān)系,因此 OAK 被改名成Java ,從此因緣際會(huì)地成了網(wǎng)路上的閃亮巨星,并隨著時(shí)間越來(lái)越成熟,也慢慢地產(chǎn)生了許多非原本預(yù)期中的相關(guān)運(yùn)用。
雖然 Java 已經(jīng)被用到許多企業(yè)級(jí)軟體上,可是其實(shí)骨子里面還是非常適合用在嵌入式系統(tǒng)之中。
雖然從Java 1.0 發(fā)表之后,Java 就被廣泛地使用在桌上型應(yīng)用程序以及Applet 的開(kāi)發(fā)上,但是,從Java 1.1 開(kāi)始,Java又回到了它一開(kāi)始的老路--也就是嵌入式系統(tǒng)方面的應(yīng)用,在當(dāng)時(shí)Sun Microsystems 發(fā)表了Embedded Java 與Personal Java(也有人簡(jiǎn)稱為PJava)這兩項(xiàng)規(guī)格。其中Embedded Java 是為了資源十分有限,而且沒(méi)有顯示設(shè)備的嵌入式裝置而設(shè)計(jì);Personal Java 則是為了在能夠與網(wǎng)際網(wǎng)路連線、并擁有顯示系統(tǒng)(例如彩色LCD)的消費(fèi)性電子裝置而設(shè)計(jì)。接著Java 的版本演進(jìn)到Java 2 ,這時(shí)為了再明顯區(qū)分各種Java 的應(yīng)用,所以分割出了J2EE、J2SE、以及 J2ME 三種版本。
這三種版本的各種特性我們已經(jīng)在前面已經(jīng)詳細(xì)地描述,在此不再贅述。不過(guò)請(qǐng)大家記住,由于 Java 2將Java 的應(yīng)用區(qū)分成三大塊,使得 Java 程序語(yǔ)言的發(fā)展不會(huì)再像Java 1.1時(shí)如樹枝狀般擴(kuò)散出去,這么一來(lái)有助于大家對(duì) Java 各種應(yīng)用的了解,而不會(huì)造成今后越發(fā)展下去越不可收拾的混亂局面。額外向大家一提的是,后來(lái)Personal Java 發(fā)展到1.2 版的時(shí)候,也采用了一些Java 2 平臺(tái)上與安全性有關(guān)的設(shè)計(jì)。
Java 2 Micro Edition 概念
J2ME 在設(shè)計(jì)其規(guī)格的時(shí)候,遵循著「對(duì)于各種不同的裝置而造出一個(gè)單一的開(kāi)發(fā)系統(tǒng)是沒(méi)有意義的事」這個(gè)基本原則。于是 J2ME 先將所有的嵌入式裝置大體上區(qū)分為兩種 :一種是運(yùn)算功能有限、電力供應(yīng)也有限的嵌入式裝置(比方說(shuō)PDA 、手機(jī));另外一種則是運(yùn)算能力相對(duì)較佳、并請(qǐng)?jiān)陔娏⿷?yīng)上相對(duì)比較充足的嵌入式裝置 (比方說(shuō)冷氣機(jī)、電冰箱、電視機(jī)上盒 (set-top box))。因?yàn)檫@兩種型態(tài)的嵌入式裝置,所以Java 引入了一個(gè)叫做Configuration 的概念,然后把上述運(yùn)算功能有限、電力有限的嵌入式裝置定義在Connected Limited Device Configuration(CLDC)規(guī)格之中;而另外一種裝置則規(guī)范為 Connected Device Configuration(CDC)規(guī)格。也就是說(shuō), J2ME 先把所有的嵌入式裝置利用Configuration 的概念區(qū)隔成兩種抽象的型態(tài)。
其實(shí)在這里大家可以把Configuration 當(dāng)作是J2ME 對(duì)于兩種類型嵌入式裝置的規(guī)格,而這些規(guī)格之中定義了這些裝置至少要符合的運(yùn)算能力、供電能力、記憶體大小等規(guī)范,同時(shí)也定了一組在這些裝置上執(zhí)行的 Java 程序所能使用的類別函式庫(kù)、這些規(guī)范之中所定義的類別函式庫(kù)為 Java 標(biāo)準(zhǔn)核心類別函式庫(kù)的子集合以及與該型態(tài)裝置特性相符的擴(kuò)充類別函式庫(kù)。比方就CLDC 的規(guī)范來(lái)說(shuō),可以支持的核心類別函式庫(kù)為java.lang.* 、java.io.*、java.util.*,而支援的擴(kuò)充類別函式庫(kù)為java.microedition.io.*。區(qū)分出兩種主要的Configuration 之后,J2ME 接著在定義出Profile的概念。Profile 是架構(gòu)在Configuration 之上的規(guī)格。之所以有Profile的概念,是為了要更明確地區(qū)分出各種嵌入式裝置上Java 程序該如何開(kāi)發(fā)以及它們應(yīng)該具有哪些功能。因此Profile 之中定義了與特定嵌入式裝置非常相關(guān)的擴(kuò)充類別函式庫(kù),而 Java 程序在各種嵌入式裝置上的使用者接口該如何呈現(xiàn)就是定義在Profile 里頭。Profile 之中所定義的擴(kuò)充類別函式庫(kù)是根據(jù)底層Configuration 內(nèi)所定義的核心類別函式庫(kù)所建立。
Java 在嵌入式系統(tǒng)上的應(yīng)用
由于Java 本身最初的設(shè)計(jì)理念即是針對(duì)嵌入式系統(tǒng),因此將他用在嵌入式系統(tǒng)上真可謂如魚得水。在這個(gè)Linux 開(kāi)始興起的時(shí)空交會(huì)點(diǎn),網(wǎng)路上出現(xiàn)了一篇關(guān)于嵌入式 Linux 與Java 互相配合以造就雙贏局面的相關(guān)報(bào)導(dǎo),這是由 LinuxDevices.com 的專欄作家 Randy Rorden 所發(fā)表的一篇白皮書,名為「 Java 與嵌入式 Linux 合作」。 在這篇文章里頭,作者對(duì)嵌入式Linux與Java 個(gè)別的優(yōu)點(diǎn)提出他的看法,同時(shí)也提出了Java-Linux 平臺(tái)的構(gòu)想。有興趣的讀者可以到到下列幾個(gè)網(wǎng)站參考相關(guān)新聞與資料。
1. Java 與嵌入式 Linux 合作白皮書http://www.ctech.com.tw/d-news/news/linux/89090208.asp ;
2. Java 及嵌入式Linux 合作http://www.linuxdevices.com/news/NS5973673868.html ;
3. 即將來(lái)臨的Java-Linux 結(jié)合http://www.linuxdevices.com/articles/AT7102892618.html ;
為何要用Java 撰寫PDA 上的應(yīng)用程序?
由于預(yù)期到今后行動(dòng)通訊時(shí)代的來(lái)臨,所以通訊相關(guān)行業(yè)變的前景可期,而除了達(dá)成行動(dòng)通訊的主要工具 -- 手機(jī)月來(lái)越精巧之外,有更多的廠商相繼投入PDA 的生產(chǎn)與開(kāi)發(fā)。本來(lái)PDA 主要的平臺(tái)有PalmOS 、Windows CE 以及EPOC ,也不知道曾幾何時(shí),開(kāi)始一大堆公司投入embedded linux 的研發(fā),其中包括國(guó)內(nèi)資策會(huì)自己開(kāi)發(fā)的 @ViS 作業(yè)系統(tǒng),互慧科技也有自己的嵌入式作業(yè)系統(tǒng),當(dāng)然更不用說(shuō)大陸廠商與韓國(guó)廠商了。
這些作業(yè)平臺(tái)的數(shù)量比起 PC 來(lái)說(shuō)真不知道要復(fù)雜上幾倍。對(duì)一般使用者來(lái)說(shuō)當(dāng)然影響比較小,可是對(duì)于程序開(kāi)發(fā)者來(lái)說(shuō),看到這么多不同的程序發(fā)展平臺(tái),真是讓人望之卻步。如果每個(gè)平臺(tái)都有自己的程序?qū)懛ㄒ约昂綆?kù),那么光是看上面這些平臺(tái)至少就要學(xué)習(xí)五種以上程序的寫法。當(dāng)然,只專精一種平臺(tái)當(dāng)然是很好的事情�?墒浅绦蛟O(shè)計(jì)師不禁要說(shuō) :”如果我們寫出來(lái)的軟體可以在不經(jīng)過(guò)修改原始碼的情況下就能夠在這些平臺(tái)上執(zhí)行,那不是更完美嗎?” 對(duì)程序開(kāi)發(fā)者來(lái)說(shuō),這樣的投資報(bào)酬率當(dāng)然是最大的。
要在那么多平臺(tái)上開(kāi)發(fā)程序,對(duì)程序設(shè)計(jì)師來(lái)說(shuō)的確是一個(gè)很大的挑戰(zhàn),如果要把所有的時(shí)間和精力放在軟體的可用性上,那么相對(duì)地很多時(shí)候我們根本沒(méi)有那么多時(shí)間撰寫各種平臺(tái)的程序。要解決這個(gè)問(wèn)題,一般來(lái)說(shuō)程序設(shè)計(jì)師會(huì)選用一個(gè)可以跨平臺(tái)的Framework 來(lái)達(dá)成至少source code level 的跨平臺(tái)(例入Qt 就能做到)。不過(guò)在本篇文章中我們要介紹的則是更終極的解決方案 ?Java ,利用Java 的”write once, run anywhere”特性,我們可以真正達(dá)到程序只要寫一次,拿到任何平臺(tái)上都可以執(zhí)行(當(dāng)然前提是必須要PDA 的廠商也要實(shí)作出該平臺(tái)的Java Virtual Machine 才行)。利用Java 來(lái)做PDA 上的程序當(dāng)然有其缺點(diǎn),最廣為人知的可能就是執(zhí)行效率的問(wèn)題, Java 在執(zhí)行速度這個(gè)議題上一直讓人詬病。
不過(guò)筆者認(rèn)為,隨著技術(shù)的發(fā)達(dá),將會(huì)有更快更省電的PDA 專用CPU 出現(xiàn),因此效率上的問(wèn)題其實(shí)是可以忽略的。更何況,當(dāng) Sun 在設(shè)計(jì)J2ME 的時(shí)候,也用了很多方式企圖加快Java 在PDA 上的執(zhí)行速度(例如預(yù)先審核)。
轉(zhuǎn)自:http://tb.blog.csdn.net/TrackBack.aspx?PostId=562440 (責(zé)任編輯:銘銘)
分享:J2ME中的通用聯(lián)網(wǎng)框架簡(jiǎn)介通用聯(lián)網(wǎng)框架在J2ME平臺(tái)中扮演著十分重要的角色,如果沒(méi)有它,我們寫的應(yīng)用程序?qū)ν馊藖?lái)說(shuō)只能說(shuō)“神秘”,而應(yīng)用了通用聯(lián)網(wǎng)框架進(jìn)行聯(lián)網(wǎng)的程序就顯得“神奇”了。本文將對(duì)通用聯(lián)網(wǎng)框
- jsp response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復(fù)習(xí)整理
- JSP腳本元素和注釋復(fù)習(xí)總結(jié)示例
- JSP FusionCharts Free顯示圖表 具體實(shí)現(xiàn)
- 網(wǎng)頁(yè)模板:關(guān)于jsp頁(yè)面使用jstl的異常分析
- JSP頁(yè)面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項(xiàng)目中連接Access數(shù)據(jù)庫(kù)的配置方法
- JDBC連接Access數(shù)據(jù)庫(kù)的幾種方式介紹
- 網(wǎng)站圖片路徑的問(wèn)題:絕對(duì)路徑/虛擬路徑
- (jsp/html)網(wǎng)頁(yè)上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對(duì)路徑下的圖片解決方法
JSP教程Rss訂閱編程教程搜索
JSP教程推薦
- jsp速度優(yōu)化七種方法
- JSP網(wǎng)站開(kāi)發(fā)環(huán)境的目錄結(jié)構(gòu)標(biāo)準(zhǔn)
- JSP中文亂碼問(wèn)題解決方法小結(jié)
- Spring學(xué)習(xí)基礎(chǔ)---與Struts整合
- Windows下JSP開(kāi)發(fā)環(huán)境的配置
- 詳談Java如何進(jìn)階
- 簡(jiǎn)介jsp上傳組件smartupload
- Java與其他語(yǔ)言數(shù)據(jù)類型之間的轉(zhuǎn)換方法
- 提升JSP應(yīng)用程序的幾個(gè)技巧
- JAVA實(shí)現(xiàn)數(shù)據(jù)庫(kù)基本操作指南
- 相關(guān)鏈接:
- 教程說(shuō)明:
JSP教程-J2ME及其基本慨念
。