摘要:介紹了一種簡單的嵌入式wap瀏覽器架構(gòu),具有模塊化、可定制行為、方便擴(kuò)展的特性。并重點(diǎn)介紹了WML解析、腳本處理、界面顯示等模塊的具體實(shí)現(xiàn),該瀏覽器能夠?qū)崿F(xiàn)基本的wap瀏覽器功能,具有運(yùn)行效率高、易于實(shí)現(xiàn)的特點(diǎn)。
關(guān)鍵詞:無線應(yīng)用協(xié)議;嵌入式;瀏覽器
中圖分類號(hào):TP393.092文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)04-0794-02
Wap Browser Embedded in the Structure and Achieve
CHEN Jun
(Chengdu University of Technology,Chengdu 610059,China)
Abstract: A simple framework for embedded wap browser,with modular,customizable,easy to expand the properties.And focuses on the analysis WML,script processing,display interface module to achieve specific,the browser can be achieved basic wap browser functionality,with high efficiency,easy-to-achieve characteristics.
Key words: wireless application protocol; embedded; browser
目前,隨著移動(dòng)終端設(shè)備的普及,利用無線網(wǎng)絡(luò)提供因特網(wǎng)上的互動(dòng)服務(wù)越來越受到關(guān)注。Wap作為無線應(yīng)用協(xié)議,人們可以體驗(yàn)真正快捷的互動(dòng)服務(wù),只要通過WAP上網(wǎng),就可以進(jìn)行各項(xiàng)線上業(yè)務(wù),如銀行服務(wù)、賬單繳費(fèi),甚至預(yù)訂飯桌或預(yù)訂電影等。WAP也可以用于傳送及收發(fā)電子郵件,進(jìn)行文字及語音的數(shù)據(jù)傳送。用戶更可通過其公司具備WAP特性的內(nèi)部網(wǎng),讀取和交流公司的信息,例如庫存、現(xiàn)報(bào)價(jià)、公司客戶資料等。此外,在娛樂方面,WAP也提供了嶄新的消遣模式,無論在哪里,人們都可以隨心所欲與網(wǎng)友進(jìn)行聊天(例如WAPQQ聊天),也可以進(jìn)行網(wǎng)上游戲,分享WAP的樂趣。
隨著無線網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,利用wap提供的服務(wù)也越來越豐富,作為應(yīng)用廣泛的瀏覽器軟件,嵌入式的WAP瀏覽器,因其低成本和可移動(dòng)的特點(diǎn),被廣泛應(yīng)用于移動(dòng)通信和信息家電等領(lǐng)域。
1 WAP無線應(yīng)用協(xié)議
WAP是Wireless Application Protocol(無線應(yīng)用協(xié)議)的簡稱,WAP協(xié)議與現(xiàn)在通行的互聯(lián)網(wǎng)協(xié)議類似,但專為小屏幕、窄帶的用戶裝置(如移動(dòng)電話)優(yōu)化。通過定義一系列將互聯(lián)網(wǎng)內(nèi)容過濾和轉(zhuǎn)化為適用移動(dòng)通信的標(biāo)準(zhǔn),使互聯(lián)網(wǎng)內(nèi)容可以更容易地在移動(dòng)終端上顯示。
WAP的規(guī)范由WAP標(biāo)準(zhǔn)化組織OMA規(guī)定,當(dāng)前的版本是2.0,它增加了新的移動(dòng)網(wǎng)絡(luò)承載,支持在互聯(lián)網(wǎng)上廣泛應(yīng)用的HTTP/TLS/TCP等協(xié)議的無線版本,支持動(dòng)態(tài)HTML語言以及CSS等新的Internet技術(shù)。WAP2.0擴(kuò)展增強(qiáng)了原有版本的功能,包括基于服務(wù)器的內(nèi)容及其“推”(PUSH) 機(jī)制、用戶代理定制、WTA(無線電話應(yīng)用) 等。同時(shí)WAP2.0新增了很多有用的功能,例如外部功能接口、永久存儲(chǔ)接口、數(shù)據(jù)同步、支持MMS。
2 嵌入式WAP瀏覽器的總體框架結(jié)構(gòu)
整個(gè)瀏覽器可分為3個(gè)主要模塊,分別是網(wǎng)絡(luò)傳輸模塊,解析模塊和排版顯示模塊(圖1)
WAP瀏覽器框架的基本工作流程為:WAP瀏覽器通過TCP協(xié)議從服務(wù)器接收WML文件,交給WAP解析器對(duì)該文件進(jìn)行解析,在解析的過程中形成DOM樹和Render樹;最后將解析結(jié)果在顯示器上顯示。用戶界面模塊和網(wǎng)絡(luò)協(xié)議模塊被劃分為兩個(gè)單獨(dú)的任務(wù),有利于提高系統(tǒng)的并發(fā)度。界面任務(wù)負(fù)責(zé)內(nèi)容處理、接受用戶的輸入輸出,而會(huì)話任務(wù)主要用于從網(wǎng)絡(luò)接收和發(fā)送數(shù)據(jù)。
以一次瀏覽網(wǎng)頁的場景來考察模塊之間的調(diào)用關(guān)系。用戶在地址欄輸入U(xiǎn)RL,用戶界面模塊捕獲輸入事件,并請(qǐng)求內(nèi)容處理模塊處理。內(nèi)容處理模塊發(fā)送URL請(qǐng)求給網(wǎng)絡(luò)協(xié)議模塊然后立即返回。網(wǎng)絡(luò)協(xié)議模塊通過WAP協(xié)議,向服務(wù)器請(qǐng)求數(shù)據(jù);經(jīng)過網(wǎng)絡(luò)上一段時(shí)間的延遲后,網(wǎng)絡(luò)協(xié)議模塊接收到數(shù)據(jù),以異步方式通知內(nèi)容處理模塊數(shù)據(jù)已經(jīng)到達(dá)。內(nèi)容處理模塊接收數(shù)據(jù),判斷是WML的文件格式,于是送往XML語法分析器解析,通過DOM樹接口模塊生成DOM樹。在DOM樹中可能還會(huì)存在外部的圖片和樣式表(CSS)鏈接,于是再次通過網(wǎng)絡(luò)協(xié)議模塊請(qǐng)求數(shù)據(jù)。接收到的圖片數(shù)據(jù)會(huì)被解碼和緩存起來;而CSS文件先進(jìn)行語法分析,從而生成CSS規(guī)則。根據(jù)DOM樹的層次結(jié)構(gòu),和每個(gè)節(jié)點(diǎn)的XHTML/WML語義,就可以構(gòu)建實(shí)際要呈現(xiàn)給用戶的顯示對(duì)象,稱之為Render樹。將CSS規(guī)則應(yīng)用到Render 樹上,按照屏幕大小、Render節(jié)點(diǎn)顯示屬性、以及Render 節(jié)點(diǎn)之間的位置相對(duì)關(guān)系等,對(duì)Render 樹進(jìn)行排版,最后顯示到屏幕上。當(dāng)用戶對(duì)屏幕上的元素進(jìn)行操作時(shí)(如點(diǎn)擊超級(jí)鏈接),相應(yīng)的事件會(huì)通過Render節(jié)點(diǎn)傳遞到DOM節(jié)點(diǎn)上,并繼續(xù)在DOM樹上進(jìn)行事件繁衍或按照預(yù)定的事件處理流程進(jìn)行處理(如跳轉(zhuǎn)到下一個(gè)URL、調(diào)用WMLScript 腳本等) 。
3 WML解析模塊
3.1 WML標(biāo)記語言
無線標(biāo)記語言(WML)是基于xml(Extensible Markup Language)定義的一種標(biāo)記語言。其目的是為在窄帶設(shè)備上定義內(nèi)容和界面提供一種合適的方法,所以WML的設(shè)計(jì)考慮了窄帶設(shè)備的一些局限性,這些局限性包括顯示屏小,輸入功能有限,內(nèi)存少,計(jì)算能力差以及網(wǎng)絡(luò)連接帶寬低等。WML文檔內(nèi)容的基本單元是Element元素,它的語法格式如下:(標(biāo)簽)文本內(nèi)容(/標(biāo)簽)。元素由起始標(biāo)簽、元素內(nèi)容和結(jié)束標(biāo)簽組成。XML元素中還可以再嵌套別的元素,這樣使相關(guān)信息構(gòu)成層次結(jié)構(gòu)。
3.2 WML的功能
1) 文本呈現(xiàn)和布局
WML支持文本和圖像,支持多種格式和布局命令。
2) 卡片組/卡片組織結(jié)構(gòu)隱喻
WML的所有信息都組織為卡片和卡片組的集合??ㄆ硎疽粋€(gè)或多個(gè)用戶交互單元(例如選擇菜單,一屏文本或者一個(gè)文本輸入域)。邏輯上講,用戶通過一系列WML卡片進(jìn)行瀏覽,查看相關(guān)的內(nèi)容,輸入要求的信息,做出選擇,然后轉(zhuǎn)到另一張卡片。相關(guān)的WML卡片組織在一起成為WML卡片組,WML卡片組與HTML頁面類似,可以用URL < Uniform Resource Locators )進(jìn)行標(biāo)識(shí),并且是內(nèi)容傳輸?shù)幕締卧?/p>
3) 卡片間瀏覽和鏈接
WML為在卡片和卡片組之間的進(jìn)行瀏覽提供了明確的管理方法,并且支持在設(shè)備上進(jìn)行事件處理設(shè)置。這種設(shè)置可能用于瀏覽目的或者執(zhí)行一段腳本。
4) 字符串參數(shù)化和狀態(tài)管理
所有的WML卡片組可以采用狀態(tài)模型進(jìn)行參數(shù)化在字符串的位置上可以使用變量,并且在運(yùn)行時(shí)進(jìn)行替換。參數(shù)化能夠更有效的利用網(wǎng)絡(luò)資源。
3.3 標(biāo)記語言處理
解析器首先讀入XMLDec、XMLDec與DocTypeDec之間可能的注釋DocTypeDec、跟于DocTypeDec之后的注釋行。該部分即為WML文檔的檔案類型定義部分。之后從根元素開始,讀取WML正文內(nèi)容,以后的元素均為根元素的直接或間接子元素。每次讀入Element,首先讀取該元素的屬性,包括屬性名稱和屬性值等,屬性由WML文檔的DTD中定義:然后通過一個(gè)循環(huán)過程讀入該元素的Body(如果該元素有子元素,則該元素存在Body)。對(duì)于Body 的讀取,其實(shí)又是一個(gè)循環(huán)讀取Element的過程。這樣,讀Element和讀Body的兩個(gè)過程形成了互相調(diào)用的遞歸。
經(jīng)過上述流程對(duì)WML文件解釋完畢之后,在內(nèi)存中就形成了一棵對(duì)應(yīng)該文件的WML語法樹,遍歷該語法樹中的每一個(gè)元素的即可完成對(duì)頁面元素的顯示。如圖2所示。
4 WMLScript腳本處理
WMLScript執(zhí)行體當(dāng)在WML中要訪問的URL是WMLScript腳本函數(shù),WML執(zhí)行體將下載的腳本及其URL傳遞給WMLScript執(zhí)行體編譯器編譯,再傳遞給虛擬機(jī)解釋執(zhí)行,主要涉及編譯器、虛擬機(jī)、標(biāo)準(zhǔn)庫三個(gè)模塊。虛擬機(jī)在解釋執(zhí)行相應(yīng)函數(shù)時(shí)會(huì)形成的WMLScript上下文并回調(diào)其WMLScript運(yùn)行庫,而WMLScript執(zhí)行體最終會(huì)調(diào)用WML執(zhí)行體提供的訪問瀏覽器上下文的功能函數(shù)、GUI提供的輸入框和提示框函數(shù)及標(biāo)準(zhǔn)庫函數(shù)完成腳本要求的動(dòng)作,其中WMLScript運(yùn)行庫是開放的運(yùn)行庫,WMLScript包含lang、float、string、URL、WMLBrowser和Dialogs 6個(gè)標(biāo)準(zhǔn)庫。
當(dāng)用戶點(diǎn)擊屏幕上的某一個(gè)顯示元素,導(dǎo)致輸入事件再度產(chǎn)生,內(nèi)容處理模塊根據(jù)產(chǎn)生事件的屏幕位置定位到相應(yīng)的DOM節(jié)點(diǎn)。假設(shè)此時(shí)該DOM元素對(duì)應(yīng)的事件處理是執(zhí)行一段腳本,這就會(huì)導(dǎo)致進(jìn)入腳本處理模塊的執(zhí)行環(huán)境。腳本執(zhí)行的結(jié)果可能會(huì)導(dǎo)致邏輯計(jì)算、網(wǎng)頁變化、或產(chǎn)生與用戶交互的對(duì)話框等。這樣就達(dá)到了網(wǎng)頁的動(dòng)態(tài)效果。WMLScript 解釋器采用上下文無關(guān)文法,包括詞法文法、語義文法、數(shù)字文法、字串文法和URI文法。采用Unix工具lex和yacc來完成WMLScript 詞法分析和語法分析。
源代碼經(jīng)過語義分析就生成了語法樹。語法樹中的結(jié)點(diǎn)包括編譯單元、函數(shù)聲明、代碼塊、語句、變量、表達(dá)式、函數(shù)體等,對(duì)應(yīng)于編程語言中的相應(yīng)概念。根據(jù)生成的語法樹,從根結(jié)點(diǎn)(應(yīng)當(dāng)是從WML開始調(diào)用的某一個(gè)入口函數(shù)) 開始,遍歷并執(zhí)行每個(gè)結(jié)點(diǎn)的execute()函數(shù),最終達(dá)到了對(duì)腳本運(yùn)行的效果。
5 瀏覽器的顯示
圖形顯示模塊中的處理類從WML源碼分析模塊得到WML網(wǎng)頁的樹型結(jié)構(gòu),根據(jù)每個(gè)樹節(jié)點(diǎn)的標(biāo)簽,把它們轉(zhuǎn)成相應(yīng)的類,并這些類都實(shí)現(xiàn)TreeNode接口,得到一個(gè)樹型結(jié)構(gòu);接著,處理類從根節(jié)點(diǎn)開始,根據(jù)WML語法,分析這個(gè)樹型結(jié)構(gòu)。顯示類繼承了面板控件,用于WML元素的圖形化顯示,它將顯示區(qū)分成兩部分:一個(gè)是正文顯示區(qū),另一個(gè)是按鈕區(qū)。處理類根據(jù)網(wǎng)址,分析收到的WML網(wǎng)頁的某個(gè)card,顯示類相應(yīng)地申請(qǐng)一個(gè)面板,處理類將那個(gè)card往下分析,如果分析到需要顯示的元素,就調(diào)用顯示類的相應(yīng)函數(shù),把該元素的顯示控件加到card面板上。顯示控件是根據(jù)元素的屬性改進(jìn)了的控件。如用于顯示input元素的控件繼承了文本框控件并進(jìn)行了改進(jìn),從而使input控件不僅能輸入,而且能根據(jù)input元素的屬性,只輸入數(shù)字,或只輸入固定個(gè)數(shù)字符等。如果分析到的元素是事件元素(onevent,do,anchor),onevent元素的事件不是由用戶觸發(fā),不需要在界面實(shí)現(xiàn),do和anchor元素通過按鈕控件實(shí)現(xiàn),設(shè)定控件的響應(yīng)事件為元素的事件,anchor元素使用沒有邊界,不凸起的按鈕,并顯示在card面板上,do元素使用普通按鈕顯示在按鈕區(qū)。分析完所有元素,這個(gè)WML網(wǎng)頁的一個(gè)card圖形也出來了,然后把這個(gè)card面板加到顯示區(qū),就顯示出來。
6 測(cè)試結(jié)果
我們通過采用IIS服務(wù)器作為WAP服務(wù)器,對(duì)WAP瀏覽器進(jìn)行了全面的測(cè)試。WAP瀏覽器能夠通過WSP面向鏈接和非鏈接的兩種服務(wù)向服務(wù)器成功地請(qǐng)求到WML網(wǎng)頁;并且對(duì)WML所有元素及其屬性都能正常顯示;能夠正常與用戶交互,正確執(zhí)行WMLScript語言;實(shí)現(xiàn)了預(yù)先設(shè)想的功能。
7 結(jié)論
該文介紹了一個(gè)WAP瀏覽器的架構(gòu)和實(shí)現(xiàn);該瀏覽器具有友好的用戶界面,具有比一般移動(dòng)終端的瀏覽器更多的功能,既能用于瀏覽WML網(wǎng)頁,也能用于測(cè)試WAP網(wǎng)關(guān)和WAP服務(wù)器。
雖然這個(gè)WAP瀏覽器已具備比較完備的功能,但是WAP協(xié)議的不斷改進(jìn),賦予了WML語言和WMLScript語言更多的內(nèi)容。因此,WAP瀏覽器也需要不斷完善功能,以實(shí)現(xiàn)對(duì)最新版本的WML網(wǎng)頁的瀏覽。
參考文獻(xiàn):
[1] 王會(huì)進(jìn),邱煒斌.嵌入式WAP解析器的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2005(5):1012-1014.
[2] 柳洋蔣,澤軍基.基于分層結(jié)構(gòu)的可移植WAP瀏覽器設(shè)計(jì)[J].科學(xué)技術(shù)與工程,2006(08):1072-1074.
[3] 陳華良,孔令海,陳增強(qiáng),劉慮信,袁著祉.一種基于Java的WAP瀏覽器的設(shè)計(jì)及實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2005(13):206-208.
[4] 羅蕾,王慶,譚羅麗.WAP安全構(gòu)架研究及WTLS的實(shí)現(xiàn)[J].電子科技大學(xué)學(xué)報(bào),2002,31(4):387-392.
[5] Andrew S.Tandenbaum computer networks(3rd edition)[M].Prentice Hall,1996.
[6] 任立勇,盧顯良.Internet擁塞控制研究[J].電子科技大學(xué)學(xué)報(bào),2002,31(1):48-51.
[7] 張惠媛.移動(dòng)互聯(lián)網(wǎng)與WAP技術(shù)[M].北京:電子工業(yè)出版社,2002.
[8] 李允,熊光澤,楊玉平.一種嵌入式瀏覽器設(shè)計(jì)技術(shù)[J].微型機(jī)及應(yīng)用,2001,20(12):57-59.
[9] BRAY T,etal.Extensible Markup Language(XML),W3C Proposed Recommendation 10-February-1998,REC-xml-19980210[EB/OL].http://www.w3.org/TR/REC-xml,1998-04-10.
[10] BUSCHMANN F.面向模式的軟件體系結(jié)構(gòu)卷1:模式系統(tǒng)[M].北京:機(jī)械工業(yè)出社,2003.
[11] 張祿林,等.WAP技術(shù)及其應(yīng)用[M].北京:人民郵電出版社,2001.
[12] WAP FORUM.WAP-210-wapArch-20010712[EB/OL].http://www.wapforum.org/.2001-07-12.
[13] WAP FORUM. WAP-193-101-WMLS-20010928-a[EB/OL].http://www.wapforum.org/.2001-09-28.