2.在無線網(wǎng)絡(luò)瀏覽中使用XML 的優(yōu)缺點
可擴展標(biāo)記語言(XML: eXtensible MarkupLanguage) 是用來描述其它語言的元語言,定義了應(yīng)用間傳遞數(shù)據(jù)的結(jié)構(gòu), 是能用任何編輯器讀取的文本。利用這種機制,程序員可制定底層數(shù)據(jù)交換的規(guī)范,并在此基礎(chǔ)上開發(fā)整個系統(tǒng)的各個模塊,模塊間傳輸符合既定規(guī)則的數(shù)據(jù),適合計算機間傳送結(jié)構(gòu)化數(shù)據(jù)。
每種瀏覽器內(nèi)置的文檔解析器是最核心的部分之一,影響瀏覽器的運行效率和空間效率。由于XML 統(tǒng)一定義了其文檔解析器的標(biāo)準(zhǔn)接口規(guī)范——DOM( Document Object Model),即文檔對象模型,使得應(yīng)用程序可按需選擇、更換合適的解析器,無須對程序本身做大的改動。在瀏覽模型中, 將HTML 解析等計算量大的任務(wù)交由中間層服務(wù)器完成, 客戶端進(jìn)行較為簡單的XML 解析, 符合瘦客戶機/ 服務(wù)器的信息應(yīng)用體系模式。當(dāng)前使用XML 最大的問題是支持XML 的應(yīng)用程序還不多, 許多具體應(yīng)用還需要開發(fā)人員自行設(shè)計。
3.中間層實現(xiàn)的機制和原理
選擇VC++ 6.0 為中間層的集成開發(fā)環(huán)境,中間層運行在后臺服務(wù)器上, 采用模塊化的設(shè)計。每個模塊作為一個常規(guī)動態(tài)鏈接庫( Regular DLL )單元, 由后臺服務(wù)器需要時動態(tài)加載。
(1) 數(shù)個無線MODEM通過多串口卡連接在后臺服務(wù)器上構(gòu)成無線MODEM 池,為多個移動終端用戶提供服務(wù)。客戶端與服務(wù)器建立連接時, 先申請MODEM 池中的空閑資源并建立與后臺服務(wù)器連接, 發(fā)送客戶端瀏覽器服務(wù)請求,任務(wù)完成后釋放MODEM 資源。如沒有可用資源,等待一定時間后重新申請。
(2) 后臺服務(wù)器通過有線網(wǎng)絡(luò)接入Internet,使用標(biāo)準(zhǔn)WWW 協(xié)議棧(HTTP、TCP/IP 等)。與WEB 服務(wù)器通訊時主要使用CInternetSession,CHttpConnection 和ChttpFile 等3 個MFC 類。核心代碼如下:
C I n t e r n e t S e s s i o n s e s s i o n ;
C H t t p C o n n e c t i o n * p S e r v e r = N U L L ;
C H t t p F i l e * p F i l e = N U L L ;
AfxParseURL(pURL,…);
初始化完成后, 將客戶端的服務(wù)請求轉(zhuǎn)化為標(biāo)準(zhǔn)統(tǒng)一資源定位符( URL : Uniform ResourceLocator ), 并調(diào)用全局函數(shù)AfxParseURL 分析映射此URL。
pServer = session.GetHttpConnection();
pFile = pServer->OpenRequest();
pFile->AddRequestHeaders();
pFile->SendRequest();
打開客戶端請求特定HTTP 連接,向WEB 服務(wù)器發(fā)送相應(yīng)HTTP 請求消息。
pFile->ReadString();
WEB 服務(wù)器返回響應(yīng)消息, 調(diào)用CHttpFile類ReadString 函數(shù)取得返回數(shù)據(jù), 完成與WEB 服務(wù)器通訊。
(3) 選擇Dillo project 瀏覽器中的解析引擎作為解析過濾和組裝模塊的核心, 流程如圖2。
HTML 解析部分對輸入的HTML 數(shù)據(jù)流按HTML 語法特點逐字符分解成三類:
① Space 數(shù)據(jù)類型: 所有ASCII 碼值在0x09- 0x0d 或0x20 的字符代表空格或占位信息。經(jīng)Space_proces 部分處理,以確定其長度。為保持HTML 排版格式基本不變,此類數(shù)據(jù)全部保存在生成的XML 文件中。
② Tag 數(shù)據(jù)類型: 表示HTML 數(shù)據(jù)流中的所有標(biāo)簽。由于HTML 語法規(guī)則的限制,必須檢查標(biāo)簽的有效性,例如 標(biāo)簽必須存在于