專利名稱:用于創(chuàng)建面向IT的基于服務(wù)器的Web應(yīng)用的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及Web應(yīng)用。更特別地,本發(fā)明涉及用于創(chuàng)建要通過諸如因特網(wǎng)的數(shù)據(jù) 網(wǎng)絡(luò)而呈現(xiàn)的面向IT(信息技術(shù))的基于服務(wù)器的Web應(yīng)用的方法和系統(tǒng)。定義、同義詞和縮寫貫穿本說明書中,自始至終采用以下定義事件(Event)是由用戶對應(yīng)用執(zhí)行的動(dòng)作。臨界事件(Critical Event)是應(yīng)立即發(fā)送到服務(wù)器以便使客戶端與服務(wù)器狀態(tài) 同步的事件(與可以延時(shí)發(fā)送的事件相反)。唯一事件(Unique Event)是最后將被發(fā)送到服務(wù)器的事件。累積事件(Accumulated Event)是在下一個(gè)臨界事件發(fā)生之前存儲(chǔ)在客戶端事 件隊(duì)列中的客戶端側(cè)事件。然后,當(dāng)臨界事件發(fā)生時(shí),客戶端將發(fā)送在前一臨界事件與當(dāng)前 臨界事件之間發(fā)生的整個(gè)事件隊(duì)列??蛻舳嘶蚩蛻舳藢?Client Tier)是連接到服務(wù)器的用戶終端(例如網(wǎng)頁)??丶?Control)是可顯示應(yīng)用組件(例如按鈕、字段等)。每個(gè)控件可以執(zhí)行限 定的操作(例如獲得鍵盤輸入、按下等)。容器是包含控件的窗口。拆分器(Splitter)是類似于控件的側(cè)面板(水平或垂直),其位于兩個(gè)??? 錨定(docked/anchored)控件之間并使得能夠通過拖動(dòng)其來一個(gè)歸因于另一個(gè)地(one on account of the other)改變那些控件的尺寸(寬度或高度)的比。專用內(nèi)核(Dedicated Kernel)在本發(fā)明的上下文中,專用內(nèi)核是在客戶端第一次在服務(wù)器側(cè)接近應(yīng)用時(shí)由客 戶端僅下載一次的小且靜態(tài)的代碼片。此專用內(nèi)核在客戶端側(cè)瀏覽器與應(yīng)用之間調(diào)停 (mediate),并負(fù)責(zé)-向和從服務(wù)器發(fā)送和接收任何種類的數(shù)據(jù);-激活XSL(用于格式化XML文檔的語言例如,顯示應(yīng)如何在網(wǎng)頁中呈現(xiàn)在XML文 檔中描述的數(shù)據(jù))變回(顯示應(yīng)如何將XML文檔重新組織成隨后將能通過按照XSL樣式表 來呈現(xiàn)的另一種數(shù)據(jù)結(jié)構(gòu))或任何其它表示層(presentation layer)的布局技術(shù);_聚集用戶事件(例如鍵盤按壓或鼠標(biāo)事件),累積非臨界事件隊(duì)列并在需要時(shí)將 那些事件隊(duì)列發(fā)送到服務(wù)器;-反映通過客戶端語言代碼實(shí)現(xiàn)的任何客戶端側(cè)的控件行為(behavior)。應(yīng)用對象索引(Index):是保持應(yīng)用對象實(shí)例的組件ID (標(biāo)識)的應(yīng)用對象集合。 此索引用于通過用其ID來檢索所觸發(fā)的事件對象所有者并將事件處理責(zé)任傳遞到映射的 對象實(shí)例來處理從客戶端發(fā)送的事件隊(duì)列。這允許客戶端和服務(wù)器對象實(shí)例之間的弱相關(guān) 性,該弱相關(guān)性可以使用實(shí)例ID以標(biāo)準(zhǔn)XML語法來表示。應(yīng)用對象樹是以分層樹形結(jié)構(gòu)包含應(yīng)用對象的對象樹,表示應(yīng)用GUI (圖形用戶 界面)結(jié)構(gòu)。
應(yīng)用根(Application Root )是綁定到所配置的頁面名稱(page nam)的應(yīng)用對 象,該應(yīng)用對象可通過將其直接激活來訪問,以便其充當(dāng)應(yīng)用對象樹的入口點(diǎn)。也就是說, 應(yīng)用根可通過在瀏覽器中輸入U(xiǎn)RL來直接瀏覽(例如,當(dāng)在網(wǎng)頁平臺上使用本發(fā)明時(shí))。主表單窗口(Main Form Window)是用戶在其訪問經(jīng)過這種技術(shù)處理的URL時(shí)看 到的第一個(gè)窗口。其等效于在你啟動(dòng)桌面應(yīng)用時(shí)打開的主窗口??蛻舳藭r(shí)間戳(Time Stamp)是客戶端側(cè)的對象的時(shí)間戳,表示最后更新時(shí)間。
請求時(shí)間戳是指示當(dāng)前瀏覽器狀態(tài)的時(shí)間戳,其為瀏覽器從服務(wù)器接收到更新 命令的最后時(shí)間。時(shí)間戳是表示給定應(yīng)用對象的最后更新時(shí)間的數(shù)值。唯一累積事件是因?yàn)榕f事件已經(jīng)過時(shí)而代替具有相同ID的任何事件的新事件。更新命令是一組XML (可擴(kuò)展標(biāo)記語言)元素(element),瀏覽器執(zhí)行該組XML元 素以便與應(yīng)用樹和服務(wù)器控件狀態(tài)同步。窗口結(jié)構(gòu)是一組表示應(yīng)用的當(dāng)前窗口結(jié)構(gòu)的XML元素。該窗口結(jié)構(gòu)用于根據(jù)服 務(wù)器層狀態(tài)(服務(wù)器上的當(dāng)前UI狀態(tài))來更新客戶端層的狀態(tài)(當(dāng)前描繪的UI)。XSLT模板(Template)是一組XSLT (可擴(kuò)展樣式表語言轉(zhuǎn)換),其描述必須對數(shù)據(jù) 執(zhí)行以便在客戶端層(例如網(wǎng)絡(luò)瀏覽器)上描繪所反映的控件的變換(transformation)。XML后數(shù)據(jù)(data behind)是被客戶端用來存儲(chǔ)應(yīng)用界面的狀態(tài)的XML (可擴(kuò)展 標(biāo)記語言)。此應(yīng)用界面狀態(tài)保持每個(gè)UI控件的屬性并包括客戶端根據(jù)服務(wù)器的狀態(tài)來使 其控件狀態(tài)同步所需的全部信息。例如,控件的顏色或尺寸、其顯示的文本等等。這為客戶 端層提供使用對XML后數(shù)據(jù)的XSLT (模板轉(zhuǎn)換)來重畫UI的任何部分的能力。
背景技術(shù):
現(xiàn)在,HTML (超文本標(biāo)記語言)是版權(quán)自由并可為所有開發(fā)者使用、并進(jìn)一步得到 所有編程環(huán)境的支持的全球標(biāo)準(zhǔn)語言。提供用于導(dǎo)航及其多媒體支持能力(聲音、畫面、動(dòng) 畫等等)的鏈接的能力促使全世界采用HTML作為行業(yè)主流。而且,近來,提出了 DHTML (動(dòng) 態(tài)HTML)語言。DHTML是被一起使用以便通過使用靜態(tài)標(biāo)記語言(諸如HTML)、客戶端側(cè)腳本語言 (諸如JavaScript )、呈現(xiàn)定義語言(層疊樣式表,CSS)以及文檔對象模型(編程界面)的 組合來創(chuàng)作交互式動(dòng)畫網(wǎng)站的技術(shù)的集合。因此,DHTML語言使得能夠?qū)崿F(xiàn)更好的與因特 網(wǎng)用戶的交互性。因特網(wǎng)到所有信息驅(qū)動(dòng)的各行業(yè)中的滲透和因特網(wǎng)在用戶之間的快速傳 播,以及商務(wù)和商業(yè)部分將因特網(wǎng)作為與其用戶的通訊手段的增長的需要致使需要更加動(dòng) 態(tài)且巨大的面向遠(yuǎn)程服務(wù)器/客戶端的因特網(wǎng)應(yīng)用。這導(dǎo)致呈現(xiàn)諸如動(dòng)態(tài)地生成頁面(以 前為靜態(tài))的新工具的ASP (應(yīng)用服務(wù)提供商)、PHP (超文本預(yù)處理器)及其它網(wǎng)絡(luò)應(yīng)用語 言/環(huán)境的引入。這些新環(huán)境引入從傳統(tǒng)HTML頁面暴露和接收數(shù)據(jù)的能力。當(dāng)前對面向IT(信息技術(shù))網(wǎng)頁的應(yīng)用的較高服務(wù)器-客戶端性能的需要不能滿 足增長的對更復(fù)雜IT應(yīng)用的需要。雖然在IT使用中正在變成主要中介的因特網(wǎng)有了顯著 的演進(jìn),但支持這些用途的基本原理仍舊與幾十年前相同。現(xiàn)在,ASP. NET(活動(dòng)服務(wù)器頁
面)和JSP( Java 服務(wù)器頁面)提供更好的“服務(wù)器側(cè)”開發(fā)環(huán)境。在客戶端側(cè),HTML頁
面導(dǎo)致緩慢且受限制的性能,該HTML頁面包含稱為服務(wù)器側(cè)頁面的腳本,即對服務(wù)器側(cè)的每個(gè)動(dòng)作完全重建頁面。此外,使用嚴(yán)重依賴腳本的Web應(yīng)用已變成網(wǎng)頁開發(fā)者的主要做 法。Web應(yīng)用需求正在變得越來越像計(jì)算機(jī)桌面需求。僅受到桌面應(yīng)用支持的更多特征已 變得對于Web應(yīng)用來說必不可少。這種需求在帶寬(即網(wǎng)頁運(yùn)輸資源)方面價(jià)格高昂。客 戶端側(cè)腳本開始變得越來越復(fù)雜,使得難以設(shè)計(jì)和維持Web應(yīng)用。另外,此類應(yīng)用的性能問 題非常普遍。其很容易把事情搞砸,因?yàn)槟_本不提供代碼訪問限制和很差的面向?qū)ο缶幊?思想(如果有的話)。而且,安全問題始終是當(dāng)前面向網(wǎng)頁技術(shù)的主要問題之一,因?yàn)槟_本在客戶端瀏 覽器(例如Microsoft Internet Explorer)上運(yùn)行。被嵌入用戶瀏覽器中的腳本語言的 使用已使得Web應(yīng)用易受惡意篡改,因?yàn)殡y以保護(hù)充當(dāng)Web應(yīng)用的數(shù)據(jù)提供者的頁面。大 部分?jǐn)?shù)據(jù)由用戶側(cè)(而不是服務(wù)器側(cè))的瀏覽器來處理,因此暴露比所需要的數(shù)據(jù)更多的數(shù)據(jù)。此外,ASP. NET和JSP已經(jīng)過時(shí),因?yàn)樗鼈儾荒茏銐蚝玫貞?yīng)付當(dāng)前的IT需求。即使 它們引入了更強(qiáng)的編程可能性,諸如新基礎(chǔ)編程工具、新建模和重新使用能力(重新使用 能力是產(chǎn)生組件一次并在稍后多次使用它們的能力),但基本思想仍然相同,從而反映出上 述相同問題(即性能和用戶體驗(yàn)、安全性、開發(fā)和維護(hù)的復(fù)雜性)。這些環(huán)境的基于頁面的 方法使其成為不利于開發(fā)Web應(yīng)用的環(huán)境,因?yàn)椴淮嬖趯Υ蜷_窗口和在框之間進(jìn)行交互的 服務(wù)器側(cè)支持(因?yàn)閼?yīng)以向少數(shù)語言和位置分發(fā)商務(wù)邏輯的客戶端腳本語言來寫大量的 窗口管理代碼)。對用戶界面的局部更新的開發(fā)支持很有限,導(dǎo)致開發(fā)者需要明確地管理局 部更新并降低開發(fā)過程的生產(chǎn)率。另外,當(dāng)前的IT系統(tǒng)帶寬受到限制,并且其不能支持要 求更大處理資源的更復(fù)雜的需求。這導(dǎo)致用戶浪費(fèi)寶貴的時(shí)間。復(fù)雜動(dòng)作導(dǎo)致緩慢的瀏覽 器腳本執(zhí)行,其中每個(gè)動(dòng)作調(diào)用正在被服務(wù)器完全重新創(chuàng)建并由瀏覽器完全再現(xiàn)(render) 的不同頁面。目前,開發(fā)者是決定在客戶端側(cè)與服務(wù)器側(cè)之間傳輸?shù)臄?shù)據(jù)內(nèi)容的唯一的人。 這一事實(shí)導(dǎo)致數(shù)據(jù)非常不一致且不正式,即,數(shù)據(jù)可能包含表示數(shù)據(jù)、商務(wù)數(shù)據(jù)、以及各種 各樣的安全記號和各種其它類型。此外,數(shù)據(jù)可以具有任何格式,例如純文本、XML或任何 其它格式。若干開發(fā)者和另外的若干項(xiàng)目可以使用被發(fā)送和接收至服務(wù)器和從服務(wù)器返回 的數(shù)據(jù)和格式的若干差異懸殊的協(xié)議。開發(fā)者必須學(xué)習(xí)許多因特網(wǎng)語言,這要求相當(dāng)多的 培訓(xùn),并因此而難以找到合格人員。在桌面應(yīng)用開發(fā)環(huán)境中,控件定位分為??亢湾^定。停靠是獲取控件列表并對其 中的每一個(gè)提供五種??啃袨?左、頂部、右、底部、以及填充)之一且使用這些定義來創(chuàng)作 屏幕布局的能力。每個(gè)控件是獨(dú)立的,但被設(shè)置為在不重疊的情況下與另一控件相關(guān)。這 樣,當(dāng)更新一個(gè)控件時(shí),不需要更新所有控件的定位。錨定是定義從控件的邊緣(其中的一 個(gè)、某些或全部)連接到其容器的虛擬字符串的能力。當(dāng)縮放和/或移動(dòng)控件的容器時(shí),所 錨定至的容器側(cè)的面板與所錨定的控件側(cè)面板之間的距離將在控件被錨定到的側(cè)面板上 保持靜態(tài)。這可以在將控件錨定至相對的側(cè)面板時(shí)導(dǎo)致控件的縮放(例如左+右和/或頂 部+底部)。傳統(tǒng)Web應(yīng)用開發(fā)環(huán)境為程序員提供對象模塊(匯編程序或編譯程序的輸出,其 為目標(biāo)計(jì)算機(jī)的機(jī)器代碼。對象模塊必須與其它模塊鏈接以產(chǎn)生最終的可執(zhí)行程序),從而 表示用于創(chuàng)建頁面內(nèi)容的HTML元素。使用三種工具來執(zhí)行頁面布局1. HTML表格(其可以包含網(wǎng)頁的文本,并且還可以用來布局任何HTML元素)。
2.諸如CSS(層疊樣式表)的流控制樣式(flow control style)布局定義。3.絕對定位(absolute positioning),其允許通過指定任何瀏覽器顯示元素(例 如按鈕、列表等)的精確位置來確定該元素的位置,無論其它顯示元素如何。當(dāng)開發(fā)應(yīng)充當(dāng) 應(yīng)用的網(wǎng)站時(shí),很難使用這種方法。 所有上述內(nèi)容描述了 Web應(yīng)用設(shè)計(jì)的復(fù)雜工作環(huán)境。其還提出了這些應(yīng)用的使用 的缺點(diǎn)和限制。在最近的現(xiàn)有技術(shù)(公開號2003/0200254Α1)中,在服務(wù)器與客戶端之間劃分應(yīng) 用任務(wù)。使用此應(yīng)用的客戶端必須安裝服務(wù)程序(JAVA程序)。這意指在客戶端側(cè)執(zhí)行某 些處理任務(wù)。這使用戶被限制為僅安裝(installation)被授權(quán)的計(jì)算機(jī)并局限于特定的 操作系統(tǒng)和網(wǎng)頁瀏覽器。這還使其對操作系統(tǒng)和網(wǎng)頁瀏覽器更新的適應(yīng)性差。具有某些應(yīng) 用處理任務(wù)的客戶端側(cè)的另一缺點(diǎn)在于通信方法??赡馨匾畔⒌臄?shù)據(jù)包必須從客戶 端側(cè)發(fā)送到服務(wù)器或相反。此類通信在數(shù)據(jù)大小(帶寬)和時(shí)間方面遠(yuǎn)不夠理想。其還冒 著安全風(fēng)險(xiǎn),因?yàn)橹匾畔⒃谶B接到全局網(wǎng)絡(luò)的客戶端側(cè)可用。“微軟的遠(yuǎn)程桌面連接”是使得能夠通過數(shù)據(jù)網(wǎng)絡(luò)而在服務(wù)器/計(jì)算機(jī)上使用應(yīng) 用的應(yīng)用。該應(yīng)用實(shí)際上在服務(wù)器/計(jì)算機(jī)上運(yùn)行,并且使用連接到網(wǎng)絡(luò)的其它計(jì)算機(jī)/ 終端的用戶能夠運(yùn)行該應(yīng)用。這里使用的方法是將屏幕作為應(yīng)用的位圖發(fā)送到用戶/客戶 端??蛻舳朔祷劓I盤和鼠標(biāo)事件。從服務(wù)器發(fā)送的數(shù)據(jù)是服務(wù)器上的應(yīng)用的屏幕捕捉(位 圖),反映在服務(wù)器上生成的精確屏幕顯示。為了在用戶側(cè)獲得平滑的圖片,頻繁地從服務(wù) 器發(fā)送位圖。數(shù)據(jù)包很大且發(fā)送速率很高。這導(dǎo)致網(wǎng)絡(luò)上的大量活動(dòng)并耗費(fèi)大量的網(wǎng)絡(luò)資 源(帶寬)。此應(yīng)用要求服務(wù)器和客戶端兩者使用相同的操作系統(tǒng)。還要求客戶端側(cè)安裝 小程序(applet)以支持該應(yīng)用。本發(fā)明的主要目的是克服Web應(yīng)用的設(shè)計(jì)和使用上的所有這些缺陷,盡管受到很 多限制(despite all the limitation)。換言之,使用相同的設(shè)計(jì)復(fù)雜性和網(wǎng)頁運(yùn)輸資源 的環(huán)境,本發(fā)明使得能夠?qū)崿F(xiàn)相對簡單的設(shè)計(jì)方法和系統(tǒng),以及對面向IT的基于服務(wù)器的 Web應(yīng)用的更加高效且安全的使用。本發(fā)明的一個(gè)目的是公開一種用于提供面向IT的基于服務(wù)器的Web應(yīng)用的系統(tǒng) 和方法。本發(fā)明另一目的是提供一種使得能夠與編寫桌面應(yīng)用類似地編寫基于服務(wù)器的 Web應(yīng)用的方法和系統(tǒng)。本發(fā)明的另一目的是提供一種方法和系統(tǒng),其中,統(tǒng)一對象模型處理所有應(yīng)用需 求,諸如用多個(gè)窗口來處理Web應(yīng)用、管理服務(wù)器與瀏覽器之間的通信、發(fā)送應(yīng)用事件(事 件隊(duì)列)并取回命令以便在需要時(shí)更新UI (用戶界面)。本發(fā)明的另一目的是提供一種方法和系統(tǒng),其不采用諸如Java腳本的客戶端腳 本語言或任何其它網(wǎng)頁語言。本發(fā)明的另一目的是提供一種系統(tǒng)和方法,其中,開發(fā)者使用諸如C#、VB. NET或 支持完全的面向?qū)ο缶幊毯途幾g能力的任何其它語言之類的單一、結(jié)構(gòu)化且面向?qū)ο蟮恼Z 言,消除開發(fā)者對普通網(wǎng)頁設(shè)計(jì)語言知識的需要。本發(fā)明的又一目的是提供一種方法和系統(tǒng),其中,在服務(wù)器側(cè)執(zhí)行所有處理;因 此,用戶的瀏覽器僅用于接收輸入命令并顯示輸出。
本發(fā)明的又一目的是提供一種方法和系統(tǒng),其中,與現(xiàn)有技術(shù)相比,數(shù)據(jù)傳輸容量 顯著縮小。本發(fā)明的又一目的是提供一種方法和系統(tǒng),其中,與現(xiàn)有技術(shù)相比,實(shí)現(xiàn)了明顯更 高的安全水平。本發(fā)明的又一目的是提供一種方法和系統(tǒng),其中,僅加載(呈現(xiàn)在用戶的計(jì)算機(jī) 屏幕/顯示器上的)網(wǎng)頁頁面的設(shè)計(jì)一次,而不需要為了更新呈現(xiàn)在所述網(wǎng)頁頁面上的數(shù) 據(jù)而將其再次重新加載。 本發(fā)明的又一目的是提供一種方法和系統(tǒng),其中,在客戶端側(cè)使用相對較低的帶 寬和處理資源。本發(fā)明的目的是提供一種方法和系統(tǒng),其用于為面向IT的基于服務(wù)器的Web應(yīng)用 的開發(fā)者提供適應(yīng)Microsoft 開發(fā)環(huán)境的新開發(fā)環(huán)境。本發(fā)明的其它目的和優(yōu)點(diǎn)將隨著說明的進(jìn)行而變得清楚。
發(fā)明內(nèi)容
本發(fā)明針對一種用于允許計(jì)算機(jī)化系統(tǒng)使用要通過數(shù)據(jù)網(wǎng)絡(luò)而被呈現(xiàn)的面向IT 的基于服務(wù)器的Web應(yīng)用的方法。因此,在通過數(shù)據(jù)網(wǎng)絡(luò)而與客戶端側(cè)終端進(jìn)行數(shù)據(jù)通信 的服務(wù)器側(cè)安裝應(yīng)用。將專用內(nèi)核下載到客戶端側(cè)一次,用于在應(yīng)用與客戶端側(cè)之間調(diào)停 (例如管理客戶端側(cè)通信協(xié)議)。在客戶端側(cè),將事件與表示應(yīng)用對象的相應(yīng)ID標(biāo)簽相關(guān) 聯(lián),并為每個(gè)事件分配時(shí)間戳。將事件排成隊(duì)列,并只在臨界事件發(fā)生時(shí)將其以事件隊(duì)列的 形式發(fā)送到應(yīng)用。在服務(wù)器側(cè),通過使用ID標(biāo)簽來將事件與應(yīng)用對象之間相關(guān)聯(lián),將事件 轉(zhuǎn)換(translate)為應(yīng)用動(dòng)作。如果通過每個(gè)接收到的事件的時(shí)間戳與應(yīng)用對象的最后更 新時(shí)間戳之間的比較發(fā)現(xiàn)客戶端的應(yīng)用對象被更多地更新(more update),則準(zhǔn)備僅包含 使客戶端側(cè)更新反映應(yīng)用更新的相關(guān)布局對象的更新命令的數(shù)據(jù)包并將其作為更新發(fā)送 回客戶端。最后,根據(jù)該數(shù)據(jù)包的內(nèi)容,由表示層來更新客戶端側(cè)的屏幕布局對象??蛻舳藗?cè)可以是在任何操作系統(tǒng)下運(yùn)行的任何網(wǎng)頁瀏覽器。所述表示層獨(dú)立于專 用內(nèi)核的代碼,且可以是DHTML、\VinForms (用于創(chuàng)建利用公共語言運(yùn)行時(shí)間的Windows 客戶端應(yīng)用的架構(gòu)??梢砸怨舱Z言運(yùn)行時(shí)間所支持的任何語言來寫WinForms 應(yīng)用)、 Microsoft Silverlight (是允許開發(fā)Web應(yīng)用的瀏覽器插件)或受可以發(fā)送和接收XML 代碼的任何其它表示層支持的任何。所述專用內(nèi)核可以是在所支持的不同表示層之間改變的代碼。只使用XML來執(zhí)行 服務(wù)器與客戶端側(cè)之間的數(shù)據(jù)交換。本發(fā)明還針對一種用于通過允許與使用任何面向?qū)ο缶幊陶Z言來編寫桌面應(yīng)用 類似地編寫Web應(yīng)用來編寫要通過數(shù)據(jù)網(wǎng)絡(luò)而被呈現(xiàn)在客戶端側(cè)的面向IT的基于服務(wù)器 的Web應(yīng)用的方法,其中,通過使對象及對象的相關(guān)邏輯適配網(wǎng)頁設(shè)計(jì)語言來將編寫的應(yīng) 用轉(zhuǎn)換為Web應(yīng)用來實(shí)現(xiàn)所述編寫Web應(yīng)用的動(dòng)作。編寫的應(yīng)用可以基于使用不同設(shè)計(jì)工 具而開發(fā)的另一 Web應(yīng)用。
參照附圖,通過本發(fā)明的優(yōu)選實(shí)施例的說明性且非限制性的詳細(xì)說明,將更透徹地理解本發(fā)明的上述及其它特征和優(yōu)點(diǎn),在附圖中-圖1是本發(fā)明所提出的系統(tǒng)的客戶端側(cè)初始化的示意圖;-圖2舉例說明服務(wù)器與客戶端側(cè)之間的例程(routine)交互;以及-圖3是根據(jù)本發(fā)明的優(yōu)選實(shí)施例、用于提供面向IT的基于服務(wù)器的Web應(yīng)用的系統(tǒng)的架構(gòu)的示意圖。
具體實(shí)施例方式本發(fā)明的系統(tǒng)在客戶端_服務(wù)器IT應(yīng)用領(lǐng)域取得進(jìn)步(在這些應(yīng)用的設(shè)計(jì)和系 統(tǒng)的使用兩方面)。通過使用任何面向?qū)ο?00)的設(shè)計(jì)軟件(高級程序設(shè)計(jì)語言)來設(shè) 計(jì)Web應(yīng)用而取得設(shè)計(jì)的創(chuàng)新。其完全消除了設(shè)計(jì)者對普通網(wǎng)頁/因特網(wǎng)編程工具(例如 HTML、XML、CSS等)的需要。該系統(tǒng)的特征使得任何程序員都可以進(jìn)行Web應(yīng)用設(shè)計(jì),而不 僅僅是對于專攻網(wǎng)頁/因特網(wǎng)設(shè)計(jì)語言的那些人。本發(fā)明的系統(tǒng)的另一明確優(yōu)點(diǎn)是使用單 一而不是若干編程語言。因此,在本發(fā)明的系統(tǒng)中使用的布局設(shè)計(jì)比現(xiàn)有技術(shù)中的一般方 法更加簡單。不需要描述窗口的圖形和屬性及字符/數(shù)字形式的控件,而是只使用“拖放 (drag and drop) ”方法。與在諸如“Visual Studio”的某些桌面應(yīng)用設(shè)計(jì)工具中所做的相 同。還存在布局設(shè)計(jì)方法的實(shí)現(xiàn)-??亢湾^定(在本發(fā)明的背景技術(shù)中被描述),其使得布 局設(shè)計(jì)和修改更加簡單且用戶友好。使用本發(fā)明的系統(tǒng)的創(chuàng)新和優(yōu)點(diǎn)在客戶端(用戶)側(cè)還突出為服務(wù)器-客戶端通 信方法??蛻舳说靡嬗跒榱似浞奖愣x擇任何操作系統(tǒng)和網(wǎng)頁瀏覽器的完全自由。而且, 客戶端不受到特殊授權(quán)(special authorization)的限制,因?yàn)椴恍枰镜匕惭b。因此,客 戶端可以在任何操作系統(tǒng)和任何瀏覽器下使用連接到全局網(wǎng)絡(luò)(或服務(wù)器的本地網(wǎng)絡(luò))的 任何計(jì)算機(jī)。這通過在服務(wù)器側(cè)保持整個(gè)應(yīng)用任務(wù)來實(shí)現(xiàn)。客戶端側(cè)僅投射(project)期 望的屏幕。這意指客戶端不保持關(guān)于客戶端側(cè)的大量信息,而是僅僅保持投射的數(shù)據(jù)。不 通過客戶端側(cè)的任何裝置(例如“cookies”-本地硬盤上的網(wǎng)站存儲(chǔ)器)來存儲(chǔ)投射的數(shù) 據(jù)??蛻舳耸褂脤S脙?nèi)核來將從服務(wù)器接收到的數(shù)據(jù)解碼并將其轉(zhuǎn)換成屏幕顯示。該專用 內(nèi)核還用來將發(fā)送到服務(wù)器的數(shù)據(jù)編碼。本發(fā)明的系統(tǒng)的這些特征使得與現(xiàn)有技術(shù)相比還 非常安全,并就要從客戶端發(fā)送到服務(wù)器及從服務(wù)器發(fā)送到客戶端的數(shù)據(jù)包大小而言使得 通信更加高效。下面描述本發(fā)明的系統(tǒng)中的通信方法的更多方面。使用利用主應(yīng)用窗口的單一 URL(網(wǎng)站的統(tǒng)一資源定位符地址)來執(zhí)行服務(wù)器與瀏覽器之間的通信。應(yīng)用可以由許多窗 口組成,但仍使用單一地址來執(zhí)行與服務(wù)器的通信。如下執(zhí)行客戶端-服務(wù)器的通信當(dāng)客戶端第一次轉(zhuǎn)向(turn to)服務(wù)器時(shí),整 個(gè)頁面被傳輸?shù)娇蛻舳?。這只發(fā)生一次。從現(xiàn)在開始,該頁面將根據(jù)客戶端的請求而被部 分地更新。在客戶端側(cè),將事件聚集在隊(duì)列中,并在發(fā)生臨界事件時(shí),將整個(gè)隊(duì)列發(fā)送到服 務(wù)器。客戶端側(cè)的每個(gè)事件獲得ID標(biāo)簽和時(shí)間戳,其使用服務(wù)器來僅用必要數(shù)據(jù)來更新 客戶端(whichuses the server to update back the client only with the necessary data)。這還使得服務(wù)器能夠服務(wù)于許多客戶端,因?yàn)榉?wù)器可以使用那些標(biāo)簽和時(shí)間戳來 區(qū)分客戶端及其請求。從客戶端發(fā)送到服務(wù)器的數(shù)據(jù)反映客戶端活動(dòng)(例如在特定字段/控件上點(diǎn)擊鼠標(biāo)、使用鍵盤進(jìn)行寫入等)。此數(shù)據(jù)被編碼成最小的數(shù)據(jù)包并發(fā)送到服務(wù)器。 服務(wù)器對該數(shù)據(jù)運(yùn)行應(yīng)用并以最小數(shù)據(jù)包將結(jié)果返回到客戶端。如前所述,客戶端將數(shù)據(jù) 編碼并將其轉(zhuǎn)換成屏幕顯示。與現(xiàn)有技術(shù)的系統(tǒng)相比,服務(wù)器與客戶端之間的這種交互方 法涉及顯著縮減的通信動(dòng)作和數(shù)據(jù)包大小。使用本發(fā)明的系統(tǒng)設(shè)計(jì)的IT應(yīng)用可以在程序員計(jì)算機(jī)處編寫,然后在(安裝在服 務(wù)器上的)網(wǎng)絡(luò)上公布,或者可以通過網(wǎng)絡(luò)直接在服務(wù)器上編寫,亦即遠(yuǎn)程編程。后一種編 程方法使用與客戶端-服務(wù)器在本發(fā)明的系統(tǒng)的應(yīng)用使用中所使用的相同的通信方法。在 這種情況下,程序員是客戶端側(cè)的用戶,且服務(wù)器側(cè)的應(yīng)用是創(chuàng)建IT應(yīng)用的設(shè)計(jì)工具。以 下說明涉及兩種情況使用本發(fā)明的系統(tǒng)的遠(yuǎn)程IT應(yīng)用設(shè)計(jì)者和IT應(yīng)用本身的用戶。在 以下說明中,應(yīng)用意指IT應(yīng)用或設(shè)計(jì)工具,且用戶意指IT應(yīng)用用戶或遠(yuǎn)程程序員。 圖1是本發(fā)明提出的系統(tǒng)的客戶端側(cè)初始化的示意圖。每當(dāng)用戶想使用應(yīng)用時(shí), 發(fā)生以下過程。操作客戶端側(cè)300的用戶使用通過網(wǎng)絡(luò)500而連接到服務(wù)器200的計(jì)算機(jī) /終端上的網(wǎng)頁瀏覽器通過預(yù)定網(wǎng)站而請求(appeal)服務(wù)器200。服務(wù)器作為回答發(fā)送要 被客戶端側(cè)300使用的專用內(nèi)核和用于在客戶端側(cè)300屏幕上創(chuàng)建應(yīng)用顯示的數(shù)據(jù)。如上 所述,此動(dòng)作僅在客戶端系統(tǒng)初始化時(shí)發(fā)生一次。實(shí)際上,其為用戶到系統(tǒng)中的登錄。圖2舉例說明服務(wù)器200和客戶端側(cè)300之間的例程交互。在登錄之后,如下執(zhí) 行用戶與應(yīng)用之間的交互在客戶端側(cè)300,將屏幕上的用戶動(dòng)作(例如鼠標(biāo)點(diǎn)擊、鍵盤輸 入或任何其它用戶輸入)轉(zhuǎn)換成事件。每個(gè)事件獲得唯一 ID和時(shí)間戳。事件在客戶端側(cè) 300排成隊(duì)列。當(dāng)臨界事件發(fā)生時(shí),整個(gè)隊(duì)列被發(fā)送到服務(wù)器200。服務(wù)器200獲得數(shù)據(jù)時(shí), 其將事件轉(zhuǎn)換成對應(yīng)用的動(dòng)作并準(zhǔn)備要被發(fā)送回客戶端側(cè)300的數(shù)據(jù)包。該數(shù)據(jù)包僅包括 客戶端300更新其屏幕上的顯示并投射應(yīng)用的動(dòng)作的結(jié)果所需的必要信息。在用戶登錄到 應(yīng)用中時(shí),執(zhí)行這些重復(fù)。存在這樣的情況,即用戶不執(zhí)行任何活動(dòng)(例如鼠標(biāo)點(diǎn)擊、鍵盤按壓等),但事件 仍然會(huì)被發(fā)送到服務(wù)器。這可能由于由基礎(chǔ)設(shè)施周期性地執(zhí)行的計(jì)時(shí)器操作(諸如“保持 連接”,其是由使客戶端與服務(wù)器在空閑時(shí)間同步的每個(gè)可配置恒定時(shí)間觸發(fā)的事件)或由 于開發(fā)者的異步操作請求(即由開發(fā)者操作從而導(dǎo)致異步事件的異步計(jì)時(shí)器,諸如進(jìn)度條 或由客戶端機(jī)器自動(dòng)地發(fā)起的周期性刷新)而發(fā)生。圖3是根據(jù)本發(fā)明的優(yōu)選實(shí)施例、用于提供面向IT的基于服務(wù)器的Web應(yīng)用的系 統(tǒng)100的示意圖。系統(tǒng)100包括三個(gè)層應(yīng)用層105、服務(wù)器層115以及客戶端層300???戶端層300與服務(wù)器層115進(jìn)行交互,服務(wù)器層115繼而與應(yīng)用層105進(jìn)行交互。通過被 排成隊(duì)列并以XML(可擴(kuò)展標(biāo)記語言)形式從瀏覽器135發(fā)送到應(yīng)用服務(wù)器116的事件來 執(zhí)行客戶端層300與服務(wù)器層115之間的交互。另一方面,通過以XML形式從應(yīng)用服務(wù)器 116發(fā)送到瀏覽器135的更新命令來執(zhí)行服務(wù)器層115與客戶端層300之間的交互。應(yīng)用層105還包括應(yīng)用對象樹106,其可以是表示用于保持應(yīng)用狀態(tài)的(在程序 代碼中創(chuàng)建的)應(yīng)用實(shí)例的樹形結(jié)構(gòu)對象模型;應(yīng)用對象索引107,其可以是哈希表,用于 保持組件標(biāo)識與組件引用(reference)的關(guān)系并用來從應(yīng)用對象標(biāo)識獲得應(yīng)用對象引用; 以及應(yīng)用配置108,其可以是XML文檔,用于保持應(yīng)用參數(shù)和定義。服務(wù)器層115 (其進(jìn)一步包括應(yīng)用服務(wù)器116)負(fù)責(zé)-將資源請求從可以是各種類型的客戶端層路由到服務(wù)器層上的資源請求處理機(jī)(handler),所述資源請求處理機(jī)是應(yīng)向應(yīng)用提供其資源(諸如圖標(biāo)/圖像、數(shù)據(jù)、組件、內(nèi) 容等)并將數(shù)據(jù)發(fā)送回客戶端層的對象;-可以通過向保持應(yīng)用對象ID的提交表單添加特定字段并通過從應(yīng)用對象索引 獲得其引用來執(zhí)行將請求路由到已請求文件的應(yīng)用對象(在應(yīng)用對象樹106內(nèi))。應(yīng)用對 象索引是通過ID保持應(yīng)用對象的詞典(dictionary),使得能夠通過提供ID來直接訪問應(yīng) 用對象。這樣,當(dāng)請求到達(dá)服務(wù)器層時(shí),其被路由到適當(dāng)?shù)膽?yīng)用對象。
-接收事件隊(duì)列并針對隊(duì)列項(xiàng)循環(huán)、逐個(gè)地處理事件,按照事件在客戶端層300發(fā) 生的順序來處理每個(gè)事件;-通過使用在上次服務(wù)器響應(yīng)(在客戶端層300內(nèi)提供)時(shí)從服務(wù)器層發(fā)送到應(yīng) 用服務(wù)器116 (在服務(wù)器層115內(nèi)提供)的時(shí)間戳來將更新命令從瀏覽器135返回到應(yīng)用 服務(wù)器116 ;-通過以下操作來處理第一URL導(dǎo)航(navigation)獲得類,該類表示到在應(yīng)用對 象樹106內(nèi)提供的應(yīng)用對象的系統(tǒng)的進(jìn)入點(diǎn)的容器控件(例如Form容器對象)(所述類被 映射到特定的URL),根據(jù)所述類來將對象初始化并返回完整更新命令。完整更新命令是使 得客戶端能夠完整地再現(xiàn)控件的一整套屬性,其與更新某些屬性并因此而使得能夠?qū)崿F(xiàn)控 件的局部再現(xiàn)的局部更新命令相反??蛻舳藢?00還包括以下軟件組件-用于在諸如因特網(wǎng)的數(shù)據(jù)網(wǎng)絡(luò)上沖浪的瀏覽器135(例如MozillaFirefox 或者 Microsoft IE (Internet Explorer)瀏覽器)-瀏覽器控制腳本(controllerscript) 127,其為用第一導(dǎo)航下載并被用作“通用 框架(generic framework) ”的腳本?!巴ㄓ每蚣堋币庵赶螺d客戶端層腳本一次并將其用于 所有用途,與每個(gè)應(yīng)用/控件/控件狀態(tài)均要求下載特定腳本的其它框架相反。此“通用框 架”腳本被用于與應(yīng)用服務(wù)器116通信并借助于從所述應(yīng)用服務(wù)器116接收到的更新命令 來更新客戶端層300?!巴ㄓ每蚣堋蹦_本使得客戶端層能夠執(zhí)行更新命令,如前所述,該更新 命令可能包括需要修改或重新再現(xiàn)在客戶端層上的部分/全部指導(dǎo)(direction)。“通用框 架”腳本還使得客戶端層能夠關(guān)于客戶端層中發(fā)生的事件(客戶端事件)而執(zhí)行與服務(wù)器 的進(jìn)一步通信,所述事件即用戶130輸入點(diǎn)擊/雙擊、文本修改、鼠標(biāo)移動(dòng)等。-XSL文檔126,其在應(yīng)用服務(wù)器116上生成,用來將從應(yīng)用服務(wù)器116發(fā)送到瀏覽 器135的更新命令變成HTML(超文本標(biāo)記語言)代碼,該HTML代碼代替現(xiàn)有的HTML代碼。 這通過更新的XML后數(shù)據(jù)的XSL變換來執(zhí)行,所述XSL變換幫助將新更新的屬性變換成繪 制的控件。-XML界面狀態(tài)文檔128,其保持界面狀態(tài)并用來再現(xiàn)增量更新且保存界面狀態(tài)。 通過在客戶端層上保持屬性數(shù)據(jù)的此XML,可以執(zhí)行增量更新,因?yàn)榉?wù)器層可以通過更新 XML界面狀態(tài)文檔128而在每個(gè)階段只發(fā)送所需的數(shù)據(jù),并且只重新再現(xiàn)應(yīng)該再現(xiàn)的部分。-CSS文檔136,其在服務(wù)器層上生成,并被用作用于所有再現(xiàn)的(所變換的數(shù)據(jù) +XSLT)HTML元素的一般樣式(諸如背景顏色、邊框尺寸、邊框顏色、布局樣式等)??蛻舳耸录?例如點(diǎn)擊、雙擊、鼠標(biāo)移動(dòng)等)在瀏覽器控制腳本127中被排成隊(duì) 列。這些客戶端事件被分成三種主要類型 累積事件這些事件借助于瀏覽器控制腳本127而被排列到客戶端事件隊(duì)列129中;·累積唯一事件這些事件也借助于瀏覽器控制攪拌127而被排列到客戶端事件 隊(duì)列129中,但被保持為唯一事件;這意指如果這類事件發(fā)生且相同源和名稱的前一事件 已經(jīng)存在,則所述前一事件將被刪除,且新事件將被排隊(duì);·臨界事件當(dāng)這類事件發(fā)生時(shí),其被排隊(duì)為最后事件并觸發(fā)事件隊(duì)列,該事件隊(duì)列包含在最后臨界事件與當(dāng)前事件之間的在客戶端層上發(fā)生的所有非臨界事件的按時(shí)序 排列列表。觸發(fā)該事件意指將其立刻并以同步方式發(fā)送到應(yīng)用服務(wù)器116。由應(yīng)用服務(wù)器116管理的URL的初始請求(其為在網(wǎng)頁瀏覽器中輸入以便瀏覽至 應(yīng)用的一個(gè)入口點(diǎn)的URL)促使所述應(yīng)用服務(wù)器116在應(yīng)用配置108內(nèi)搜索應(yīng)用對象類的 映射(對于給定URL)。在從所述應(yīng)用配置108軟件組件檢索到映射的應(yīng)用對象類之后,將 此類初始化以表示應(yīng)用對象樹106的根對象(這意指將根對象初始化以便創(chuàng)建應(yīng)用的入口 點(diǎn)并將其顯示在客戶端層上)。然后,將完整更新命令從應(yīng)用服務(wù)器116返回到客戶端層 300,從而使得所述客戶端層300能夠?qū)⒖蛻舳私缑娉跏蓟?。初始化是正?in state)創(chuàng) 建所有當(dāng)前所示控件的新對象并對它們分配期望的初始屬性狀態(tài)的過程。由此開始,借助 于事件和更新命令來執(zhí)行客戶端層300與應(yīng)用服務(wù)器115之間的通信,當(dāng)發(fā)出刷新動(dòng)作時(shí) 除外(可以通過按壓瀏覽器的刷新按鈕或通過改變應(yīng)用的諸如其語言的某種主要屬性來 執(zhí)行),這將促使服務(wù)器層11再次發(fā)送完整更新命令。當(dāng)臨界事件觸發(fā)事件隊(duì)列發(fā)送時(shí),瀏覽器控制腳本127向應(yīng)用服務(wù)器116發(fā)送動(dòng) 作隊(duì)列(在客戶端事件隊(duì)列129中提供)以及客戶端唯一戳,例如時(shí)間戳,其是表示客戶端 層135的最后更新時(shí)間的數(shù)值。然后,服務(wù)器層115內(nèi)的應(yīng)用服務(wù)器116接收事件隊(duì)列和 客戶端時(shí)間戳。然后,服務(wù)器從尾向頭地處理事件隊(duì)列,這是事件已發(fā)生的順序。事件隊(duì)列 中的每個(gè)事件具有作為與此事件相關(guān)的應(yīng)用對象的ID (標(biāo)識)的源值。當(dāng)搜索應(yīng)用對象索 引107以獲得對與此事件相關(guān)的應(yīng)用對象的對象引用時(shí),使用從當(dāng)前事件接收到的此類應(yīng) 用對象ID。當(dāng)前事件被發(fā)送到將對象事件變換為發(fā)生的正常事件(基于本發(fā)明,發(fā)生的正 常事件是在對象之間發(fā)送事件的服務(wù)器模型,與作為從客戶端層發(fā)送到應(yīng)用服務(wù)器層的事 件的非正常事件相反)的應(yīng)用對象的方法(其是用于這種事件的對象的事件處理機(jī))。然 后,應(yīng)用對象根據(jù)其使用的類型(控件類型,即按鈕、表單、列表框等)和行為(對該特定應(yīng) 用對象的每個(gè)事件進(jìn)行反應(yīng)的方法)來發(fā)送可以被程序代碼開發(fā)者使用的正常代碼事件。 正常代碼事件是被接受的眾所周知的機(jī)制,該機(jī)制在以相同技術(shù)(即C#、Java等)編寫的 對象之間發(fā)送消息,與本發(fā)明提出的非正常事件相反,其中編寫的對象例如是發(fā)送消息以 便關(guān)于在其數(shù)據(jù)中發(fā)生的某些變化告知其容器對象的對象。使用本發(fā)明機(jī)制在客戶端層與 應(yīng)用服務(wù)器層之間傳遞非正常事件,例如在客戶端上的HTML再現(xiàn)元素被點(diǎn)擊時(shí)其發(fā)送事 件;然后,當(dāng)針對應(yīng)在服務(wù)器層上處理事件的對象實(shí)際發(fā)生該事件時(shí),該事件被本發(fā)明機(jī)制 轉(zhuǎn)換成正常代碼事件。在已將所有事件從客戶端層發(fā)送到應(yīng)用服務(wù)器115之后,所述應(yīng)用服務(wù)器115調(diào) 用作為應(yīng)用對象樹106的應(yīng)用根對象,以再現(xiàn)應(yīng)在客戶端層300上執(zhí)行以便與應(yīng)用對象樹 106同步的更新命令。為了創(chuàng)建更新命令,將客戶端時(shí)間戳發(fā)送到應(yīng)用對象樹106內(nèi)的應(yīng) 用根對象,其繼而開始遞歸的再現(xiàn)動(dòng)作,該遞歸的再現(xiàn)動(dòng)作調(diào)用所述應(yīng)用對象樹106中的 每個(gè)應(yīng)用對象以檢查其本身的時(shí)間戳,以便查看其是否需要生成一個(gè)或多個(gè)更新命令。應(yīng)用對象可以保持一個(gè)或多個(gè)時(shí)間戳,以便其可以在需要時(shí)生成用于更新組件的不同更新命 令。這種每個(gè)應(yīng)用對象的多個(gè)時(shí)間戳當(dāng)前被用于局部更新命令(例如僅更新諸如背景顏 色、包含的數(shù)據(jù)等的應(yīng)用對象屬性)。局部命令用來使更新過程就必須重新繪制的元素?cái)?shù)目 及其復(fù)雜性而言盡可能高效。由應(yīng)用對象樹106產(chǎn)生的更新命令被發(fā)送到服務(wù)器層115內(nèi)的應(yīng)用服務(wù)器116,應(yīng) 用服務(wù)器116繼而將所述更新命令作為XML文檔發(fā)送到客戶端層300。瀏覽器控制腳本127 接收更新命令并更新XML界面狀態(tài)文檔128。然后,通過使用XSL文檔126將更新的元素逐 個(gè)地轉(zhuǎn)換成要被顯示在顯示器131上的其HTML代碼表示。該HTML表示是通過利用(對于 表示控件的元素)適當(dāng)XSL模板的XML界面狀態(tài)文檔128的XSL變換產(chǎn)生的。
以與所有其它應(yīng)用對象相同的方式來執(zhí)行開放式應(yīng)用窗口的管理,但從服務(wù)器層 115返回以便打開窗口的更新命令或使窗口保持打開的更新命令還包含對窗口 XML結(jié)構(gòu) (XML元素結(jié)構(gòu)可以具有包含在窗口中的應(yīng)用對象以便該元素將被包含,或者可以具有窗口 結(jié)構(gòu),其本身作為根XML節(jié)點(diǎn))的指示,所述XML結(jié)構(gòu)表示當(dāng)前窗口結(jié)構(gòu)(例如主窗口、模 式對話框或非模式對話框、尺度、位置等)。當(dāng)瀏覽器控制腳本127接收到打開窗口的XML 結(jié)構(gòu)時(shí),其掃描(在當(dāng)前打開的窗口上循環(huán))所述打開窗口以查看是否應(yīng)關(guān)閉其中之一,并 掃描窗口結(jié)構(gòu)以查看是否應(yīng)打開新窗口。通過管理應(yīng)用對象ID進(jìn)行更新是唯一的,因此其 可以跨多個(gè)窗口被找到,以與管理主窗口內(nèi)容相同的方式來執(zhí)行窗口內(nèi)容的管理(主窗口 是瀏覽器窗口,該瀏覽器窗口在應(yīng)用運(yùn)行期間在主窗口上部打開其它窗口的同時(shí)最初瀏覽 初始URL),這意指應(yīng)用對象ID在其它窗口中無法重復(fù),即使該應(yīng)用對象被包含在完全不同 的容器中也是如此。這樣,可以在XML內(nèi)唯一地找到對象,而無論其包含的窗口。根據(jù)本發(fā)明的實(shí)施例,使用傳統(tǒng)桌面應(yīng)用的布局定義,其限定有關(guān)布局項(xiàng)的???和錨定屬性。??坎季直葌鹘y(tǒng)Web應(yīng)用使用的HTML表格和絕對定位更易于維護(hù)。最后,輸 出仍然是HTML,但程序員僅定義與在應(yīng)用對象上的??炕蝈^定有關(guān)的那些屬性。支持???的應(yīng)用對象暴露停靠(Dock)屬性,其為“左”、“頂部”、“右”、“底部”和“填充(Fill)”的計(jì) 數(shù)器(enumerator)。這些計(jì)數(shù)器定義應(yīng)用對象的布局行為·定義“頂部”??繉?dǎo)致應(yīng)用對象根據(jù)高度定義而出現(xiàn)在可能的最高位置,且應(yīng)用 對象寬度將是可能的最大寬度;·定義“底部”停靠導(dǎo)致應(yīng)用對象根據(jù)其高度定義而出現(xiàn)在可能的最低位置,且應(yīng) 用對象寬度將是可能的最大寬度;·定義“左”??繉?dǎo)致應(yīng)用對象根據(jù)其寬度定義而出現(xiàn)在最左側(cè)位置,且其高度將 是可能的最大高度;·定義“右”??繉?dǎo)致應(yīng)用對象根據(jù)其寬度定義而出現(xiàn)在最右側(cè)位置,且其高度將 是可能的最大高度。·定義“填充”??繉?dǎo)致應(yīng)用對象填充剩余的客戶端區(qū)域。將在“填充”應(yīng)用對 象之后定義的任何應(yīng)用對象將根本不會(huì)顯示,因?yàn)榫哂小疤畛洹蓖?康膽?yīng)用對象已經(jīng)占用所 有剩余空間。根據(jù)本發(fā)明的優(yōu)選實(shí)施例,采用絕對定位HTML中的元素的能力和在樣式屬性(描 述控件樣式的屬性,諸如顏色、尺度、字體等,與諸如文本的數(shù)據(jù)屬性相反)上添加表達(dá)式 (expression)的能力,所述表達(dá)式應(yīng)時(shí)常重新計(jì)算(重新計(jì)算是設(shè)置控件的位置和尺度的動(dòng)作)。
當(dāng)用戶沖浪至由應(yīng)用服務(wù)器116管理并被映射到應(yīng)用根對象類(執(zhí)行映射,以便 應(yīng)用將具有入口點(diǎn),比如說,指定的應(yīng)用對象表示所顯示的第一屏幕)的URL時(shí),該類被初 始化并充當(dāng)用于應(yīng)用對象樹106上的所有其它應(yīng)用對象的根對象。通過應(yīng)用事件來執(zhí)行編 寫應(yīng)用,以便改變當(dāng)前應(yīng)用對象樹狀態(tài)(諸如編寫代碼,其在按鈕點(diǎn)擊事件發(fā)生時(shí)、來自列 表的項(xiàng)被選擇時(shí)等發(fā)生)和結(jié)構(gòu)(諸如編寫代碼,其引起控件的出現(xiàn)/消失、控件的尺度/ 樣式/狀態(tài)、窗口打開等),并且,服務(wù)器通過用來使當(dāng)前界面狀態(tài)與應(yīng)用對象樹狀態(tài)同步 的更新命令而在客戶端的瀏覽器中反映這些變化。還通過應(yīng)用對象樹來執(zhí)行管理Web應(yīng)用 窗口。打開窗口要求程序員創(chuàng)建從窗口類繼承的對象的新實(shí)例。調(diào)用此對象的“顯示窗口 (showwindow) ”函數(shù)(其為命令服務(wù)器顯示窗口的實(shí)例的函數(shù))使得將此窗口對象標(biāo)記為 可見,在下一個(gè)更新命令中其將此窗口添加到響應(yīng)的窗口結(jié)構(gòu)部分,通知瀏覽器在服務(wù)器 上已創(chuàng)建窗口并應(yīng)打開新窗口且再現(xiàn)其內(nèi)容。當(dāng)調(diào)用“隱藏窗口(hide window)”函數(shù)時(shí), 該“隱藏窗口”函數(shù)是命令服務(wù)器隱藏現(xiàn)有窗口并將不包含所發(fā)布的窗口結(jié)構(gòu)的新的更新 命令發(fā)送回客戶端的函數(shù),比如說,應(yīng)關(guān)閉此窗口。瀏覽器總是將其當(dāng)前打開的窗口與更新 命令中的列表窗口結(jié)構(gòu)相比較;然后,存在3種可能的情況1.窗口存在于更新命令和XML界面狀態(tài)文檔128兩者中,那么,窗口應(yīng)保持打開, 因?yàn)槠湓诜?wù)器層狀態(tài)和客戶端層狀態(tài)下均可見。2.窗口存在于更新命令中且未存在于XML界面狀態(tài)文檔128中,那么,應(yīng)打開在新 窗口結(jié)構(gòu)內(nèi)具有指定內(nèi)容的新窗口,因?yàn)槠湓诜?wù)器層狀態(tài)下可見,但在客戶端層狀態(tài)下 不可見。3.窗口未存在于更新命令中,但是存在于XML界面狀態(tài)文檔128中,那么,應(yīng)關(guān)閉 發(fā)布的窗口,因?yàn)槠湓诜?wù)器層狀態(tài)下不可見,但在客戶端層狀態(tài)下可見?,F(xiàn)有技術(shù)Web應(yīng)用環(huán)境是基于頁面的,這意指用與會(huì)話數(shù)據(jù)相結(jié)合的數(shù)據(jù)和類似 于用來向客戶端完全再現(xiàn)新頁面的數(shù)據(jù)庫記錄的其它系統(tǒng)資源來調(diào)用URL。更新客戶端界 面要求由服務(wù)器來完全再現(xiàn)頁面,將頁面發(fā)送到瀏覽器并由瀏覽器再現(xiàn)以更新其界面。在 那些環(huán)境下,通過此行為要求在瀏覽器中運(yùn)行的腳本調(diào)用對服務(wù)器上的頁面的HTTP請求 并更新瀏覽器的界面。雖然此Web應(yīng)用開發(fā)環(huán)境使用客戶端腳本來實(shí)現(xiàn)其任務(wù),但其通過用來更新客戶 端界面并從客戶端返回事件的基本腳本組來這樣做,并在生成用來更新客戶端界面的更新 命令的服務(wù)器側(cè)執(zhí)行所有處理。因此,消除了應(yīng)用設(shè)計(jì)員使用客戶端腳本來將其Web應(yīng)用 編碼的需要。應(yīng)用設(shè)計(jì)員處理應(yīng)用對象樹事件,并且,通過經(jīng)由那些事件處理機(jī)來改變應(yīng)用 對象樹結(jié)構(gòu)和狀態(tài),他間接地與用戶界面進(jìn)行交互。根據(jù)現(xiàn)有技術(shù),完全在服務(wù)器和客戶端側(cè)再現(xiàn)Web頁面。此Web應(yīng)用開發(fā)環(huán)境使 用XML HTTP作為其同步和異步中介(mediator),并且發(fā)送的內(nèi)容是由在瀏覽器中發(fā)生的 相關(guān)變化和動(dòng)作組成的事件隊(duì)列。與該事件隊(duì)列一起,還將客戶端時(shí)間戳發(fā)送到服務(wù)器,該 服務(wù)器用來在處理事件隊(duì)列并執(zhí)行事件處理機(jī)代碼之后再現(xiàn)更新命令。由事件處理機(jī)對應(yīng) 用對象樹元素進(jìn)行的修改導(dǎo)致每個(gè)經(jīng)修改的元素具有不同的最后更新時(shí)間戳,并且通過遞 歸地遍歷應(yīng)用對象樹并將客戶端時(shí)間戳與每個(gè)應(yīng)用對象樹元素的時(shí)間戳相比較,可以提取 更新命令列表并將其用于更新用戶界面,因此,用戶界面將與應(yīng)用對象樹同步。此機(jī)制將發(fā)送到服務(wù)器和從服務(wù)器返回的數(shù)據(jù)的尺寸優(yōu)化至最小。此Web應(yīng)用開發(fā)環(huán)境所使用的事件 隊(duì)列機(jī)制使服務(wù)器呼叫優(yōu)化,以便不發(fā)送不必在服務(wù)器上處理的事件,并且只有當(dāng)發(fā)生必 須要處理的事件時(shí),才進(jìn)行發(fā)送。當(dāng)重新定義唯一事件時(shí),這意指某些事件互相抵消,可將 事件隊(duì)列更加優(yōu)化。例如如果用戶改變屏幕上的拆分器位置并隨后再次修改它,則第一事 件值不是相關(guān)的,并將從隊(duì)列中刪除。 根據(jù)本發(fā)明的優(yōu)選實(shí)施例,可以將繼承(legacy)應(yīng)用(例如工具、客戶端/服務(wù) 器應(yīng)用等)從任何現(xiàn)有桌面環(huán)境導(dǎo)入網(wǎng)頁。另外,可實(shí)現(xiàn)更高的安全水平,因?yàn)闉g覽器不保 持業(yè)務(wù)邏輯腳本(諸如應(yīng)用確認(rèn)、口令、隱式字段、標(biāo)記等),并且除使得能夠創(chuàng)建在任何給 定時(shí)間呈現(xiàn)的當(dāng)前視圖的表示數(shù)據(jù)之外基本上幾乎沒有數(shù)據(jù)。雖然已通過舉例說明描述了本發(fā)明的某些實(shí)施例,但顯而易見的是在不違背本發(fā) 明的精神或超出權(quán)利要求的范圍的情況下,可以在進(jìn)行許多修改、變更和改變的情況下和 在使用在本領(lǐng)域技術(shù)人員的范圍內(nèi)的許多等價(jià)物或替代解決方案的情況下實(shí)施本發(fā)明。
權(quán)利要求
一種用于允許計(jì)算機(jī)化系統(tǒng)使用要通過數(shù)據(jù)網(wǎng)絡(luò)而被呈現(xiàn)的面向IT的基于服務(wù)器的Web應(yīng)用的方法,包括a)提供服務(wù)器側(cè);b)提供客戶端側(cè)終端,該客戶端側(cè)終端通過所述數(shù)據(jù)網(wǎng)絡(luò)與所述服務(wù)器進(jìn)行數(shù)據(jù)通信;c)在所述服務(wù)器側(cè)安裝應(yīng)用;d)將專用內(nèi)核下載到所述客戶端側(cè)一次,該專用內(nèi)核用于在應(yīng)用與客戶端側(cè)之間調(diào)停,其中e)在所述客戶端側(cè)e.1)在事件與表示應(yīng)用對象的相應(yīng)ID標(biāo)簽之間相關(guān)聯(lián);e.2)向每個(gè)事件分配時(shí)間戳;e.3)將事件排成隊(duì)列,并且只在發(fā)生臨界事件時(shí),才將所述事件以事件隊(duì)列的形式發(fā)送到所述應(yīng)用;f)在所述服務(wù)器側(cè)f.1)通過使用所述ID標(biāo)簽在所述事件與所述應(yīng)用對象之間相關(guān)聯(lián)來將事件轉(zhuǎn)換成應(yīng)用動(dòng)作;f.2)通過每個(gè)接收到的事件的時(shí)間戳與所述應(yīng)用對象的最后更新時(shí)間戳之間的比較來檢查所述客戶端的應(yīng)用對象是否被更多地更新;f.3)如果所述客戶端的應(yīng)用對象被更多地更新,則準(zhǔn)備僅包含用于客戶端側(cè)的更新命令的數(shù)據(jù)包以更新反映應(yīng)用更新的相關(guān)布局對象;f.4)將所述數(shù)據(jù)包作為更新發(fā)送回所述客戶端側(cè);以及g)根據(jù)所述數(shù)據(jù)包的內(nèi)容,通過表示層在客戶端側(cè)更新屏幕布局對象。
2.如權(quán)利要求1所述的方法,其中,所述客戶端側(cè)是在任何操作系統(tǒng)下運(yùn)行的任何網(wǎng) 頁瀏覽器。
3.一種方法,其用于通過允許與使用任何面向?qū)ο缶幊陶Z言來編寫桌面應(yīng)用類似地編 寫Web應(yīng)用來編寫要通過數(shù)據(jù)網(wǎng)絡(luò)而被呈現(xiàn)在客戶端側(cè)的面向IT的基于服務(wù)器的Web應(yīng) 用,其中,通過使對象及對象的相關(guān)邏輯適配網(wǎng)頁設(shè)計(jì)語言來將編寫的應(yīng)用轉(zhuǎn)換為Web應(yīng) 用來實(shí)現(xiàn)所述編寫Web應(yīng)用的操作。
4.如權(quán)利要求3所述的方法,其中,所編寫的應(yīng)用是基于使用不同設(shè)計(jì)工具而開發(fā)的 另一 Web應(yīng)用。
5.如權(quán)利要求1所述的方法,其中,所述表示層獨(dú)立于所述專用內(nèi)核的代碼,并且當(dāng)前 選自以下組-DHTML ;-WinForms ;-Microsoft Silverlight ;或者-可以發(fā)送和接收XML代碼的任何其它表示層可以支持的機(jī)制。
6.如權(quán)利要求1所述的方法,其中,所述專用內(nèi)核是在所支持的不同表示層之間改變 的代碼。
7.如權(quán)利要求1所述的方法,其中,只使用XML來執(zhí)行服務(wù)器與客戶端側(cè)的數(shù)據(jù)交換。
8.如權(quán)利要求1所述的方法,其中,所述專用內(nèi)核管理客戶端側(cè)通信協(xié)議。
全文摘要
本發(fā)明公開了一種用于允許計(jì)算機(jī)化系統(tǒng)使用要通過數(shù)據(jù)網(wǎng)絡(luò)而被呈現(xiàn)的面向IT的基于服務(wù)器的Web應(yīng)用的方法。因此,在通過數(shù)據(jù)網(wǎng)絡(luò)(500)而與客戶端側(cè)終端(300)進(jìn)行數(shù)據(jù)通信的服務(wù)器側(cè)(200)安裝應(yīng)用(105)。將專用內(nèi)核下載到客戶端側(cè)(300)一次,其用于在應(yīng)用與客戶端側(cè)(300)之間調(diào)停。在客戶端側(cè)(300),將事件與表示應(yīng)用對象的相應(yīng)ID標(biāo)簽相關(guān)聯(lián),并向每個(gè)事件分配時(shí)間戳。將事件排成隊(duì)列(129),并且只在臨界事件發(fā)生時(shí),才將其以事件隊(duì)列的形式發(fā)送到應(yīng)用(105)。在服務(wù)器側(cè)(200),通過事件與應(yīng)用對象之間的關(guān)聯(lián),使用ID標(biāo)簽來將事件轉(zhuǎn)換為應(yīng)用動(dòng)作。如果通過每個(gè)接收到的事件的時(shí)間戳與應(yīng)用對象的最后更新時(shí)間戳之間的比較確定客戶端(300)的應(yīng)用對象被更多地更新,則準(zhǔn)備僅包含使客戶端側(cè)更新反映應(yīng)用更新的相關(guān)布局對象的更新命令的數(shù)據(jù)包并將其作為更新發(fā)送回客戶端側(cè)(300)。最后,根據(jù)該數(shù)據(jù)包的內(nèi)容,由表示層來更新客戶端側(cè)(300)的屏幕布局對象。
文檔編號G06F15/16GK101849228SQ200880008613
公開日2010年9月29日 申請日期2008年1月16日 優(yōu)先權(quán)日2007年1月16日
發(fā)明者G·佩萊德 申請人:吉茲莫克斯有限公司