摘 要:簡要介紹了一種通用的,動態(tài)樹型結(jié)構(gòu)的實現(xiàn)方案,該方案基于Asynchronous JavaScript and XML,結(jié)合Struts框架設(shè)計實現(xiàn)了結(jié)構(gòu)清晰、擴(kuò)展性良好的多層架構(gòu),數(shù)據(jù)存儲于數(shù)據(jù)庫,結(jié)合XML描述樹的節(jié)點信息,使得任何按預(yù)定的XML文檔描述的信息都可以通過動態(tài)樹來展現(xiàn)。
關(guān)鍵詞:MVC模式;Ajax;樹型結(jié)構(gòu);字典序
樹型結(jié)構(gòu)是一類應(yīng)用非常廣泛的數(shù)據(jù)結(jié)構(gòu)。人類社會中宗族的族譜和現(xiàn)代企業(yè)的組織形式都是樹型結(jié)構(gòu)。在計算機(jī)領(lǐng)域中,文件系統(tǒng)中文件的管理結(jié)構(gòu)、存儲器管理中的頁表、數(shù)據(jù)庫中的索引等也都是樹型結(jié)構(gòu)。隨著Internet的飛速發(fā)展,樹型結(jié)構(gòu)在瀏覽器/服務(wù)器(Browser/Server,簡稱B/S)應(yīng)用系統(tǒng)的應(yīng)用也越來越廣泛。
目前,在互聯(lián)網(wǎng)上廣泛存在、應(yīng)用的樹型結(jié)構(gòu)一般分為兩種:靜態(tài)和動態(tài)結(jié)構(gòu)。靜態(tài)結(jié)構(gòu)存在最多、實現(xiàn)簡單,但是靜態(tài)導(dǎo)致不能改變樹的結(jié)構(gòu)和內(nèi)容,無法反映樹的節(jié)點信息的變化;而實現(xiàn)相對復(fù)雜的動態(tài)構(gòu)造樹,雖然可以動態(tài)增加、刪除、更新節(jié)點信息,但是大部分不能直接拖放節(jié)點來改變樹的結(jié)構(gòu)以及節(jié)點間的次序,并且反復(fù)刷新整個頁面,給用戶維護(hù)帶來了許多不便。本文提出了一種基于Ajax (Asynchronous JavaScript and XML)通用的、動態(tài)加載節(jié)點的解決方案。實現(xiàn)上采用J2EE多層架構(gòu),樹節(jié)點的描述信息采用數(shù)據(jù)庫存儲,以可擴(kuò)展標(biāo)記語言(eXtensible Markup Language,簡稱XML)展現(xiàn)給JavaScript解析,支持無刷新地增加、刪除、更新節(jié)點信息,以及拖放節(jié)點來改變樹的結(jié)構(gòu)和節(jié)點間的次序。文中第1部分簡要介紹了Ajax技術(shù);第2部分詳細(xì)介紹了該方案的技術(shù)實現(xiàn)過程;第3部分分析了該方案的效率。
1、Ajax簡介
Ajax概念的最早提出者Jesse James Garrett認(rèn)為:Ajax并不是一門新的語言或技術(shù),它實際上是幾項技術(shù)按一定的方式組合在共同的協(xié)作中發(fā)揮各自的作用,它包括:
·使用擴(kuò)展超媒體標(biāo)記語言(eXtended Hypertext Markup Language,簡稱XHTML)和級聯(lián)樣式單(Cascading Style Sheet,簡稱CSS)標(biāo)準(zhǔn)化呈現(xiàn);
·使用文檔對象模型(Document Object Model,簡稱DOM)實現(xiàn)動態(tài)顯示和交互;
·使用可擴(kuò)展標(biāo)記語言(eXtensible Markup Language,簡稱XML)和可擴(kuò)展樣式表轉(zhuǎn)換(eXtensible Stylesheet Language Transformation,簡稱XSLT)進(jìn)行數(shù)據(jù)交換與處理;
·使用XMLHTTP組件XMLHttpRequest對象進(jìn)行異步數(shù)據(jù)讀取;
·最后用JavaScript綁定和處理所有數(shù)據(jù)。
Ajax的工作原理如圖1所示,它相當(dāng)于在用戶和服務(wù)器之間加了一個中間層,使用戶操作與服務(wù)器響應(yīng)異步化。并不是所有的用戶請求都提交給服務(wù)器,像— 些數(shù)據(jù)驗證和數(shù)據(jù)處理等都交給Ajax引擎處理,只有確定需要從服務(wù)器讀取新數(shù)據(jù)時再由Ajax引擎代為向服務(wù)器提交請求。這樣就把一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的處理能力來處理,減輕服務(wù)器和帶寬的負(fù)擔(dān),從而達(dá)到節(jié)約ISP的空間及帶寬租用成本的目的。
傳統(tǒng)的服務(wù)器程序采用Model 1開發(fā)模型,通常將業(yè)務(wù)邏輯、服務(wù)器端處理過程和HTML代碼集中在一起表示,快速完成應(yīng)用開發(fā)。Model 1 在小規(guī)模應(yīng)用開發(fā)時優(yōu)勢明顯,但是應(yīng)用實現(xiàn)一般是基于過程的,一組服務(wù)器頁面實現(xiàn)一個流程,如果流程改動將導(dǎo)致多個地方修改,非常不利于應(yīng)用的擴(kuò)展和更新。此外業(yè)務(wù)邏輯和表示邏輯混合在服務(wù)器頁面中,耦合緊密,無法模塊化,導(dǎo)致代碼無法復(fù)用。
Model 2則解決了這些問題,它是面向?qū)ο蟮腗VC模式(Model-View-Controller,模型-視圖-控制器)在Web開發(fā)中的應(yīng)用,Model表示應(yīng)用的業(yè)務(wù)邏輯,View是應(yīng)用的表示層頁面,Controller是提供應(yīng)用的處理過程控制。通過這種MVC設(shè)計模式把應(yīng)用邏輯,處理過程和顯示邏輯劃分成不同的組件、模塊實現(xiàn),組件間可以進(jìn)行交互和重用。
本方案是采用J2EE的多層架構(gòu),設(shè)計時結(jié)合Struts框架將表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)層劃分成不同的模塊。表示層專注于樹的外觀顯示,業(yè)務(wù)邏輯層為服務(wù)器端處理程序,處理樹的生成、變化,為減少耦合性,該程序全部模塊化實現(xiàn),不在表示頁面嵌入服務(wù)器程序;模型層是數(shù)據(jù)的存儲和表示。下面分別介紹各層實現(xiàn)。
原文鏈接:http://www.7dspace.com/doc/44/0512/2005122906292220003.htm
關(guān)鍵詞:MVC模式;Ajax;樹型結(jié)構(gòu);字典序
樹型結(jié)構(gòu)是一類應(yīng)用非常廣泛的數(shù)據(jù)結(jié)構(gòu)。人類社會中宗族的族譜和現(xiàn)代企業(yè)的組織形式都是樹型結(jié)構(gòu)。在計算機(jī)領(lǐng)域中,文件系統(tǒng)中文件的管理結(jié)構(gòu)、存儲器管理中的頁表、數(shù)據(jù)庫中的索引等也都是樹型結(jié)構(gòu)。隨著Internet的飛速發(fā)展,樹型結(jié)構(gòu)在瀏覽器/服務(wù)器(Browser/Server,簡稱B/S)應(yīng)用系統(tǒng)的應(yīng)用也越來越廣泛。
目前,在互聯(lián)網(wǎng)上廣泛存在、應(yīng)用的樹型結(jié)構(gòu)一般分為兩種:靜態(tài)和動態(tài)結(jié)構(gòu)。靜態(tài)結(jié)構(gòu)存在最多、實現(xiàn)簡單,但是靜態(tài)導(dǎo)致不能改變樹的結(jié)構(gòu)和內(nèi)容,無法反映樹的節(jié)點信息的變化;而實現(xiàn)相對復(fù)雜的動態(tài)構(gòu)造樹,雖然可以動態(tài)增加、刪除、更新節(jié)點信息,但是大部分不能直接拖放節(jié)點來改變樹的結(jié)構(gòu)以及節(jié)點間的次序,并且反復(fù)刷新整個頁面,給用戶維護(hù)帶來了許多不便。本文提出了一種基于Ajax (Asynchronous JavaScript and XML)通用的、動態(tài)加載節(jié)點的解決方案。實現(xiàn)上采用J2EE多層架構(gòu),樹節(jié)點的描述信息采用數(shù)據(jù)庫存儲,以可擴(kuò)展標(biāo)記語言(eXtensible Markup Language,簡稱XML)展現(xiàn)給JavaScript解析,支持無刷新地增加、刪除、更新節(jié)點信息,以及拖放節(jié)點來改變樹的結(jié)構(gòu)和節(jié)點間的次序。文中第1部分簡要介紹了Ajax技術(shù);第2部分詳細(xì)介紹了該方案的技術(shù)實現(xiàn)過程;第3部分分析了該方案的效率。
1、Ajax簡介
Ajax概念的最早提出者Jesse James Garrett認(rèn)為:Ajax并不是一門新的語言或技術(shù),它實際上是幾項技術(shù)按一定的方式組合在共同的協(xié)作中發(fā)揮各自的作用,它包括:
·使用擴(kuò)展超媒體標(biāo)記語言(eXtended Hypertext Markup Language,簡稱XHTML)和級聯(lián)樣式單(Cascading Style Sheet,簡稱CSS)標(biāo)準(zhǔn)化呈現(xiàn);
·使用文檔對象模型(Document Object Model,簡稱DOM)實現(xiàn)動態(tài)顯示和交互;
·使用可擴(kuò)展標(biāo)記語言(eXtensible Markup Language,簡稱XML)和可擴(kuò)展樣式表轉(zhuǎn)換(eXtensible Stylesheet Language Transformation,簡稱XSLT)進(jìn)行數(shù)據(jù)交換與處理;
·使用XMLHTTP組件XMLHttpRequest對象進(jìn)行異步數(shù)據(jù)讀取;
·最后用JavaScript綁定和處理所有數(shù)據(jù)。
Ajax的工作原理如圖1所示,它相當(dāng)于在用戶和服務(wù)器之間加了一個中間層,使用戶操作與服務(wù)器響應(yīng)異步化。并不是所有的用戶請求都提交給服務(wù)器,像— 些數(shù)據(jù)驗證和數(shù)據(jù)處理等都交給Ajax引擎處理,只有確定需要從服務(wù)器讀取新數(shù)據(jù)時再由Ajax引擎代為向服務(wù)器提交請求。這樣就把一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的處理能力來處理,減輕服務(wù)器和帶寬的負(fù)擔(dān),從而達(dá)到節(jié)約ISP的空間及帶寬租用成本的目的。
圖 1 未使用Ajax(a)和使用Ajax(b)的web應(yīng)用比較
傳統(tǒng)的服務(wù)器程序采用Model 1開發(fā)模型,通常將業(yè)務(wù)邏輯、服務(wù)器端處理過程和HTML代碼集中在一起表示,快速完成應(yīng)用開發(fā)。Model 1 在小規(guī)模應(yīng)用開發(fā)時優(yōu)勢明顯,但是應(yīng)用實現(xiàn)一般是基于過程的,一組服務(wù)器頁面實現(xiàn)一個流程,如果流程改動將導(dǎo)致多個地方修改,非常不利于應(yīng)用的擴(kuò)展和更新。此外業(yè)務(wù)邏輯和表示邏輯混合在服務(wù)器頁面中,耦合緊密,無法模塊化,導(dǎo)致代碼無法復(fù)用。
Model 2則解決了這些問題,它是面向?qū)ο蟮腗VC模式(Model-View-Controller,模型-視圖-控制器)在Web開發(fā)中的應(yīng)用,Model表示應(yīng)用的業(yè)務(wù)邏輯,View是應(yīng)用的表示層頁面,Controller是提供應(yīng)用的處理過程控制。通過這種MVC設(shè)計模式把應(yīng)用邏輯,處理過程和顯示邏輯劃分成不同的組件、模塊實現(xiàn),組件間可以進(jìn)行交互和重用。
本方案是采用J2EE的多層架構(gòu),設(shè)計時結(jié)合Struts框架將表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)層劃分成不同的模塊。表示層專注于樹的外觀顯示,業(yè)務(wù)邏輯層為服務(wù)器端處理程序,處理樹的生成、變化,為減少耦合性,該程序全部模塊化實現(xiàn),不在表示頁面嵌入服務(wù)器程序;模型層是數(shù)據(jù)的存儲和表示。下面分別介紹各層實現(xiàn)。
原文鏈接:http://www.7dspace.com/doc/44/0512/2005122906292220003.htm