摘 要:Ajax是網(wǎng)絡(luò)應(yīng)用客戶端構(gòu)建技術(shù),采用Ajax技術(shù)可以構(gòu)建更為動(dòng)態(tài)和響應(yīng)更為靈敏的WEBGIS應(yīng)用程序。本文介紹了Ajax的主要技術(shù),并以國(guó)家基礎(chǔ)地理信息中心的“基于網(wǎng)絡(luò)的基礎(chǔ)地理信息分發(fā)服務(wù)系統(tǒng)”為例,采用MVC模式,實(shí)現(xiàn)了基礎(chǔ)地理信息在Web瀏覽器中的動(dòng)態(tài)發(fā)布。
關(guān)鍵詞:Ajax;MVC模式;WEBGIS;用戶體驗(yàn)
中圖分類號(hào):TP311.10
1 Ajax技術(shù)
1.1 Ajax的概念
Ajax是Asynchronous JavaScript and XML(以及DHTML等)的縮寫,它不是一種單獨(dú)的技術(shù),而是由幾種蓬勃發(fā)展的技術(shù)以新的強(qiáng)大的方式組合而成,具體包括:基于XHTML和CSS標(biāo)準(zhǔn)的表示;使用Document Object Model(DOM)進(jìn)行動(dòng)態(tài)顯示和交互;使用XMLHttpRequest與服務(wù)器進(jìn)行動(dòng)態(tài)顯示和交互;使用XSLT和XML進(jìn)行數(shù)據(jù)交換和處理;使用JavaScript綁定和處理所有數(shù)據(jù)。
工作原理相當(dāng)于在用戶和服務(wù)器之間加了一個(gè)中間層,使用戶操作與服務(wù)器響應(yīng)異步化。并不是所有的用戶請(qǐng)求都提交給服務(wù)器,像一些數(shù)據(jù)驗(yàn)證和數(shù)據(jù)處理等都交給Ajax引擎處理,只有確定需要從服務(wù)器讀取新數(shù)據(jù)時(shí)候再由Ajax引擎向服務(wù)器提交請(qǐng)求。這樣就把一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的處理能力,減輕服務(wù)器和帶寬的負(fù)擔(dān)。
2 總體結(jié)構(gòu)設(shè)計(jì)
基于Ajax技術(shù)的B/S結(jié)構(gòu),采用了MVC模式(Model—View—Controller模型—視圖—控制器)。Model表示應(yīng)用的業(yè)務(wù)邏輯,View是應(yīng)用表示頁面,Controller是提供應(yīng)用的處理過程控制。通過MVC模式把應(yīng)用邏輯、處理過程和顯示邏輯劃分成不同的組件、模塊實(shí)現(xiàn),組件間可以進(jìn)行交互和重用。在本系統(tǒng)MVC框架中(如圖1),模型(Model)主要采用JavaBean組件,分為Action Beans和Data Beans兩部分,分別負(fù)責(zé)業(yè)務(wù)處理和數(shù)據(jù)處理;控制器(Controller)用Servlet實(shí)現(xiàn),處理Ajax引擎發(fā)出的XMLHttpRequest請(qǐng)求;視圖(View)部分用XML+XSL來實(shí)現(xiàn)數(shù)據(jù)的發(fā)布,采用XML+XSL技術(shù),可以和其它異質(zhì)系統(tǒng)進(jìn)行數(shù)據(jù)交互,可以大大擴(kuò)展系統(tǒng)的應(yīng)用空間。
圖1 系統(tǒng)MVC擴(kuò)展應(yīng)用框架
2.1 Model(模型)層的實(shí)現(xiàn)。Model層是數(shù)據(jù)的存儲(chǔ)和表示。主要完成與數(shù)據(jù)庫的交互、管理數(shù)據(jù)。如圖1,DataBean是對(duì)數(shù)據(jù)的一種封裝,是一種面向數(shù)據(jù)庫的JavaBean。它是對(duì)數(shù)據(jù)結(jié)構(gòu)的一種映射,主要負(fù)責(zé)根據(jù)用戶的請(qǐng)求對(duì)數(shù)據(jù)庫進(jìn)行插入、刪除、修改等操作。DataBean中封裝了三個(gè)方法marshal()、unmarshal()和validate()。Validate()方法提供了對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)的功能,這樣不僅提供了在客戶端的校驗(yàn)的功能,還能在服務(wù)器進(jìn)行數(shù)據(jù)的校驗(yàn)。Marshal()和unmarshal()兩個(gè)方法分別可以把DataBean序列化和反序列化為xml文件,生成的xml作為客戶端瀏覽器xmlhttp傳輸?shù)臄?shù)據(jù)格式,通過XSL轉(zhuǎn)換器就可以輸出HTML顯示了。
2.2 View應(yīng)用表示層的實(shí)現(xiàn)。采用Ajax改進(jìn)分類樹實(shí)現(xiàn)機(jī)制。在初始化頁面時(shí),只獲取第一級(jí)子分類的數(shù)據(jù)并且顯示;當(dāng)用戶點(diǎn)開一級(jí)分類的某一節(jié)點(diǎn)時(shí),頁面通過Ajax向服務(wù)器請(qǐng)求當(dāng)前分類所屬的二級(jí)子分類所有數(shù)據(jù);如果再繼續(xù)請(qǐng)求已經(jīng)呈現(xiàn)的二級(jí)分類的某一節(jié)點(diǎn)時(shí),再次向服務(wù)器請(qǐng)求當(dāng)前分類所屬的三級(jí)子分類的所有數(shù)據(jù),以此類推。采用此種策略,減少了數(shù)據(jù)冗余和數(shù)據(jù)下載總量。同時(shí)更新頁面時(shí)不需要重載所有內(nèi)容,只更新需要更新的那部分內(nèi)容能即可。具體實(shí)現(xiàn)方法如下:
服務(wù)器端:添加AjaxPro.dll的引用,然后修改Web.Config配置文件,并在后臺(tái)代碼Page_load函數(shù)中增加如下代碼:Utility.RegisterTypeForAjax(typeof(tree));添加服務(wù)器端Ajax方法:getCategoryControl()、getCategoryLink()、getCategoryTable()、getSubCateGory(int iCategoryID)。以上幾個(gè)方法主要返回DataSet中包含自分類的ID號(hào)。
2.3 Controller(控制器)的實(shí)現(xiàn)。在“基于網(wǎng)絡(luò)的基礎(chǔ)地理信息分發(fā)服務(wù)系統(tǒng)”中,為了能夠控制和協(xié)調(diào)每個(gè)用戶跨越多個(gè)請(qǐng)求的處理,控制器機(jī)制應(yīng)該以集中的方式進(jìn)行管理。為此,我們?cè)赪eb容器中設(shè)置一個(gè)專用的Servlet來處理Ajax引擎發(fā)出的請(qǐng)求,并將這Servlet定義為XMLAssembly-Servlet。我們用控制器提供一個(gè)控制和處理請(qǐng)求的集中入口點(diǎn),它負(fù)責(zé)接收、截取并處理用戶請(qǐng)求;并將請(qǐng)求委托給分發(fā)者類HttpReqDispatcher.cs,根據(jù)當(dāng)前狀態(tài)和業(yè)務(wù)操作的結(jié)果決定向用戶呈現(xiàn)相應(yīng)的視圖。我們共定義了三個(gè)類HttpReqDispatcher.cs(分發(fā)者類)、HttpCapture.cs(請(qǐng)求捕獲者類)、Controller.cs(控制器類),由這三個(gè)類配合XMLAssembly-Servlet來完成控制器功能。
客戶端實(shí)現(xiàn):在Ajax引擎發(fā)出XMLHttpRequest請(qǐng)求的時(shí)候,不再指向某個(gè)靜態(tài)地址,而是將其請(qǐng)求的URL地址指向服務(wù)器端聲明的映射到XMLAssembly-Servlet的地址,并且Ajax引擎在瀏覽器端向服務(wù)器端的Servlet發(fā)出請(qǐng)求時(shí)可以攜帶多個(gè)參數(shù)來限定所需要的數(shù)據(jù)和操作。
服務(wù)器端實(shí)現(xiàn):在web.xml文件中聲明XMLAssemblyServlet和它的URL映射。在XMLAssemblyServlet的doGet或doPost方法的實(shí)現(xiàn)中設(shè)置響應(yīng)ContentType為“text/xml”,在完成一系列的存取和業(yè)務(wù)邏輯后,將所有的有效數(shù)據(jù)包裝在正確的XML格式當(dāng)中,最后通過響應(yīng)發(fā)回到客戶端。
3 應(yīng)用
根據(jù)以上設(shè)計(jì),數(shù)據(jù)庫服務(wù)器則采用UNIX系統(tǒng),同時(shí)使用多臺(tái)分布式服務(wù)器,以減輕單個(gè)服務(wù)器負(fù)擔(dān),系統(tǒng)用戶界面如圖2:
圖2 系統(tǒng)用戶界面
目前系統(tǒng)已實(shí)現(xiàn)屬性查圖、圖查屬性的雙向查詢功能,支持鼠標(biāo)框選查詢。由于采用了Ajax技術(shù),系統(tǒng)的響應(yīng)速度和功能得到了較大的改善。
4 結(jié)束語
本文通過對(duì)Ajax技術(shù)進(jìn)行研究和分析,并通過MVC模式成功開發(fā)和部署了國(guó)家基礎(chǔ)地理信息中心的“基于網(wǎng)絡(luò)的基礎(chǔ)地理信息分發(fā)服務(wù)系統(tǒng)”,該系統(tǒng)不受瀏覽器限制,訪問速度和查詢速度快捷,同時(shí)縮小了客戶端和服務(wù)器端的差距。目前該系統(tǒng)正在最后測(cè)試階段。下一步需要做的工作就是遵循ISO19115元數(shù)據(jù)標(biāo)準(zhǔn),通過XML實(shí)現(xiàn)元數(shù)據(jù)的共享和交換。
基于Ajax技術(shù)的WEBGIS系統(tǒng)作為新興的WEBGIS技術(shù),利用Ajax獨(dú)特的異步請(qǐng)求機(jī)制,使基于Ajax技術(shù)的WEBGIS不再像傳統(tǒng)的WEBGIS一樣請(qǐng)求同步響應(yīng),而是有針對(duì)性的異步響應(yīng),讓用戶在使用過程中有如同使用桌面系統(tǒng)的體驗(yàn)。Ajax帶給我們的不僅僅是技術(shù),更多的是以人為本的一種服務(wù)理念。不僅緩和了資源矛盾,也帶來了豐富的用戶體驗(yàn)。
參考文獻(xiàn):
[1]Ajax技術(shù)主頁[EB/OL].http://www.adaptivepath.com.
[2]XSLT技術(shù)主頁[EB/OL].http://www.xslt.com.
[3]許曉梅.Natanya a pitts et al.XML技術(shù)內(nèi)幕[M].北京:機(jī)械工業(yè)出版社,2002.
作者簡(jiǎn)介:支元(1982.12-),男,陜西咸陽人,講師,主要從事計(jì)算機(jī)軟件研究。
作者單位:常州劉國(guó)鈞高等職業(yè)技術(shù)學(xué)校,江蘇常州 213025