專利名稱:在門(mén)戶中有效處理導(dǎo)航狀態(tài)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于在門(mén)戶應(yīng)用中有效處理導(dǎo)航狀態(tài)的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品,特別地,涉及減小門(mén)戶頁(yè)面的標(biāo)記大小,減小URL長(zhǎng)度,以及減少生成作為門(mén)戶頁(yè)面一部分的URL所需要的處理時(shí)間。
背景技術(shù):
如本發(fā)明所使用的,導(dǎo)航狀態(tài)描述“作為特定客戶機(jī)的所有導(dǎo)航交互的結(jié)果的門(mén)戶的當(dāng)前視圖”??蛻魴C(jī)可以通過(guò)與門(mén)戶頁(yè)面交互,例如導(dǎo)航到新的頁(yè)面,而請(qǐng)求(查詢)不同的視圖。這種類型的交互不改變服務(wù)器側(cè)的狀態(tài),而只是向服務(wù)器請(qǐng)求新的視圖;因此,在HTTP方面,這是“安全的”操作。該交互的特征是客戶機(jī)可以使用其瀏覽器的向前和向后按鈕向前和向后導(dǎo)航該交互的最近的視圖,并且客戶機(jī)可以用書(shū)簽標(biāo)記視圖并在稍后的時(shí)間點(diǎn)通過(guò)調(diào)用瀏覽器書(shū)簽返回到這些視圖。
HTTP的一個(gè)主要特征在于它是無(wú)狀態(tài)協(xié)議,即,在HTTP中不存在跨越多個(gè)請(qǐng)求/響應(yīng)交互的會(huì)話的概念。但是,由于幾乎所有的應(yīng)用場(chǎng)景都要求某些機(jī)制在整個(gè)請(qǐng)求中保存其狀態(tài),因此已經(jīng)出現(xiàn)了一些機(jī)制,其考慮創(chuàng)建(邏輯的)有狀態(tài)的會(huì)話并且可確定地被當(dāng)作現(xiàn)有技術(shù)的狀態(tài)。兩種最流行的現(xiàn)有技術(shù)的狀態(tài)保存機(jī)制如下所述為了在客戶機(jī)(通常是瀏覽器)和服務(wù)器之間啟動(dòng)邏輯會(huì)話,服務(wù)器向客戶機(jī)返回額外的“set-cookie”響應(yīng)報(bào)頭,其主要包含名值對(duì)??蛻魴C(jī)在文件中持久地存儲(chǔ)該cookie,并將其與服務(wù)器的URL相關(guān)聯(lián)。對(duì)于每個(gè)請(qǐng)求,客戶機(jī)使用“cookie”請(qǐng)求報(bào)頭將該cookie返回到服務(wù)器。通過(guò)分析cookie,服務(wù)器(不是HTTP服務(wù)器,而是諸如小服務(wù)程序(servlet)或CGI的應(yīng)用程序或服務(wù)器側(cè)腳本)可以識(shí)別包含所需要的狀態(tài)信息的用戶專用的會(huì)話。注意,cookie還考慮在整個(gè)會(huì)話邊界上保持狀態(tài),因?yàn)樵诳蛻魴C(jī)上的持久的cookie文件通常比在服務(wù)器上的對(duì)應(yīng)會(huì)話的存在時(shí)間長(zhǎng)。
第二種變形在服務(wù)器和客戶機(jī)之間交換整個(gè)狀態(tài)信息。服務(wù)器使用(HTML)表單的隱藏輸入文件將狀態(tài)存儲(chǔ)在所請(qǐng)求的頁(yè)面的標(biāo)記中。另外,該應(yīng)用確保頁(yè)面標(biāo)記中的每個(gè)URL都啟動(dòng)一個(gè)表單提交,使得作為隱藏輸入字段的一部分的狀態(tài)與該請(qǐng)求一起流到HTTP服務(wù)器。
在當(dāng)今的Web應(yīng)用中,使用以上簡(jiǎn)述的機(jī)制之一,甚至導(dǎo)航狀態(tài)都在整個(gè)請(qǐng)求中被大部分保存。然而,這兩種方法在書(shū)簽?zāi)芰?、高速緩存、向?向前按鈕和由搜索引擎索引(“爬行能力”)方面,都具有一些主要缺點(diǎn)。
在邏輯服務(wù)器側(cè)HTTP會(huì)話(例如通過(guò)cookie識(shí)別的)中存儲(chǔ)導(dǎo)航狀態(tài)具有以下不足由于在服務(wù)器側(cè)會(huì)話中保存的導(dǎo)航狀態(tài)僅有有限的生存期,因此瀏覽器書(shū)簽不起作用。通常,在一段不活動(dòng)的時(shí)間后,會(huì)話中止。在會(huì)話中止后,導(dǎo)航狀態(tài)不能在服務(wù)器上還原,即,服務(wù)器將傳送應(yīng)用的缺省視圖。
使用瀏覽器的向后和向前按鈕向后和向前導(dǎo)航最近的視圖不起作用。注意,在那種情況下,只要保持會(huì)話,狀態(tài)就不會(huì)丟失,但是向后和向前按鈕的操作不對(duì)該狀態(tài)產(chǎn)生任何影響。
由于這樣的高速緩存器通常使用URL作為其高速緩存鍵(cache key),所以高速緩存(瀏覽器側(cè)、服務(wù)器側(cè)和代理高速緩存)的好處被極大地降低。用幾乎每一個(gè)交互重寫(xiě)高速緩存器條目,導(dǎo)致幾乎為零的高速緩存器命中率。
Web搜索引擎不能很好地索引站點(diǎn)。搜索引擎通過(guò)存儲(chǔ)有關(guān)其從Web本身檢索的大量Web頁(yè)面的信息而工作。這些頁(yè)面通過(guò)被稱為“網(wǎng)絡(luò)爬蟲(chóng)(Web crawler)”的Web瀏覽器檢索,該Web瀏覽器跟隨其在頁(yè)面上看到的每一個(gè)URL(分別在標(biāo)記中)。
在HTML表單的隱藏輸入字段中存儲(chǔ)導(dǎo)航狀態(tài)具有較少的缺點(diǎn),但是它也不能解決上述的所有問(wèn)題。只要各個(gè)頁(yè)面被高速緩存,書(shū)簽?zāi)芰推鹱饔?。向后和向前按鈕起作用。仍存在高速緩存和爬行能力(crawlability)問(wèn)題。注意,由于該機(jī)制要求頁(yè)面級(jí)的表單,因此依賴于隱藏輸入字段的狀態(tài)管理不能應(yīng)用于門(mén)戶區(qū)域。然而,頁(yè)面級(jí)表單不能被使用,符合JSR168的標(biāo)記的門(mén)戶小程序(portlet)也可以使用HTML表單,從而導(dǎo)致嵌套的表單(這是HTML標(biāo)準(zhǔn)禁止的)。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種用于有效地對(duì)門(mén)戶的導(dǎo)航狀態(tài)編碼的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品,以避免現(xiàn)有技術(shù)中存在的不足。
本發(fā)明提供一種用于通過(guò)將導(dǎo)航狀態(tài)分為基本導(dǎo)航狀態(tài)部分和增量導(dǎo)航狀態(tài)部分而有效地處理導(dǎo)航狀態(tài)的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品?;緦?dǎo)航狀態(tài)描述在所有URL上相同的最新導(dǎo)航狀態(tài)的那部分,其被編碼在將被提交到客戶機(jī)的瀏覽器的頁(yè)面標(biāo)記的報(bào)頭中。增量導(dǎo)航部分描述特定URL的語(yǔ)義,其被編碼在其相關(guān)的URL中。每個(gè)使用這種URL的用戶交互使瀏覽器提交基本部分和增量部分。在服務(wù)器側(cè),基本部分和增量部分被合并以產(chǎn)生新的最新導(dǎo)航狀態(tài),作為呈現(xiàn)新頁(yè)面的基礎(chǔ)。新的最新導(dǎo)航狀態(tài)被表示為分級(jí)樹(shù)型結(jié)構(gòu),其可以被有效地串行化并通過(guò)現(xiàn)有技術(shù)的壓縮技術(shù)壓縮。分級(jí)樹(shù)型結(jié)構(gòu)基于根據(jù)狀態(tài)串行化優(yōu)化的定義明確的狀態(tài)模型。狀態(tài)模型將所包含的導(dǎo)航狀態(tài)信息安排在基于字符的信息中。由于避免了導(dǎo)航狀態(tài)信息的類型轉(zhuǎn)換,因此節(jié)省了處理時(shí)間。另外,本發(fā)明包括減少必須進(jìn)行串行化的信息的數(shù)量的其它策略。
在下面詳細(xì)描寫(xiě)的說(shuō)明書(shū)中,本發(fā)明的上述以及其它目的、特征和優(yōu)點(diǎn)將會(huì)很清楚。
在所附的權(quán)利要求書(shū)中陳述本發(fā)明的新穎的特征。然而,當(dāng)結(jié)合附圖進(jìn)行閱讀時(shí),通過(guò)參考下面對(duì)示意性實(shí)施例的詳細(xì)說(shuō)明,本發(fā)明本身以及最佳實(shí)施方式、其它目的和優(yōu)點(diǎn)將會(huì)得到很好的理解,其中圖1示出門(mén)戶的屏幕快照,其中構(gòu)成該特定視圖的導(dǎo)航狀態(tài)的多個(gè)UI部分被突出顯示;圖2A示出用于實(shí)現(xiàn)本發(fā)明的優(yōu)選門(mén)戶結(jié)構(gòu);圖2B示出在根據(jù)圖2A的門(mén)戶中根據(jù)本發(fā)明的有效處理導(dǎo)航狀態(tài)的方法的優(yōu)選實(shí)施例的交互圖;圖2C-D示出根據(jù)本發(fā)明的導(dǎo)航狀態(tài)(狀態(tài)文件)的示意性表示;圖2E示出用于如圖2D所示的狀態(tài)文件的示意性映射表;圖2F示出根據(jù)本發(fā)明的修改后的狀態(tài)文件;圖2G示出根據(jù)本發(fā)明的優(yōu)選實(shí)施例的記錄狀態(tài)修改的增量代理方法。
具體實(shí)施例方式
當(dāng)今的Web應(yīng)用變得越來(lái)越復(fù)雜,特別是在幾個(gè)組件(門(mén)戶小程序)被合并成更大的門(mén)戶應(yīng)用的門(mén)戶環(huán)境中。這引起了這樣的問(wèn)題,即,“描述”Web應(yīng)用的某個(gè)視圖的導(dǎo)航狀態(tài)變得相當(dāng)冗長(zhǎng)。例如,在門(mén)戶環(huán)境中,必須集合所有與用戶交互的portlet的導(dǎo)航狀態(tài)。
本發(fā)明提供一種用于有效地處理導(dǎo)航狀態(tài)的方法,與現(xiàn)有技術(shù)的方案相比,其具有如下的優(yōu)點(diǎn)1)減小的標(biāo)記大小將導(dǎo)航狀態(tài)編碼到每個(gè)URL中會(huì)帶來(lái)這樣的風(fēng)險(xiǎn),即,極大地增加了必須傳送到客戶機(jī)的標(biāo)記的大小。本發(fā)明將避免這種情況。
2)減小的URL長(zhǎng)度不考慮標(biāo)記大小,保持單個(gè)URL盡可能地短也是重要的。HTTP將URL的最大長(zhǎng)度限制為2KB。如果超過(guò)這個(gè)限度,則接收這個(gè)長(zhǎng)URL的代理服務(wù)器通常會(huì)將該URL縮短為2KB。本發(fā)明確保不會(huì)超過(guò)這個(gè)限度。
3)減少的URL生成時(shí)間現(xiàn)有技術(shù)的導(dǎo)航狀態(tài)處理包括提供許多URL的頁(yè)面(每個(gè)頁(yè)面幾百個(gè)URL不是異常的)。因此,生成URL所需要的處理時(shí)間對(duì)整個(gè)服務(wù)器側(cè)呈現(xiàn)時(shí)間有很大的影響,并進(jìn)而影響門(mén)戶的整體性能。本發(fā)明使處理時(shí)間保持盡可能地短,特別是將(復(fù)雜的)導(dǎo)航狀態(tài)串行化到URL中所需要的時(shí)間,因?yàn)檫@對(duì)于滿足在服務(wù)器側(cè)處理時(shí)間方面的性能要求是至關(guān)重要的。
本發(fā)明描述如何通過(guò)使用如權(quán)利要求1所述的增量編碼方法實(shí)現(xiàn)上述有關(guān)標(biāo)記大小、URL長(zhǎng)度和URL生成處理時(shí)間的優(yōu)點(diǎn)。
本發(fā)明的基本思想-增量編碼-是將URL必須編碼的導(dǎo)航狀態(tài)分為兩個(gè)部分所謂的基本導(dǎo)航狀態(tài)(最新基本導(dǎo)航狀態(tài))描述用戶當(dāng)前在其客戶機(jī)設(shè)備上看到的整個(gè)導(dǎo)航狀態(tài),所謂的增量導(dǎo)航狀態(tài)表示URL的特定語(yǔ)義。換句話說(shuō),狀態(tài)增量定義了在調(diào)用URL(例如通過(guò)點(diǎn)擊它)時(shí)應(yīng)當(dāng)進(jìn)行的狀態(tài)轉(zhuǎn)換。
注意,基本導(dǎo)航狀態(tài)通常比增量導(dǎo)航狀態(tài)更復(fù)雜,因?yàn)榛緦?dǎo)航狀態(tài)反映已經(jīng)通過(guò)以前的交互逐漸積累的整個(gè)導(dǎo)航狀態(tài)。而增量導(dǎo)航狀態(tài)僅包含一小段信息,其表示各個(gè)URL的語(yǔ)義。
基本導(dǎo)航狀態(tài)和URL專用的增量導(dǎo)航狀態(tài)之間的區(qū)別可以在URL自身中被明確地反映。例如,URL生成實(shí)現(xiàn)可以選擇將基本狀態(tài)以及增量狀態(tài)串行化到如下的URL的路徑信息中(“基本”令牌指示被串行化的基本狀態(tài),“增量”令牌指示被串行化的增量狀態(tài))http://www.myportal.com:80/portal/public/base/ajasdkjh6zuz7hjhsgiuzrakjssdfkjhsakjizutejhsdkhjjhgsdf/delta/hsdjhuh當(dāng)接收使用這樣的URL的請(qǐng)求時(shí),目標(biāo)servlet將基本導(dǎo)航狀態(tài)和增量導(dǎo)航狀態(tài)合并,以獲得整個(gè)導(dǎo)航狀態(tài)或者被請(qǐng)求的視圖(最新的新導(dǎo)航狀態(tài))。所產(chǎn)生的狀態(tài)-稱為新的最新導(dǎo)航狀態(tài)-作為在該請(qǐng)求中生成的所有URL的新的請(qǐng)求專用的基本狀態(tài)。為了避免串行化在呈現(xiàn)期間創(chuàng)建的每個(gè)URL的基本導(dǎo)航狀態(tài),基本導(dǎo)航狀態(tài)可在動(dòng)作階段之后進(jìn)行預(yù)串行化,因?yàn)樵趧?dòng)作處理完成后,基本導(dǎo)航狀態(tài)不能再被改變。
在呈現(xiàn)期間將URL寫(xiě)入標(biāo)記取決于URL是否需要是絕對(duì)的、服務(wù)器相關(guān)的或相關(guān)的。
1)絕對(duì)URL絕對(duì)URL是包含協(xié)議、主機(jī)名和端口的完整的URL。
2)服務(wù)器相關(guān)的URL服務(wù)器相關(guān)的URL以servlet上下文路徑開(kāi)始。協(xié)議、主機(jī)名和端口信息被瀏覽器暗含。
3)相關(guān)URL在相關(guān)URL的情況下,瀏覽器將URL附加到當(dāng)前請(qǐng)求URL上或者HTML基本標(biāo)簽的值上(如果有的話)。
絕對(duì)URL和服務(wù)器相關(guān)的URL需要對(duì)基本狀態(tài)和增量狀態(tài)進(jìn)行編碼。為了創(chuàng)建這種URL,被預(yù)串行化的基本狀態(tài)可以被原樣地包括在該URL中,而URL專用的增量狀態(tài)必須在將其附加到URL之前被串行化。
然而,在相關(guān)URL的常見(jiàn)情況下,在URL中包括被串行化的增量狀態(tài)是足夠的,而被預(yù)串行化的基本狀態(tài)可以保存在HTML基本標(biāo)簽中(由于其是指作為頁(yè)面的一部分的所有相關(guān)URL,因此必須每個(gè)頁(yè)面只被寫(xiě)一次)。
下面描述的標(biāo)記片段示出了相關(guān)URL的用法。當(dāng)點(diǎn)擊兩個(gè)工具欄URL中的一個(gè)時(shí),瀏覽器將相關(guān)URL(“delta/...”)附加到基本標(biāo)簽的值上。
<head>
<base href=”http://myportal.com:80/portal/public/base/sd7Sj9SPykssyOxPAIasuz!</base>
</head>
<body>
…<td class=”toolbar”valign=”middle”nowrap>
<a href=”delta/L2dJQvUasdsa!”class=”toolbar_link”>Administration</a>
</td>
<td class=”toolbar”valign=”middle”nowrap>
<a href=”delta/Ghadkj4l!”class=”toolbar_link”>Edit Page</a>
</td>
如在圖2A所描述的屏幕快照中突出顯示的,與所描述的視圖對(duì)應(yīng)的導(dǎo)航狀態(tài)包括幾個(gè)頁(yè)面單元的狀態(tài),其中這些頁(yè)面單元包括Portlet。通常,包含在所顯示的標(biāo)記中的每個(gè)URL對(duì)所有這些單元的導(dǎo)航狀態(tài)進(jìn)行編碼。另外,每個(gè)URL對(duì)狀態(tài)增量編碼,該狀態(tài)增量確定在用戶點(diǎn)擊該URL時(shí)門(mén)戶應(yīng)當(dāng)做什么。
換句話說(shuō),頁(yè)面的所有URL定義狀態(tài)轉(zhuǎn)換矩陣。轉(zhuǎn)換的目標(biāo)狀態(tài)等同于可通過(guò)將增量狀態(tài)和基本狀態(tài)合并獲得的狀態(tài)。因此,根據(jù)用戶所點(diǎn)擊的URL,狀態(tài)轉(zhuǎn)換矩陣動(dòng)態(tài)地進(jìn)行擴(kuò)展。
上表示出了簡(jiǎn)單的狀態(tài)轉(zhuǎn)換矩陣。第二列“所生成的URL”列出了在各個(gè)請(qǐng)求處理(第一列)的呈現(xiàn)階段期間所生成的所有URL的基本狀態(tài)-增量狀態(tài)對(duì)。第三列列出了可能的結(jié)果狀態(tài),其在處理各個(gè)URL時(shí)形成新的基本狀態(tài)。第一個(gè)請(qǐng)求表示轉(zhuǎn)到門(mén)戶的初始請(qǐng)求。通常,該初始請(qǐng)求由用戶將門(mén)戶URL輸入瀏覽器的地址欄中觸發(fā)。對(duì)該初始請(qǐng)求的響應(yīng)傳送該門(mén)戶上的缺省視圖。因此,所呈現(xiàn)的URL不包括基本導(dǎo)航狀態(tài)(因?yàn)槿笔?dǎo)航狀態(tài)可被該門(mén)戶暗含)。假定用戶點(diǎn)擊接下來(lái)第三個(gè)URL(表中的第三行),則新的基本導(dǎo)航狀態(tài)B3將與增量導(dǎo)航狀態(tài)D3對(duì)應(yīng)(當(dāng)沒(méi)有要求合并時(shí))。假定所點(diǎn)擊的URL沒(méi)有切換到不同的門(mén)戶頁(yè)面,則該門(mén)戶可能再次呈現(xiàn)第四個(gè)URL。然而,這一次URL包含基本導(dǎo)航狀態(tài)B3,因?yàn)椴豢紤]接著啟動(dòng)哪一個(gè)URL,該導(dǎo)航狀態(tài)應(yīng)當(dāng)被保持。隨后,用戶可能點(diǎn)擊該頁(yè)面的第四個(gè)URL(表中的第八行)以引起新的基本狀態(tài)B24等等。
優(yōu)選地,本發(fā)明在結(jié)合圖2A描述的門(mén)戶結(jié)構(gòu)中實(shí)現(xiàn)。
圖2A示出實(shí)現(xiàn)本發(fā)明的門(mén)戶結(jié)構(gòu)。
優(yōu)選地,門(mén)戶結(jié)構(gòu)包括已經(jīng)是每個(gè)現(xiàn)有技術(shù)的門(mén)戶的一部分的功能組件,和為了提供創(chuàng)造性的功能而新增加的那些組件。
現(xiàn)有技術(shù)的作為每個(gè)門(mén)戶的一部分的功能組件如下Servlet 10是前端控制器,其接收進(jìn)入的HTTP請(qǐng)求。其通常通過(guò)初始化所包含的組件來(lái)使請(qǐng)求處理引擎20準(zhǔn)備處理所接收的HTTP請(qǐng)求。然后,servlet 10委托請(qǐng)求處理引擎20處理該請(qǐng)求。
請(qǐng)求處理引擎20請(qǐng)求處理引擎20也是前端控制器的一部分,其負(fù)責(zé)控制處理進(jìn)入的請(qǐng)求。通常,它定義由幾個(gè)請(qǐng)求處理階段構(gòu)成的請(qǐng)求處理生命周期。在門(mén)戶中,請(qǐng)求必須經(jīng)過(guò)四個(gè)階段。首先,初始階段執(zhí)行請(qǐng)求專用的初始化任務(wù),接著是動(dòng)作階段,其負(fù)責(zé)認(rèn)證和動(dòng)作執(zhí)行(Portlet動(dòng)作以及命令)。在動(dòng)作階段之后,通過(guò)調(diào)用集合過(guò)程來(lái)執(zhí)行呈現(xiàn)階段。通過(guò)執(zhí)行請(qǐng)求專用的清理任務(wù),終端階段終止請(qǐng)求處理。
集合組件60在請(qǐng)求處理生命周期的呈現(xiàn)階段期間,調(diào)用集合組件60。其負(fù)責(zé)將所請(qǐng)求的頁(yè)面的布局模型轉(zhuǎn)換成表示樹(shù),并將與該表示樹(shù)對(duì)應(yīng)的標(biāo)記寫(xiě)入響應(yīng)。
認(rèn)證組件50認(rèn)證組件50負(fù)責(zé)驗(yàn)證用戶的身份。每個(gè)進(jìn)入的請(qǐng)求都必須經(jīng)過(guò)認(rèn)證。門(mén)戶2使用用戶身份以確定用戶被授權(quán)訪問(wèn)的內(nèi)容和執(zhí)行的命令。
Portlet容器30Portlet容器30提供對(duì)Portlet的統(tǒng)一訪問(wèn)。特別地,它考慮了搜集某個(gè)Portlet的標(biāo)記或執(zhí)行Portlet動(dòng)作。Portlet容器30通過(guò)Portlet API調(diào)用Portlet。
命令A(yù)PI 40命令A(yù)PI 40(應(yīng)用程序接口)向門(mén)戶專用的命令提供抽象層。特別地,它考慮了通過(guò)統(tǒng)一的接口執(zhí)行命令。命令可以用于執(zhí)行管理任務(wù),諸如創(chuàng)建和/或刪除門(mén)戶頁(yè)面,向和/或從門(mén)戶頁(yè)面增加和/或除去Porlet,在已有的頁(yè)面上設(shè)置Portlet,等等。
提供創(chuàng)造性的功能的新增加的功能組件如下導(dǎo)航狀態(tài)管理組件70導(dǎo)航狀態(tài)管理組件70是在門(mén)戶2中實(shí)現(xiàn)本發(fā)明的關(guān)鍵組件。該新組件的職責(zé)如下定義導(dǎo)航狀態(tài)的生命周期,以及提供使請(qǐng)求處理引擎20能夠?qū)⑺x的狀態(tài)處理任務(wù)結(jié)合到整個(gè)請(qǐng)求處理生命周期中的接口;定義對(duì)象模型以表示導(dǎo)航狀態(tài),以及提供考慮了讀取和寫(xiě)入/修改導(dǎo)航狀態(tài)的應(yīng)用程序接口(API);提供考慮了有效地將導(dǎo)航狀態(tài)的對(duì)象表示串行化到URL中、并且從(進(jìn)入的)URL中反串行化導(dǎo)航狀態(tài)以還原內(nèi)部的對(duì)象表示的結(jié)構(gòu)。該結(jié)構(gòu)需要包括可被URL生成組件調(diào)用以創(chuàng)建帶有導(dǎo)航狀態(tài)的URL的接口。
URL生成API 80
如名字所暗示的,URL生成API 80提供考慮了對(duì)多個(gè)使用情況創(chuàng)建URL的API。它使得程序員能夠?qū)?dǎo)航狀態(tài)和所創(chuàng)建的URL相關(guān)聯(lián)并將URL寫(xiě)入給定的目標(biāo)流。這個(gè)寫(xiě)操作包含串行化已經(jīng)與所創(chuàng)建的URL相關(guān)聯(lián)的導(dǎo)航狀態(tài)。除了通過(guò)程序創(chuàng)建URL,URL生成API通常提供一些URL標(biāo)簽以在JSP中創(chuàng)建URL。
注意,在缺省情況下,所創(chuàng)建的URL用請(qǐng)求專用的導(dǎo)航狀態(tài)初始化,以確保以前的交互的導(dǎo)航狀態(tài)不會(huì)丟失。為了確定URL的特定語(yǔ)義,該導(dǎo)航狀態(tài)可以僅對(duì)該特定的URL改變。
圖2B示出本發(fā)明的優(yōu)選實(shí)施例-稱為增量編碼-在根據(jù)圖2A的門(mén)戶中的交互圖。
增量編碼方法可以通過(guò)定義導(dǎo)航狀態(tài)的生命周期來(lái)實(shí)現(xiàn)。與特定客戶機(jī)相關(guān)的導(dǎo)航狀態(tài)的生存期是一個(gè)HTTP請(qǐng)求。圖2B示出了組件交互圖,其說(shuō)明不同的步驟如何與上面的請(qǐng)求處理生命周期對(duì)準(zhǔn)。
初始階段在初始階段期間,導(dǎo)航狀態(tài)必須從進(jìn)入的請(qǐng)求URL中解碼。狀態(tài)解碼被委托給導(dǎo)航狀態(tài)管理組件70,并包括反串行化基本導(dǎo)航狀態(tài)B和增量導(dǎo)航狀態(tài)D,在反串行化后,將增量導(dǎo)航狀態(tài)D和基本導(dǎo)航狀態(tài)B合并以獲得該請(qǐng)求的新的基本導(dǎo)航狀態(tài)B′。在初始化完成后,表示新的最新基本導(dǎo)航狀態(tài)B′的對(duì)象被傳送到動(dòng)作階段用于進(jìn)一步的處理。
動(dòng)作階段在動(dòng)作階段期間執(zhí)行商業(yè)邏輯。通過(guò)Portlet容器調(diào)用portlet動(dòng)作,并通過(guò)命令A(yù)PI調(diào)用命令(注意,為了簡(jiǎn)化,這些步驟沒(méi)有在圖中描述)。在動(dòng)作處理期間,基本狀態(tài)B′可能被修改,假定B″是這些修改的結(jié)果。
由于在動(dòng)作處理之后基本狀態(tài)B″一定不能再改變,因此在開(kāi)始呈現(xiàn)之前,基本狀態(tài)B″被串行化。假定被串行化的基本狀態(tài)B″是B″ser。
呈現(xiàn)階段在呈現(xiàn)階段一開(kāi)始,更準(zhǔn)確地,當(dāng)寫(xiě)出應(yīng)當(dāng)被顯示的頁(yè)面的HTML報(bào)頭時(shí),被預(yù)串行化的基本導(dǎo)航狀態(tài)B″ser被包括在HTML<base(基本)>標(biāo)簽中,作為絕對(duì)URL的一部分。
隨后執(zhí)行的實(shí)際呈現(xiàn)包含多個(gè)URL的生成。在圖2B中,該步驟已經(jīng)被交給生成URL的組件。實(shí)際上,這些組件根據(jù)URL是否是Portlet標(biāo)記的一部分,通過(guò)Portlet容器或者集合組件被間接地調(diào)用。對(duì)于通過(guò)URL生成API 80所創(chuàng)建的每個(gè)URL,執(zhí)行如下步驟在改變導(dǎo)航狀態(tài)以指定特定URL的語(yǔ)義之前,創(chuàng)建所謂的增量代理。增量代理B″i是封裝導(dǎo)航狀態(tài)對(duì)象B″的外殼,其記錄應(yīng)用于B″的狀態(tài)修改。
隨后,URL生成組件通過(guò)將所需要的變化(根據(jù)URL生成API的用法)應(yīng)用于所獲得的增量代理B″i來(lái)創(chuàng)建各個(gè)URL的目標(biāo)導(dǎo)航狀態(tài)。
最后,所創(chuàng)建的URL被寫(xiě)入標(biāo)記中。這包含串行化由增量代理B″i記錄的增量狀態(tài)Di,并在URL不能是相關(guān)的情況下,預(yù)先考慮被預(yù)串行化的基本狀態(tài)B″ser。
增量編碼的關(guān)鍵步驟如下在狀態(tài)解碼(初始階段)期間執(zhí)行的合并步驟確保在呈現(xiàn)期間創(chuàng)建的增量導(dǎo)航狀態(tài)是最小的增量。這意味著被串行化的增量導(dǎo)航狀態(tài)在長(zhǎng)度方面保持最小,在狀態(tài)解碼期間的合并步驟和在動(dòng)作階段末尾的基本狀態(tài)預(yù)串行化步驟確保URL可在呈現(xiàn)期間非??斓厣?。如果是非相對(duì)URL,則已經(jīng)被串行化的基本狀態(tài)可以被原樣地包括在URL中。在呈現(xiàn)階段期間創(chuàng)建相對(duì)URL使URL保持地短,從而極大地減小了所呈現(xiàn)的頁(yè)面的標(biāo)記大小,因?yàn)閁RL僅需要包含最小增量狀態(tài),而相當(dāng)長(zhǎng)的被串行化的基本狀態(tài)是包含在基本標(biāo)簽中的URL的一部分。
圖2C-D示出根據(jù)本發(fā)明的導(dǎo)航狀態(tài)(狀態(tài)文件)的示意性表示。這一節(jié)處理對(duì)象模型中的導(dǎo)航狀態(tài)的內(nèi)部表示。選擇合適的對(duì)象表示對(duì)于協(xié)調(diào)在前面幾節(jié)中描述的增量編碼方法的單個(gè)步驟是至關(guān)重要的。所推薦的設(shè)計(jì)方案是基于典型的門(mén)戶頁(yè)面包含許多URL的假定,即,導(dǎo)航狀態(tài)的對(duì)象表示必須根據(jù)URL編碼優(yōu)化。將該假定應(yīng)用于上述增量編碼方法意味著對(duì)象表示必須考慮有效地記錄和串行化增量狀態(tài)以及串行化基本狀態(tài)。因此,推薦使用分級(jí)文件模型模擬導(dǎo)航狀態(tài),該模型包含表示為字符(或Java中的字符串)的無(wú)類型狀態(tài)信息。基于字符的存儲(chǔ)器表示允許將導(dǎo)航狀態(tài)有效地串行化到URL中,因?yàn)樗苊庠诖谢^(guò)程期間進(jìn)行對(duì)象-字符串轉(zhuǎn)換所消耗的時(shí)間和CPU。
圖2C示出示意性的簡(jiǎn)化的狀態(tài)文件模型。注意,所描述的狀態(tài)文件是簡(jiǎn)化后的。該文件包含正好兩個(gè)Portlet的導(dǎo)航狀態(tài),以及頁(yè)面選擇信息和主題信息。在實(shí)際的商業(yè)情形下,門(mén)戶頁(yè)面通常集合多個(gè)導(dǎo)航控件、工具欄和portlet(達(dá)到平均20個(gè)portlet),這可能使?fàn)顟B(tài)文件更加復(fù)雜。
一種普通的面向?qū)ο蟮脑O(shè)計(jì)模式是從讀寫(xiě)接口(控制器)中分離只讀接口。因此,所使用的對(duì)象模型應(yīng)當(dāng)向狀態(tài)文件提供兩個(gè)接口。
DocumentModel接口提供對(duì)提供如下方法的狀態(tài)文件的讀訪問(wèn)(UML表示)getRoot()Node-返回狀態(tài)文件的根節(jié)點(diǎn);getChildren(parentNode)List-返回表示給定父節(jié)點(diǎn)的子節(jié)點(diǎn)的節(jié)點(diǎn)列表;getParent(nodenode)Node-返回表示給定節(jié)點(diǎn)的父節(jié)點(diǎn)的節(jié)點(diǎn)。如果給定節(jié)點(diǎn)與文件根節(jié)點(diǎn)對(duì)應(yīng),則該方法返回空(null)。
其它方法有諸如hasChildren、hasAttributes和getAttributes。
DocumentController接口提供讀寫(xiě)訪問(wèn),即,另外考慮了修改分級(jí)狀態(tài)文件。
DocumentController接口提供如下的方法insert(newNode;nextNode;parentNode)Node-在指定的位置將給定節(jié)點(diǎn)newNode插入狀態(tài)文件;remove(nodeNode)Node-從狀態(tài)文件中除去給定節(jié)點(diǎn);create(namespaceString;nameString)Node-用給定的名稱和名稱空間創(chuàng)建新的節(jié)點(diǎn)并返回所創(chuàng)建的節(jié)點(diǎn)對(duì)象。隨后,所創(chuàng)建的節(jié)點(diǎn)可以使用insert方法插入狀態(tài)分級(jí)結(jié)構(gòu)中。
其它方法如setValue、addAttribute、setAttributes、removeAttribute和clearAttributes。
所使用的接口Node模擬文件模型分級(jí)結(jié)構(gòu)中的單個(gè)節(jié)點(diǎn)。該節(jié)點(diǎn)不知道自己在分級(jí)結(jié)構(gòu)中的位置或?qū)傩?,但只知道?nèi)容。
Node接口提供下面的方法getNodeName()String-返回節(jié)點(diǎn)的限定名稱。
getNodeValue()String-返回節(jié)點(diǎn)的值。
getNamespaceURIString-返回節(jié)點(diǎn)的名稱空間URI。
該接口可以應(yīng)用于如圖2C所示的示例性狀態(tài)。
串行化基本狀態(tài)當(dāng)串行化基本導(dǎo)航狀態(tài)時(shí),整個(gè)狀態(tài)文件必須被串行化以在呈現(xiàn)期間被包括在URL或HTML基本標(biāo)簽中。所需要的串行化機(jī)制必須串行化最小的信息(所謂的“熵”),其是在接收URL時(shí)還原(反串行化)整個(gè)狀態(tài)文件所需要的。這包括文件結(jié)構(gòu),即,父子關(guān)系和文件內(nèi)容數(shù)據(jù),即,節(jié)點(diǎn)名稱、值和屬性。
為了使URL保持短,該信息必須被盡可能壓縮地編碼。文件結(jié)構(gòu)的壓縮編碼可以通過(guò)使用簡(jiǎn)單的位編碼實(shí)現(xiàn),該簡(jiǎn)單的位編碼使用給定的遍歷算法(例如深度優(yōu)先遍歷)寫(xiě)出每個(gè)單元的級(jí)別(相對(duì)于根的深度)。
然而,文件內(nèi)容數(shù)據(jù)不能被容易地串行化。僅遍歷狀態(tài)文件和寫(xiě)出構(gòu)成節(jié)點(diǎn)的全部信息會(huì)導(dǎo)致非常長(zhǎng)的串行化表單。
優(yōu)選實(shí)施例是將節(jié)點(diǎn)名稱、屬性名稱和預(yù)定義的值映射到短字符表示。為此,狀態(tài)文件的結(jié)構(gòu)必須在文件類型定義(DTD)或XML模式(XSD)中準(zhǔn)確地指定。根據(jù)該規(guī)范,可以得到映射表,其可用于狀態(tài)串行化和狀態(tài)反串行化。圖2D中所描述的文件類型定義示出了狀態(tài)文件的示例性結(jié)構(gòu)。圖2D中所描述的樹(shù)示出了這種結(jié)構(gòu)。
創(chuàng)建所需要的映射表的優(yōu)選實(shí)施例是解析DTD,并將找到的每個(gè)單元名稱、屬性和值映射到短字符表示。然而,也可以使用DTD的分級(jí)結(jié)構(gòu),并建立對(duì)應(yīng)的分級(jí)映射樹(shù)。將諸如UTF 8的字符組作為短字符表示的基礎(chǔ),可以定義非常復(fù)雜的狀態(tài)結(jié)構(gòu),而無(wú)需使用比一個(gè)字符長(zhǎng)的字符表示(因?yàn)樵撚成湫枰谔囟▎卧囊唤M子女中是唯一的)。
在圖2E中示出了與上面的狀態(tài)結(jié)構(gòu)對(duì)應(yīng)的映射樹(shù)的例子(通過(guò)縮進(jìn)模擬分級(jí)結(jié)構(gòu))。
記錄增量狀態(tài)并對(duì)其串行化假定頁(yè)面上的Portlet,其想要提供URL,該URL將該P(yáng)ortlet設(shè)置成Portlet模式“Configure”以使用戶能夠切換到考慮了配置該P(yáng)ortlet的視圖。為了創(chuàng)建這個(gè)URL,該P(yáng)ortlet使用URL生成API以請(qǐng)求Portlet模式改變URL。該URL生成API實(shí)現(xiàn)在內(nèi)部使用DocumentController接口執(zhí)行模式改變。實(shí)際上,該P(yáng)ortlet使用Portlet API以生成URL。然而,在下面該門(mén)戶將該請(qǐng)求委托給該門(mén)戶的中央U(xiǎn)RL生成API。
令該portlet的標(biāo)識(shí)符為“5”。假定主要的基本狀態(tài)是這樣的其對(duì)應(yīng)于圖2C所示的文件,結(jié)果導(dǎo)航狀態(tài)(基本+增量)類似如圖2F所示的狀態(tài)文件。portlet模式改變導(dǎo)致添加了突出顯示紅色的節(jié)點(diǎn)和邊緣。
根據(jù)增量編碼方法,所生成的URL應(yīng)僅僅反映該改變(該改變當(dāng)然不應(yīng)修改已經(jīng)在請(qǐng)求處理時(shí)被預(yù)串行化的基本狀態(tài))。
優(yōu)選實(shí)施例是得到URL生成實(shí)現(xiàn),以相信它真正修改了它在上面運(yùn)行的狀態(tài)文件。然而,在下面,各個(gè)修改操作被截取并特別處理。這可以通過(guò)使用代理模式,即,通過(guò)創(chuàng)建封裝真實(shí)狀態(tài)文件的“代理”文件容易地實(shí)現(xiàn)。
圖2G示出了代理方法。對(duì)每個(gè)應(yīng)被創(chuàng)建的URL創(chuàng)建增量代理。該增量代理也露出DocumentModel(DM)和DocumentController(DC)接口。然而,該代理實(shí)現(xiàn)僅將DocumentModel(讀取)調(diào)用委托給表示基本狀態(tài)的基本狀態(tài)文件。通過(guò)DocumentController接口進(jìn)行的修改操作被截取并記錄在內(nèi)部修改歷史中。
圖2G會(huì)導(dǎo)致以下的修改歷史●創(chuàng)建節(jié)點(diǎn)“portlet”●將具有值“5”的屬性“id”添加到所創(chuàng)建的節(jié)點(diǎn)●插入節(jié)點(diǎn)“portlet”,作為節(jié)點(diǎn)“state”的最后一個(gè)子節(jié)點(diǎn)●創(chuàng)建節(jié)點(diǎn)“portlet-mode”●設(shè)置值“configure”●插入節(jié)點(diǎn)“portlet-mode”,作為所創(chuàng)建的節(jié)點(diǎn)“portlet”的最后一個(gè)子節(jié)點(diǎn)當(dāng)將增量狀態(tài)編碼到URL中時(shí),串行化所記錄的修改操作序列就足夠了。為了獲得壓縮串行化的表單,可以使用如下的策略1.將修改操作映射到短標(biāo)識(shí)符。這可通過(guò)對(duì)修改操作進(jìn)行編號(hào)容易地進(jìn)行
2.將所包含的操作變?cè)?節(jié)點(diǎn))映射到短標(biāo)識(shí)符。
在增量所指的基本狀態(tài)文件中已經(jīng)存在的節(jié)點(diǎn)可以容易地通過(guò)整數(shù)引用,該整數(shù)例如與在使用某個(gè)遍歷算法(例如深度優(yōu)先遍歷)遍歷基本文件時(shí)的訪問(wèn)位置對(duì)應(yīng)。新的節(jié)點(diǎn)可以使用新的未分配的整數(shù)引用。由于DocumentController接口也接受空值,因此必須引入特定整數(shù)(例如“0”)來(lái)表示空。
3.重復(fù)使用基本狀態(tài)串行化的映射樹(shù)以將固定標(biāo)記(即,節(jié)點(diǎn)名稱、屬性名稱、預(yù)定義的節(jié)點(diǎn)值、預(yù)定義的屬性值)映射到短字符表示。
使用這些策略,被串行化的增量狀態(tài)可具有形式<操作>/<節(jié)點(diǎn)>/<標(biāo)記>。
在開(kāi)始時(shí),編碼的操作暗含屬于這些操作的節(jié)點(diǎn)號(hào)。例如,如果操作序列以“0”開(kāi)始(對(duì)應(yīng)于insert),則頭三個(gè)變?cè)仨殞儆谒?,因?yàn)镈ocumentController的insert方法需要三個(gè)變?cè)M瑯拥牟呗钥梢詰?yīng)用于標(biāo)記-如果是被編碼的create方法,則增量解碼可意味著有兩個(gè)指定應(yīng)被創(chuàng)建的節(jié)點(diǎn)(限定名稱和名稱空間)的標(biāo)記。
如下所示的表列出對(duì)于每個(gè)操作需要多少個(gè)變?cè)蜆?biāo)記
假定采用上面列出的映射表并將其應(yīng)用于上述修改歷史,則增量狀態(tài)被編碼如下140130/11,11,11,0,1,12,12,12,0,1/ZAA5ZBC使用例如GZIP壓縮被串行化的數(shù)據(jù)將進(jìn)一步地縮短被串行化的表單。
附圖包括說(shuō)明根據(jù)本發(fā)明的實(shí)施例的方法、裝置和計(jì)算機(jī)程序產(chǎn)品的方框圖??梢岳斫?,附圖中的每個(gè)方框以及這些方框的組合可以通過(guò)計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以被裝載到計(jì)算機(jī)或者其它可編程數(shù)據(jù)處理裝置上以產(chǎn)生一種設(shè)備,使得在計(jì)算機(jī)或者其它可編程數(shù)據(jù)處理裝置上執(zhí)行的指令創(chuàng)建用于實(shí)現(xiàn)在方框中指定的功能的裝置。這些計(jì)算機(jī)程序指令也可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)器中,其可以引導(dǎo)計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置以特定的方式運(yùn)行,使得存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)器上的指令產(chǎn)生一種包括實(shí)現(xiàn)在方框中指定的功能的指令裝置的產(chǎn)品。計(jì)算機(jī)程序指令也可以裝載到計(jì)算機(jī)或者其它可編程數(shù)據(jù)處理裝置上,以使一系列操作步驟在計(jì)算機(jī)或者其它可編程數(shù)據(jù)處理裝置上執(zhí)行,從而產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過(guò)程,使得在計(jì)算機(jī)或者其它可編程數(shù)據(jù)處理裝置上執(zhí)行的指令提供用于實(shí)現(xiàn)在方框中指定的功能的步驟。
本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)容易地知道,定義本發(fā)明的功能的程序可以采用多種形式傳遞到計(jì)算機(jī);包括但不限于(a)永久存儲(chǔ)在不可寫(xiě)存儲(chǔ)介質(zhì)(例如計(jì)算機(jī)內(nèi)的只讀存儲(chǔ)器,諸如ROM或可由計(jì)算機(jī)I/O附屬設(shè)備讀取的CD-ROM)上的信息;(b)可改變地存儲(chǔ)在可寫(xiě)存儲(chǔ)介質(zhì)(例如軟盤(pán)和硬盤(pán)驅(qū)動(dòng)器)上的信息;或者(c)通過(guò)例如使用無(wú)線、寬帶信令或廣播信令技術(shù)的通信介質(zhì)傳送到計(jì)算機(jī)的信息,上述技術(shù)包括諸如通過(guò)計(jì)算機(jī)或者經(jīng)由調(diào)制解調(diào)器的電話網(wǎng)絡(luò)的載波信令技術(shù)。
盡管通過(guò)上述示例性的實(shí)施例描述了本發(fā)明,但是本領(lǐng)域的普通技術(shù)人員可以理解,在不脫離在此所公開(kāi)的發(fā)明概念的情況下,可以對(duì)示例性的實(shí)施例進(jìn)行修改和變化。另外,盡管連同多種示意性的程序命令結(jié)構(gòu)描述了優(yōu)選實(shí)施例,但是本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到可以使用各種特定的命令結(jié)構(gòu)實(shí)現(xiàn)。
權(quán)利要求
1.一種用于在門(mén)戶中有效地對(duì)導(dǎo)航狀態(tài)編碼的方法,其中,所述門(mén)戶在服務(wù)器系統(tǒng)中運(yùn)行;其中所述服務(wù)器系統(tǒng)包括通信組件,其允許通過(guò)通信信道在所述門(mén)戶和客戶機(jī)的瀏覽器之間進(jìn)行通信;其中所述門(mén)戶確定所請(qǐng)求的門(mén)戶頁(yè)面的布局,調(diào)用屬于所述門(mén)戶頁(yè)面的各個(gè)頁(yè)面單元的呈現(xiàn),并將所述門(mén)戶頁(yè)面?zhèn)鬏數(shù)剿隹蛻魴C(jī)的瀏覽器以顯示,其中所述門(mén)戶頁(yè)面的至少一個(gè)頁(yè)面單元提供用于由所述門(mén)戶初始化呈現(xiàn)新頁(yè)面或者新頁(yè)面單元的URL功能,其中每個(gè)用戶交互通過(guò)在所述頁(yè)面單元點(diǎn)擊所述URL而在所述門(mén)戶側(cè)生成新的導(dǎo)航狀態(tài),其中最新導(dǎo)航狀態(tài)描述作為特定客戶機(jī)的所有以前的導(dǎo)航交互的結(jié)果的所述門(mén)戶的當(dāng)前視圖,其中所述至少最新導(dǎo)航狀態(tài)由所述門(mén)戶保存,其中響應(yīng)于請(qǐng)求新的門(mén)戶頁(yè)面的客戶機(jī)請(qǐng)求,所述方法的特征在于以下步驟創(chuàng)建基本導(dǎo)航狀態(tài),其描述在所述新的門(mén)戶頁(yè)面的所有URL中相同的所述最新導(dǎo)航狀態(tài)的那部分;對(duì)包括在所述新的門(mén)戶頁(yè)面中以呈現(xiàn)并且不包含在所述基本導(dǎo)航狀態(tài)中的每個(gè)URL,創(chuàng)建URL特定的增量導(dǎo)航狀態(tài),其描述在所述特定URL被調(diào)用時(shí)所述特定URL的狀態(tài)轉(zhuǎn)換;將所述基本導(dǎo)航狀態(tài)編碼到所述門(mén)戶頁(yè)面的報(bào)頭中一次;將每個(gè)URL特定的增量導(dǎo)航狀態(tài)編碼到其所分配的作為所述門(mén)戶頁(yè)面的一部分的URL中;以及生成并向所述客戶機(jī)的瀏覽器傳輸響應(yīng),其包括用于由所述客戶機(jī)的瀏覽器顯示的所述新的門(mén)戶頁(yè)面。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述基本導(dǎo)航狀態(tài)和所述增量導(dǎo)航狀態(tài)在所述門(mén)戶頁(yè)面中被編碼到串行化表單中。
3.根據(jù)權(quán)利要求2所述的方法,還包括以下步驟接收請(qǐng)求新的門(mén)戶頁(yè)面的客戶機(jī)請(qǐng)求,其包括所述基本導(dǎo)航狀態(tài)和所述增量導(dǎo)航狀態(tài);反串行化所述基本導(dǎo)航狀態(tài)和所述增量導(dǎo)航狀態(tài);將所述增量導(dǎo)航狀態(tài)和所述基本導(dǎo)航狀態(tài)合并,產(chǎn)生新的最新基本導(dǎo)航狀態(tài);在分級(jí)樹(shù)型對(duì)象表示中顯示所述新的最新基本導(dǎo)航狀態(tài)用于串行化;在開(kāi)始呈現(xiàn)所述門(mén)戶頁(yè)面之前,預(yù)串行化所述新的最新基本導(dǎo)航狀態(tài);以及將所述被預(yù)串行化的新的最新基本導(dǎo)航狀態(tài)包括在所述門(mén)戶頁(yè)面的HTML基本標(biāo)簽中。
4.根據(jù)權(quán)利要求2所述的方法,其中,所述每個(gè)URL特定的增量導(dǎo)航狀態(tài)的編碼是基于在增量代理對(duì)象上運(yùn)行的串行化方法,所述增量代理對(duì)象記錄對(duì)表示所述新的最新基本導(dǎo)航狀態(tài)的基本分級(jí)樹(shù)型對(duì)象表示的修改。
5.根據(jù)權(quán)利要求4所述的方法,其中,所述分級(jí)樹(shù)型對(duì)象表示包含由名稱、值和屬性描述的節(jié)點(diǎn),所述名稱、值和屬性都由基于字符的字符串表示。
6.根據(jù)權(quán)利要求5所述的方法,其中,所述結(jié)構(gòu)和/或所述分級(jí)樹(shù)型對(duì)象表示的所述結(jié)構(gòu)中的節(jié)點(diǎn)通過(guò)只讀編程接口讀取,并通過(guò)讀寫(xiě)編程接口修改。
7.根據(jù)權(quán)利要求2所述的方法,其中,所述URL特定的增量導(dǎo)航狀態(tài)的串行化方法在呈現(xiàn)將被提交到所述客戶機(jī)的瀏覽器的所述門(mén)戶頁(yè)面期間執(zhí)行。
8.根據(jù)權(quán)利要求2所述的方法,其中,所述串行化結(jié)果還通過(guò)一個(gè)或多個(gè)標(biāo)準(zhǔn)壓縮算法進(jìn)行壓縮。
9.根據(jù)權(quán)利要求8所述的方法,其中,所述壓縮算法是Gzip、Zip、RLE。
10.根據(jù)權(quán)利要求9所述的方法,其中,表示所述增量導(dǎo)航狀態(tài)的所述被壓縮的串行化結(jié)果被編碼到所述URL的路徑信息中。
11.一種用于在門(mén)戶中有效地對(duì)導(dǎo)航狀態(tài)編碼的系統(tǒng),其中所述門(mén)戶在所述系統(tǒng)中運(yùn)行,其中所述系統(tǒng)包括通信組件,其允許通過(guò)通信信道在所述門(mén)戶和客戶機(jī)的瀏覽器之間進(jìn)行通信,其中所述門(mén)戶確定所請(qǐng)求的門(mén)戶頁(yè)面的布局,調(diào)用屬于所述門(mén)戶頁(yè)面的各個(gè)頁(yè)面單元的呈現(xiàn),并將所述門(mén)戶頁(yè)面?zhèn)鬏數(shù)剿隹蛻魴C(jī)的瀏覽器以顯示,其中所述門(mén)戶頁(yè)面的至少一個(gè)頁(yè)面單元提供用于由所述門(mén)戶初始化呈現(xiàn)新的頁(yè)面或者新的頁(yè)面單元的URL功能,其中每個(gè)用戶交互通過(guò)在所述頁(yè)面單元點(diǎn)擊所述URL而在所述門(mén)戶側(cè)生成新的導(dǎo)航狀態(tài),其中最新導(dǎo)航狀態(tài)描述作為特定客戶機(jī)的所有以前的導(dǎo)航交互的結(jié)果的所述門(mén)戶的當(dāng)前視圖,其中所述至少最新導(dǎo)航狀態(tài)由所述門(mén)戶保存,其中,所述系統(tǒng)的特征在于以下的組件用于創(chuàng)建基本導(dǎo)航狀態(tài)的組件,所述基本導(dǎo)航狀態(tài)描述在所述新的門(mén)戶頁(yè)面的所有URL中相同的所述最新導(dǎo)航狀態(tài)的那部分;用于對(duì)包括在所述新的門(mén)戶頁(yè)面中以呈現(xiàn)并且不包含在所述基本導(dǎo)航狀態(tài)中的每個(gè)URL創(chuàng)建URL特定的增量導(dǎo)航狀態(tài)的組件,所述URL特定的增量導(dǎo)航狀態(tài)描述在所述特定URL被調(diào)用時(shí)所述特定URL的狀態(tài)轉(zhuǎn)換;用于將所述基本導(dǎo)航狀態(tài)編碼到所述門(mén)戶頁(yè)面的報(bào)頭中一次的組件;用于將每個(gè)URL特定的增量導(dǎo)航狀態(tài)編碼到其所分配的作為所述門(mén)戶頁(yè)面的一部分的URL中的組件;以及用于生成并向所述客戶機(jī)的瀏覽器傳輸響應(yīng)的組件,所述響應(yīng)包括用于由所述客戶機(jī)的瀏覽器顯示的所述新的門(mén)戶頁(yè)面。
12.根據(jù)權(quán)利要求11所述的系統(tǒng),其中,所述組件是所述門(mén)戶的一部分。
全文摘要
本發(fā)明提供有效處理導(dǎo)航狀態(tài)的方法和系統(tǒng),其將最新導(dǎo)航狀態(tài)分為基本導(dǎo)航狀態(tài)部分和增量導(dǎo)航狀態(tài)部分。基本導(dǎo)航狀態(tài)描述在所有URL中相同的最新導(dǎo)航狀態(tài)的那部分,并被編碼在將被提交到客戶機(jī)的瀏覽器的頁(yè)面標(biāo)記的報(bào)頭中。增量導(dǎo)航狀態(tài)部分描述特定URL的語(yǔ)義,并被編碼在其相關(guān)的URL中。使用這種URL的每個(gè)用戶交互使瀏覽器提交基本部分和增量部分。在服務(wù)器側(cè),基本部分和增量部分被合并以產(chǎn)生新的導(dǎo)航狀態(tài),作為呈現(xiàn)新的頁(yè)面的基礎(chǔ)。導(dǎo)航狀態(tài)被表示為分級(jí)樹(shù)型結(jié)構(gòu),其被有效地串行化并通過(guò)現(xiàn)有壓縮技術(shù)進(jìn)行壓縮。由于避免了導(dǎo)航信息的類型轉(zhuǎn)換,因此節(jié)省了處理時(shí)間。另外,本發(fā)明還包括減少必須被串行化的信息的數(shù)量的策略。
文檔編號(hào)G06F17/30GK1979485SQ200610147069
公開(kāi)日2007年6月13日 申請(qǐng)日期2006年11月14日 優(yōu)先權(quán)日2005年12月9日
發(fā)明者S·貝爾, C·洛伊厄, F·波施 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司