1.西南交通大學(xué)峨眉分校,四川 峨眉 614202;
2.西南交通大學(xué)計算機與通信工程學(xué)院,四川 成都 610031)
摘 要:在無線應(yīng)用協(xié)議(WAP)技術(shù)的無線應(yīng)用環(huán)境部分,本文提出一種嵌入移動終端的微瀏覽器的設(shè)計方案。在設(shè)計中按功能劃分為接口、執(zhí)行、解析、顯示4個部分,在實現(xiàn)中利用封裝技術(shù),使其易于移植到移動終端內(nèi)。將實現(xiàn)了的微瀏覽器嵌入到實驗所用的移動終端,實驗表明,該微瀏覽器能成功地解析和顯示無線應(yīng)用協(xié)議網(wǎng)關(guān)處理過的網(wǎng)頁。
關(guān)鍵詞:無線應(yīng)用協(xié)議;微瀏覽器;無線應(yīng)用環(huán)境;無線標記語言;設(shè)計
一、引言
微瀏覽器(Micro-browser) 嵌入在移動終端內(nèi),能夠?qū)⒕W(wǎng)頁內(nèi)容解析和顯示給移動終端用戶,是無線方式接入互聯(lián)網(wǎng)的關(guān)鍵技術(shù)之一。由于移動終端主頻、計算能力都比較小,存儲器容量、顯示屏和輸入設(shè)備大小也受到限制[3],因此要求微瀏覽器在設(shè)計和實現(xiàn)時必須緊密、清晰。微瀏覽器在無線互聯(lián)中得到了廣泛應(yīng)用,其中著名的有日本的I-mode技術(shù)和WAP(Wireless Application Protocol)論壇公布的無線應(yīng)用協(xié)議技術(shù)。在無線應(yīng)用協(xié)議技術(shù)中,無線應(yīng)用協(xié)議是通過改寫網(wǎng)絡(luò)的通信協(xié)議,使該協(xié)議與現(xiàn)有網(wǎng)絡(luò)通信協(xié)議兼容,并且更適合于無線應(yīng)用這一特殊環(huán)境而形成的一種協(xié)議。本文的微瀏覽器設(shè)計方案,是作者所參與的項目組根據(jù)WAP論壇公布的微瀏覽器規(guī)范進行設(shè)計并實現(xiàn)的。
二、微瀏覽器在無線應(yīng)用協(xié)議技術(shù)結(jié)構(gòu)中的位置
在無線應(yīng)用協(xié)議技術(shù)中,微瀏覽器是無線應(yīng)用環(huán)境(Wireless Application Environment,簡寫為WAE)的一部分,處于WAE的上層。WAP技術(shù)就是使用戶能將應(yīng)用WAP協(xié)議軟件的移動終端連接到一個與Internet相連的WAP網(wǎng)關(guān),從而如同使用桌面終端的用戶一樣瀏覽網(wǎng)上的信息。而WAE則是WAP協(xié)議棧(WAP Protocol Stack,簡寫為WAPS)的最高層協(xié)議,它規(guī)劃在整個WAP標準中,其目的是建立一個交互環(huán)境,使網(wǎng)絡(luò)運營商和網(wǎng)絡(luò)提供商能夠有一個在無線平臺上提供服務(wù)的有效的方法。WAE定義了標準的內(nèi)容格式,規(guī)定WAP移動終端使用(Wireless Markup Language,簡記為WML)無線標記語言顯示各種文字圖像數(shù)據(jù)。WML是一種基于擴展標記語言(Extension Markup Language,簡記為XML)的標記語言,主要用于標記和說明WAP移動終端收發(fā)的Internet信息和用戶接口。在WAP中,一個WML文檔稱為一個“Deck”,一個“Deck”內(nèi)包含若干個“Card”,“Card”是用戶瀏覽和交互的基本單元。微瀏覽器在WAP技術(shù)中就是實現(xiàn) WML用戶代理 (WML User Agent) 功能,是WAE的一個重要組件,其實現(xiàn)技術(shù)是WAE實現(xiàn)中的核心技術(shù)。
三、微瀏覽器的規(guī)范、功能和特點
微瀏覽器的規(guī)范定義了一個適合于移動終端的功能強大的用戶接口模型。這個規(guī)范定義了移動終端如何解釋W(xué)ML和WMLScript,并且顯示給用戶。用戶通過上移鍵和下移鍵而不是鼠標在各個卡之間來回進行導(dǎo)航。為了保持與標準瀏覽器的一致,微瀏覽器還提供了各種導(dǎo)航功能如Back、Home、書簽等。
基于這些詳盡而明確的規(guī)范,微瀏覽器應(yīng)完成的主要功能是顯示W(wǎng)ML疊并且支持WML語言的事件處理,使用戶能在卡和疊間導(dǎo)航。
由于移動終端硬件的特點和WAP網(wǎng)關(guān)工作的特性,使得WML瀏覽器無論是在結(jié)構(gòu)方面還是在功能方面,都具有自己獨特之處。一方面,由于移動終端的內(nèi)存資源有限,要求微瀏覽器在閃存(Flash Memory)和RAM的使用上應(yīng)盡量節(jié)省。并且,微瀏覽器處理的是經(jīng)過WAP網(wǎng)關(guān)編碼的WML文件,因為WAP網(wǎng)關(guān)已經(jīng)在詞法、變量引用、事件合法性等很多方面作了判斷和工作[1]。另一方面,瀏覽器工作在WAP協(xié)議棧和用戶界面之間,由于移動終端硬軟件實現(xiàn)差別很大,要求微瀏覽器將與移動終端操作系統(tǒng)有關(guān)的東西封裝起來,實現(xiàn)與操作系統(tǒng)和硬件無關(guān)。
四、微瀏覽器設(shè)計方案
1.微瀏覽器總體設(shè)計方案
從總體結(jié)構(gòu)上,將整個微瀏覽器劃分為4個大部分:Interface(接口)部分、Executive(執(zhí)行)部分、Parser(解析)部分和View(顯示)部分。其設(shè)計原理如圖1所示,其設(shè)計實現(xiàn)如圖2所示。
這種劃分實際上是按照微瀏覽處理的功能進行的,各部分完成特定的功能,并向其它相關(guān)部分的接口傳遞必要的信息。各部分的主要功能和模塊設(shè)計如下:
(1) Interface部分是微瀏覽器的入口,在這一部分通過移動終端人機接口的輸入控制得到用戶的按鍵事件,針對這一事件設(shè)計一個與按鍵有關(guān)的輸入模塊,它可以是一個線程,也可以是一個不斷循環(huán)的程序段,還可以利用中斷實現(xiàn)。利用這個模塊將系統(tǒng)的輸入部分封裝起來。同時,為Interface部分設(shè)計一個執(zhí)行體模塊,在該模塊中設(shè)置一個狀態(tài)機,根據(jù)不同的狀態(tài),對事件進行分類和分派,把接收到的按鍵消息發(fā)給不同的模塊處理。另外,設(shè)計運行模塊,以實現(xiàn)Do菜單事件,它利用Parser部分生成的Do表,在用戶按下某一鍵時激活Do菜單,出現(xiàn)WML作者在當(dāng)前卡中定義的Do任務(wù),用戶選定Do后,發(fā)相應(yīng)消息給Executive完成任務(wù)處理。在實現(xiàn)上述主要功能的同時,Interface部分還要完成界面的初始化,實現(xiàn)系統(tǒng)菜單。
(2) Executive部分處理WML文本中的事件(即在疊/卡中定義的事件)。Interface部分接收到的與WML文本有關(guān)的事件觸發(fā)信息都轉(zhuǎn)給Executive部分,由它完成與事件綁定的節(jié)點的查找和相關(guān)事件處理函數(shù)的執(zhí)行。根據(jù)Executive部分必須完成的功能要求,設(shè)計事件處理模塊,確定在Parser部分生成的事件表的事件號,根據(jù)事件號查找事件表中的相關(guān)表項;同時,設(shè)計5種事件處理函數(shù),實現(xiàn)前進、后退、刷新、輸入、選擇5種事件的處理。而這五種事件處理函數(shù)為了完成事件處理,都需調(diào)用一個任務(wù)微函數(shù)模塊,該模塊中定義了一系列的原子函數(shù)。其設(shè)計原理是根據(jù)規(guī)范中的卡間導(dǎo)航參考運行步驟規(guī)定,可以將事件處理函數(shù)分解為多個原子函數(shù),通過原子函數(shù)的不同組合,完成不同的事件處理。
(3) Parser部分是整個用戶代理的基礎(chǔ),它將接收到的編碼后的二進制文本解析成為一棵以元素為節(jié)點的Deck樹。并生成其它部分運行時需要用到的數(shù)據(jù)結(jié)構(gòu)。由此將解析部分設(shè)計為解析執(zhí)行模塊和解析樹遍歷模塊。在解析執(zhí)行模塊中完成將WAP網(wǎng)關(guān)中取回的WML文本進行處理,設(shè)計解析樹的建立函數(shù)和查詢函數(shù),并對外提供統(tǒng)一封裝后的接口。在解析樹的遍歷模塊實現(xiàn)生成和處理事件表、變量表、Do表,并對內(nèi)存管理。
(4)View部分根據(jù)Deck樹完成對WML文本顯示格式的解釋和顯示。接收到上下鍵的按鍵信息時改變虛窗口,瀏覽整個頁面。接收到確認鍵的按鍵信息時,根據(jù)當(dāng)前的顯示內(nèi)容確定該觸發(fā)的事件,將此事件反饋給Executive。當(dāng)事件完成時,如果有變量被改變,Executive會通知View部分重顯屏幕。由此將View部分設(shè)計為初始化模塊、瀏覽處理模塊。在View部分的初始化模塊中分析由Parser部分生成的樹,建立事件顯示表和初始的顯示區(qū)。瀏覽處理模塊則完成上移、下移鍵按下時的處理,改變顯示區(qū)內(nèi)容和反顯的事件。當(dāng)按上移鍵時,根據(jù)新的坐標顯示新的內(nèi)容;當(dāng)按下移鍵時,根據(jù)新的顯示內(nèi)容決定當(dāng)前應(yīng)該聚焦的事件,將與該事件有關(guān)的顯示內(nèi)容(文本或是圖片)反顯。
2.微瀏覽器典型處理流程
在上述的功能劃分和消息傳遞機制下,一次微瀏覽器的典型的處理流程是:
(1)執(zhí)行微瀏覽器程序,Interface獲得執(zhí)行權(quán),此時,如果瀏覽器設(shè)置了HomePage,Interface向Executive發(fā)出信息,取回HomePage并分析、顯示。如果瀏覽器沒有設(shè)置HomePage,Interface進入空等狀態(tài),等待用戶輸入需訪問的URL;
(2)Executive調(diào)用WAPP提供的接口函數(shù),取得指定的Deck,交由Parser完成解析,生成樹和表;
(3)Parser生成的樹提交給View部分顯示,執(zhí)行權(quán)重交給Interface,系統(tǒng)進入等待用戶輸入狀態(tài);
(4)Interface接收到用戶輸入,對按鍵信息分類,一部分按鍵被截獲,激活系統(tǒng)菜單;一部分被發(fā)送給View,改變?yōu)g覽區(qū),或者激活事件,事件號發(fā)給Executive,完成事件處理;
(5)可能發(fā)生的事件分為2類,一類要獲取另外的Deck,一類只要改變當(dāng)前微瀏覽器的上下文。當(dāng)發(fā)生第二類事件時,Executive 部分完成事件處理并告知Interface要不要刷新顯示區(qū),Interface調(diào)用View部分完成顯示區(qū)處理。第二類事件發(fā)生時,Executive 取回Deck,分析、建樹,通過Interface告知View部分重新分析樹,建立初始顯示區(qū)。事件完成后進入等待用戶按鍵狀態(tài);
(6)用戶激活系統(tǒng)菜單,選擇“退出”,釋放申請的內(nèi)存塊,用戶代理結(jié)束。
3.微瀏覽器設(shè)計和實現(xiàn)中的技術(shù)難點及其解決辦法
(1)WML的解碼
WML文本在傳送之前要按照規(guī)范所述進行編碼,減小容量以適應(yīng)窄帶寬的傳輸。編碼時對所有的元素和屬性及部分屬性值進行編碼。在編碼時用幾個特殊的標記表明變量引用和字符串的開始。編碼之后的文本是上下文有關(guān)的,除了全局標記之外,在不同狀態(tài)下遇到相同的標記對應(yīng)于不同的解釋。經(jīng)過編碼后,WML文本表示成特殊結(jié)構(gòu)的二進制流。因為編碼的方法和編碼后文件的格式都嚴格遵守編碼規(guī)范,所以解碼的工作相當(dāng)清晰。在Deck樹建立和信息引用的時候,將當(dāng)前信息的8位值與編碼比較,由此確定對當(dāng)前信息的操作及以后幾個字節(jié)的操作。
(2)Deck樹的生成
WML文本的一個Deck可以表示為一棵樹,樹中包含了標簽和標簽屬性的信息,在對文本進行分析生成樹時,使用遞歸下降分析。因為WML文本格式很固定,不會有回溯,并且沒有太多的嵌套。在生成Deck樹時采用遞歸下降分析法,思路清晰,實現(xiàn)容易。
(3)實現(xiàn)整塊內(nèi)存使用策略
先根據(jù)WML文本的大小,一次性向操作系統(tǒng)申請一塊空間,保留此空間的起始指針和大小,由微瀏覽器的程序?qū)@一塊內(nèi)存進行分配和管理。這樣在操作系統(tǒng)看來,Deck樹是一個完整的塊,而塊內(nèi)則是由指針相連而形成的一棵樹。當(dāng)用戶轉(zhuǎn)到其他的Deck,要丟棄當(dāng)前Deck時可以一次性在回收整個塊。這一方法的優(yōu)點是:一方面使用指針進行信息的復(fù)用,避免對重復(fù)信息生成另外的一個拷貝帶來的內(nèi)存浪費,最大程度地復(fù)用了內(nèi)存;另一方面,在內(nèi)存復(fù)用過程中,要進行內(nèi)存回收,由于多個指針指向同一塊內(nèi)存,有可能會出現(xiàn)指針懸掛的情況,但現(xiàn)在采用了一次性分配的方法,指針懸掛問題就完全可以得到避免。
(4)封裝功能的實現(xiàn)
在整個微瀏覽器軟件的設(shè)計實現(xiàn)過程中,雖然用的是Standard C,但把處理每一個數(shù)據(jù)結(jié)構(gòu)的模塊作為一個對象來看待,建立完善和統(tǒng)一的接口,同時注意到在其他的模塊中避免對此模塊的數(shù)據(jù)的直接使用。這樣,在沒有面向?qū)ο缶幾g器的支持下實現(xiàn)了部分的面向?qū)ο笏枷,雖然只有一個封裝的功能,但是程序在可維護性、可剪裁性、可重用性上有了很大的改善。
五、結(jié)束語
該微瀏覽器的設(shè)計與實現(xiàn)嚴格按照規(guī)范進行,在設(shè)計和實現(xiàn)中充分考慮了與移動終端硬件的無關(guān)性、與操作系統(tǒng)的無關(guān)性,能夠方便地嵌入到移動終端里面。將所實現(xiàn)的微瀏覽器成功移植到實驗用的移動終端康佳7218型手機上,實驗證明,微瀏覽器實現(xiàn)了WML用戶代理功能,能夠正確地解析和顯示經(jīng)過WAP網(wǎng)關(guān)處理過的網(wǎng)頁。
摘自《北極星電力電信網(wǎng)》