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