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