專利名稱:改善客戶端-小型服務(wù)程序通信的方法和系統(tǒng)的制作方法
改善客戶端-小型服務(wù)程序通信的方法和系統(tǒng) 技術(shù)領(lǐng)域本申請一般涉及客戶端-服務(wù)器通信,更具體而言,本發(fā)明涉及改善萬維網(wǎng)(Web)中客戶端-小型服務(wù)程序(servlet)通信,而不改 變現(xiàn)有通信協(xié)議也不改變客戶端,本發(fā)明尤其涉及提高這樣的小型服 務(wù)程序在小型服務(wù)程序識別到在初始客戶端網(wǎng)絡(luò)瀏覽器請求中沒有 包括的用于檢索期望信息的缺失信息的情況下的靈活性和交互性。
背景技術(shù):
術(shù)語"客戶端-服務(wù)器"指的是包括經(jīng)由通信協(xié)議(例如,HTTP) 互相通信的客戶端和服務(wù)器的網(wǎng)絡(luò)應(yīng)用構(gòu)架。Web指的是一種信息空間,其中感興趣的項(被稱為資源)由 被稱為統(tǒng)一資源標識符(URI)的全局標識符來標識。Web包括3個 標準指定如何為每個信息頁賦予能找到其的唯一"地址,,的統(tǒng)一資源 定位符(URL);指定客戶端和服務(wù)器如何互相發(fā)送信息的超文本傳 輸協(xié)議(HTTP);和超文本置標語言(HTML), 一種使得信息能 被顯示在各種設(shè)備上的信息編碼方法。Web工作如下當打開客戶端的網(wǎng)絡(luò)瀏覽器(例如,Microsoft 的Internet Explorer, Apple的Safari)時,其代表客戶端(或使用 的計算機)利用超文本傳輸協(xié)議(HTTP)通信,并進行網(wǎng)頁請求。 一旦發(fā)送了請求,客戶端的網(wǎng)絡(luò)瀏覽器計算機就等待來自服務(wù)器的超 文本數(shù)據(jù)流。當服務(wù)器獲得該請求時,其搜索所請求的文件,并且在 該文件存在的情況下,按照請求將其發(fā)送給客戶端的網(wǎng)絡(luò)瀏覽器。小型服務(wù)程序指的是在服務(wù)器上運行的程序,其等待來自客戶端 的網(wǎng)絡(luò)瀏覽器的請求,并產(chǎn)生對該請求的響應(yīng)(例如,動態(tài)產(chǎn)生的網(wǎng) 頁)。現(xiàn)有技術(shù)中的小型服務(wù)程序的工作方式如下客戶端的網(wǎng)絡(luò)瀏覽器通過調(diào)用其URL而發(fā)送HTTP請求到小型 服務(wù)程序。客戶端的網(wǎng)絡(luò)瀏覽器不必知道其正在調(diào)用小型服務(wù)程序。 調(diào)用小型服務(wù)程序就像加載任何其他網(wǎng)頁 一樣,區(qū)別在于參數(shù)可以在 請求中^皮傳遞到小型服務(wù)程序,并且服務(wù)器所發(fā)送回的響應(yīng)不是靜態(tài) 文檔、而是動態(tài)地產(chǎn)生的。請求被對小型服務(wù)程序進行主機服務(wù)的應(yīng)用服務(wù)器分析,并被傳 遞到對應(yīng)于所要求的URL的小型服務(wù)程序。請求被小型服務(wù)程序分析,最終參數(shù)被解析和解釋,并且動態(tài)地 產(chǎn)生返回到客戶端的網(wǎng)絡(luò)瀏覽器的文檔(文檔內(nèi)容可以取決于客戶端 網(wǎng)絡(luò)瀏覽器在請求中所傳遞的最終參數(shù))。所產(chǎn)生的文檔被客戶端網(wǎng)絡(luò)瀏覽器接收,并被顯示或解釋(如果 其包含一些如JavaScript的可執(zhí)4亍腳本)。小型服務(wù)程序已經(jīng)通過提供用于展示動態(tài)內(nèi)容的強大且可縮放 的框架轉(zhuǎn)換了因特網(wǎng)不是公布內(nèi)容必須定期更新的靜態(tài)文檔,小型 服務(wù)程序而是允許客戶端網(wǎng)絡(luò)瀏覽器附加參數(shù)到HTTP請求并基于 其請求獲得當前信息。如果沒有小型服務(wù)程序,就不可能創(chuàng)建其中用 戶通過其客戶端網(wǎng)絡(luò)瀏覽器與服務(wù)器交互的交互式網(wǎng)絡(luò)應(yīng)用。但是,小型服務(wù)程序具有一個限制,即在接收到請求之后,它們 不能向客戶端網(wǎng)絡(luò)瀏覽器要求缺失的信息。通過進入的請求,小型服務(wù)程序可以接收能夠影響服務(wù)器上所采 取的操作或服務(wù)器所返回的信息的參數(shù)的列表。例如,如果在因特網(wǎng) 上訂購物品,則按下"提交,,按鈕就將發(fā)送包含訂購物品列表的請求到 服務(wù)器。服務(wù)器將處理該列表(更新數(shù)據(jù)庫等等),并通常產(chǎn)生列出 所選擇的所有物品的確認頁面。但是,對于傳統(tǒng)的小型服務(wù)程序,對于在服務(wù)器上處理請求所必 需的所有參數(shù)必須被包含在客戶端網(wǎng)絡(luò)服務(wù)器所發(fā)送的初始請求中 如果小型服務(wù)程序在處理請求期間發(fā)現(xiàn)在初始請求中客戶端網(wǎng)絡(luò)服 務(wù)器沒有提供某附加信息,則沒有辦法暫停處理,向客戶端網(wǎng)絡(luò)服務(wù)器要求缺失的信息,并從中斷點恢復(fù)處理。這限制了小型服務(wù)程序的應(yīng)用領(lǐng)域客戶端網(wǎng)絡(luò)瀏覽器必須精確地知道小型服務(wù)程序需要什么信息。在其請求中,客戶端網(wǎng)絡(luò)服務(wù)器可能需要提供比小型服務(wù)程序?qū)?際需要的信息更多的信息。傳統(tǒng)的小型服務(wù)程序不能處理要求比客戶端網(wǎng)絡(luò)服務(wù)器所提供 的信息更多的信息的意外情況。如果請求不包含所有必要信息,則處 理該問題的傳統(tǒng)方法是停止該處理,返回Web頁面到客戶端網(wǎng)絡(luò)服 務(wù)器,其中該Web網(wǎng)頁替換原始網(wǎng)頁并顯示錯誤消息或者顯示要求 缺失信息并使用新信息調(diào)用相同或另一小型服務(wù)程序的新網(wǎng)頁。這并不是處理缺失信息的非常好的方法,因為在一個小型服務(wù)程 序調(diào)用中停止請求處理并在另一小型服務(wù)程序調(diào)用中繼續(xù)交易并不 是簡單的事情。此外,這可能使用戶迷惑,因為經(jīng)常再次顯示相同的但具有小注釋以通知用戶缺失什么信息的頁面,這從可用性的觀點來 看是有問題的。發(fā)明內(nèi)容本發(fā)明的目的是提供一種在不改變現(xiàn)有通信協(xié)議且不改變客戶 端的情況下改善萬維網(wǎng)(Web)中客戶端-小型服務(wù)程序通信的方法和 系統(tǒng),更具體而言,本發(fā)明的目的是在小型服務(wù)程序識別到在初始客 戶端網(wǎng)絡(luò)瀏覽器請求中沒有包括的用于檢索期望信息的缺失信息的 情況下提高這樣的小型服務(wù)程序的靈活性和交互性。本發(fā)明提供了一種在不改變現(xiàn)有通信協(xié)議也不改變客戶端的情 況下改善客戶端-小型服務(wù)程序通信的方法和系統(tǒng)。如果初始請求包括用于檢索期望信息的所有信息,則當前現(xiàn)有技 術(shù)中在客戶端和小型服務(wù)程序之間的單向通信路徑保持不變。但是, 如果小型服務(wù)程序識別到在初始客戶端網(wǎng)絡(luò)瀏覽器請求中沒有包括 的用于檢索期望信息的缺失信息,則小型服務(wù)程序通過利用所述初始 HTTP請求的HTTP響應(yīng)功能,自動地打開另一通信路徑以將缺失信息提供給小型服務(wù)程序,其中該另 一通信路徑由另 一 小型服務(wù)程序功能組件支持,并且特征為如下步驟小型服務(wù)程序產(chǎn)生腳本,其中該 腳本當在客戶端網(wǎng)絡(luò)瀏覽器處被執(zhí)行時,檢索缺失信息并調(diào)用該另一 小型服務(wù)程序功能組件;將該腳本附加到所述HTTP響應(yīng),指示其作 為部分響應(yīng);發(fā)送包括該腳本的HTTP響應(yīng)到客戶端網(wǎng)絡(luò)瀏覽器;小 型服務(wù)程序暫停初始HTTP響應(yīng)的執(zhí)行,直到該缺失信息可用;該另 一小型服務(wù)程序功能組件接收所述缺失信息,其中該缺失信息被包含 在腳本當在客戶端網(wǎng)絡(luò)瀏覽器上執(zhí)行期間所創(chuàng)建的新HTTP請求中; 向小型服務(wù)程序提供該缺失信息;以及通過小型服務(wù)程序利用缺失信 息以檢索所述HTTP響應(yīng)的其余部分并提供HTTP響應(yīng)的其余部分給 客戶端網(wǎng)絡(luò)瀏覽器用于顯示,繼續(xù)執(zhí)行初始HTTP響應(yīng)。小型服務(wù)程序具有現(xiàn)有技術(shù)中所描述的限制的原因源于HTTP 協(xié)議和網(wǎng)絡(luò)瀏覽器/服務(wù)器的設(shè)計方式HTTP是用于客戶端網(wǎng)絡(luò)瀏覽器和網(wǎng)絡(luò)服務(wù)器之間通信的協(xié)議。通常,HTTP協(xié)議允許客戶端網(wǎng)絡(luò)瀏覽器發(fā)送請求到網(wǎng)絡(luò)服務(wù)器 (或應(yīng)用服務(wù)器/小型服務(wù)程序),以發(fā)送某信息到服務(wù)器(POST請 求)或從服務(wù)器獲得文檔(GET請求)。與客戶端網(wǎng)絡(luò)瀏覽器所發(fā)送的請求的類型(GET還是POST) 無關(guān)地,服務(wù)器應(yīng)當總是處理該請求,并返回包含含有返回碼(例如 指示請求是否能夠被成功地處理)的首標以及最終結(jié)果文檔的響應(yīng)。 當請求成功時,客戶端網(wǎng)絡(luò)瀏覽器通常利用來自服務(wù)器的響應(yīng)顯示服 務(wù)器所返回的文檔,從而替換包含產(chǎn)生請求的元素的鏈接的原始頁 面。如果請求長期運行,則服務(wù)器也可以在完成整個文檔產(chǎn)生之前定 期地發(fā)送響應(yīng)文檔的部分。通過這種方法,用戶可以閱讀文檔的開始 部分,而不必等待產(chǎn)生并傳送整個文檔。這是單向通信協(xié)議僅僅預(yù)見了客戶端網(wǎng)絡(luò)瀏覽器發(fā)起的通信。 服務(wù)器通常沒有辦法發(fā)送請求到客戶端網(wǎng)絡(luò)瀏覽器。為了克服這一限制,本發(fā)明使用以下事實,即在產(chǎn)生整個響應(yīng)文檔之前,服務(wù)器可以發(fā)送"局部文檔"到客戶端網(wǎng)絡(luò)瀏覽器;以及該局 部文檔可以包含在完全傳送整個文檔之前可以由客戶端網(wǎng)絡(luò)瀏覽器 執(zhí)行的JavaScript, JavaScript是能夠被嵌入HTML頁面中并且由客 戶端網(wǎng)絡(luò)瀏覽器解釋的語言。通過本發(fā)明,提供了網(wǎng)絡(luò)客戶端和網(wǎng)絡(luò)服務(wù)器之間的雙向通信, 其工作如下(參見圖l):客戶端網(wǎng)絡(luò)瀏覽器發(fā)送HTTP請求到應(yīng)用服務(wù)器上的主小型服 務(wù)程序。通過該請求,其能夠提供小型服務(wù)程序處理該請求所需要某 些初始參數(shù);主小型服務(wù)程序接收請求10,提取和解釋最終參數(shù)并通過在服 務(wù)器側(cè)采取某些動作而開始處理該請求,從而產(chǎn)生響應(yīng)文檔20; (到現(xiàn)在為止,這是現(xiàn)有技術(shù)的小型服務(wù)程序的工作方式)。在處理請求期間,主小型服務(wù)程序發(fā)現(xiàn)某信息缺失,并且該信息 必須由請求發(fā)起者提供30。該信息可以是用戶必須輸入的某些缺失數(shù) 據(jù)、關(guān)于客戶端網(wǎng)絡(luò)瀏覽器本身或關(guān)于在處理請求期間在客戶端網(wǎng)絡(luò) 瀏覽器上所顯示的頁面中某些其他元素的狀態(tài)的某些系統(tǒng)信息。其必 須是在需要或無需用戶交互的情況下能夠通過在客戶端網(wǎng)絡(luò)瀏覽器 上執(zhí)行JavaScript而檢索的信息;主小型服務(wù)程序暫停處理請求以及生成響應(yīng),并產(chǎn)生JavaScript 40,該JavaScript 40當在客戶端網(wǎng)絡(luò)瀏覽器上運行時進行以下工作其檢索(或向用戶請求)缺失信息;其調(diào)用次小型服務(wù)程序以傳遞附加檢索的信息作為參數(shù)以及傳 遞請求該信息的小型服務(wù)程序所產(chǎn)生的密鑰;主小型服務(wù)程序?qū)⒃谇耙徊襟E中所產(chǎn)生的JavaScript附加到部 分產(chǎn)生的響應(yīng)文檔,并發(fā)送該局部響應(yīng)到客戶端網(wǎng)絡(luò)瀏覽器50;主小型服務(wù)程序通過等待來暫停其執(zhí)行,直到其在其之前已經(jīng)產(chǎn) 生的密鑰之下能夠找在網(wǎng)絡(luò)會話中或在共享存儲器中找到其所要求 的信息60;同時,客戶端網(wǎng)絡(luò)瀏覽器開始顯示從主小型服務(wù)程序所接收的局部文檔。如果一些內(nèi)容已經(jīng)產(chǎn)生,則其將被顯示。嵌入在響應(yīng)中的JavaScript被執(zhí)行j在執(zhí)行嵌入在局部響應(yīng)文檔中的JavaScript期間,客戶端網(wǎng)絡(luò) 瀏覽器檢索主小型服務(wù)程序所要求的缺失信息,將該信息和密鑰編碼 到次小型服務(wù)程序的URL中,并發(fā)送請求到該次URL。其中該信息 應(yīng)當在利用該密鑰的情況下被存儲;重要的是注意到,該第二個請求的結(jié)果在對主小型服務(wù)程序的請 求仍然在運行時不應(yīng)該替換客戶端網(wǎng)絡(luò)瀏覽器所顯示的當前文檔以 及中斷第一個請求。這可以通過將第二請求的結(jié)果重新定向到單獨幀或到頁面的特定元素(圖像,嵌入幀)、或者通過使用JavaScript API 來程序地打開HTTP請求而被實現(xiàn);次小型服務(wù)程序接收請求62,在其參數(shù)中包含具有要存儲在會 話64 (或與第一小型服務(wù)程序共享的存儲器)中的信息的密鑰/值對。 然后,其返回成功碼到客戶端網(wǎng)絡(luò)瀏覽器65??蛻舳司W(wǎng)絡(luò)瀏覽器可以 忽略次小型服務(wù)程序的響應(yīng);主小型服務(wù)程序在會話(共享存儲器)中檢測到已經(jīng)為其已經(jīng)產(chǎn) 生的密鑰存儲了值。其提取該值(70;其是處理請求所缺失的信息), 將該值從會話/共享存儲器中移除,并重新開始處理請求。處理繼續(xù),產(chǎn)生響應(yīng)文檔的其余部分。如果隨后在處理請求期間 發(fā)現(xiàn)更多信息缺失,則可以重復(fù)前面的步驟,以順序地向用戶要求更 多信息80;和最后,完成請求,并且客戶端網(wǎng)絡(luò)瀏覽器接收并顯示完整響應(yīng)文 檔80。在本發(fā)明的一個優(yōu)選實施例中,小型服務(wù)程序被實現(xiàn)為Java小 型服務(wù)程序。但是,相同方法可以被用于CGI腳本或駐留在服務(wù)器上、 并響應(yīng)于HTTP請求提供動態(tài)內(nèi)容的任何類似小型服務(wù)程序的程序。在本明的另一優(yōu)選實施例中,腳本被實現(xiàn)為Java腳本。但是, 返回到客戶端網(wǎng)絡(luò)瀏覽器以檢索缺失信息的腳本(JavaScript)可以 是能夠被嵌入網(wǎng)絡(luò)頁面中并由客戶端網(wǎng)絡(luò)瀏覽器在正在處理期間(onthe fly)執(zhí)行的任何語言(Java, Visual Basic等等)。在本發(fā)明的再一優(yōu)選實施例中,可以創(chuàng)建一般小型服務(wù)程序,其 從用戶接收非常低級別的信息(諸如鼠標或鍵事件),并對該信息進 行復(fù)雜處理。客戶端網(wǎng)絡(luò)瀏覽器僅發(fā)送關(guān)于用戶所產(chǎn)生的鼠標/鍵事件 的信息,而不知道在發(fā)送請求時小型服務(wù)程序會做什么或其對于該信 息是否將進行什么動作。小型服務(wù)程序解釋該信息,并且當其判斷在 發(fā)生特定事件時必須采取動作時,其可以向客戶端網(wǎng)絡(luò)瀏覽器要求提 供更多關(guān)于客戶端網(wǎng)絡(luò)瀏覽器側(cè)上的事件或一些其他元素的信息,并 且根據(jù)客戶端網(wǎng)絡(luò)瀏覽器所返回的信息動態(tài)處理該事件。在本發(fā)明的另 一進一步的實施例中,以復(fù)雜處理路徑使用小型服 務(wù)程序。初始請求包含足夠的信息以開始處理。在處理期間,根據(jù)參 數(shù)或服務(wù)器從后端系統(tǒng)(數(shù)據(jù)庫等等)中所檢索的數(shù)據(jù),小型服務(wù)程 序可以采取不同執(zhí)行路徑。如果在某點上用戶必須決定處理應(yīng)該如何 繼續(xù),則小型服務(wù)程序可以要求客戶端網(wǎng)絡(luò)瀏覽器提示用戶做出決 定。該決定可以影響對該請求的進一步處理,而不中斷該請求。處理 可以在單個交易中運行。在本發(fā)明的另一優(yōu)選實施例中,附加地提供次小型服務(wù)程序。次 小型服務(wù)程序接收JavaScript所發(fā)送的新HTTP請求,并且在當前 HTTP會話對象中存儲密鑰值對。在本發(fā)明的再一優(yōu)選實施例中,代替使用次小型服務(wù)程序, JavaScript可以發(fā)送更新HTTP會話的請求到主小型服務(wù)程序。但是, 在該情況中,主小型服務(wù)程序的第二實例會開始(平行于仍然正在產(chǎn) 生對主請求的響應(yīng)并等待缺失值的第一實例)。在本發(fā)明的還一優(yōu)選實施例中,HTTP協(xié)議可以由其他通信協(xié)議 替代,該其他通信協(xié)議的特征在于所述客戶端網(wǎng)絡(luò)瀏覽器(3)發(fā)起 請求以從所述小型服務(wù)程序(8)檢索信息的單向通信路徑,以及所 述小型服務(wù)程序發(fā)送至少包含指示所述請求的成功或失敗的返回碼、 并且在存在的情況下還包含所述請求的結(jié)果的響應(yīng)。
以下將參考附圖以僅僅示例的方式詳細地描述本發(fā)明的優(yōu)選實施例圖l顯示了本發(fā)明的創(chuàng)新的雙向通信路徑;圖2A顯示了實現(xiàn)創(chuàng)造性雙向通信路徑的一個優(yōu)選實施例的客戶 端-服務(wù)器構(gòu)架,和圖2B顯示的時序圖描述了給定實例中客戶端網(wǎng)絡(luò)瀏覽器、主小 型服務(wù)程序和次小型服務(wù)程序之間的通信步驟。圖2A顯示了客戶端-服務(wù)器構(gòu)架中本發(fā)明的一個優(yōu)選實施例。
具體實施方式
本發(fā)明包括客戶端1和服務(wù)器2側(cè)??蛻舳?優(yōu)選地是標準客戶 端網(wǎng)絡(luò)瀏覽器3,其能夠發(fā)送HTTP請求到網(wǎng)絡(luò)服務(wù)器,并能夠顯示 服務(wù)器所返回的HTML文檔??蛻舳司W(wǎng)絡(luò)瀏覽器3應(yīng)當能夠執(zhí)行嵌 入要顯示的文檔13中的JavaScript 12。此外,其應(yīng)當能夠在已經(jīng)傳 送整個文檔3之前顯示和執(zhí)行嵌入服務(wù)器所返回的文檔13的部分中 的JavaScript 12。這是市場上可得到的所有現(xiàn)有客戶端網(wǎng)絡(luò)瀏覽器3 的標準行為??蛇x地,服務(wù)器返回并在客戶端網(wǎng)絡(luò)瀏覽器3上顯示的文檔13 的格式不需要必須是HTML文檔13??梢允褂盟心軌蛴煽蛻舳司W(wǎng) 絡(luò)瀏覽器3顯示并且能夠包含在呈現(xiàn)期間被客戶端網(wǎng)絡(luò)瀏覽器3解釋 的腳本元素的文檔類型??梢允褂玫奈臋n的例子XML, XHTML, SVG (可縮放矢量圖形),XUL (XML用戶接口語言)等等(尤其 是所有類型的XML文檔)。嵌入文檔中的腳本12可以以除JavaScript 之外的其他語言編寫。客戶端網(wǎng)絡(luò)瀏覽器3中的JavaScript 12 (或其 標準化版本ECMA腳本)的支持是標準的。但是,可以使用能夠被 嵌入要由網(wǎng)絡(luò)瀏覽器3呈現(xiàn)的文檔13中的、以及能夠在客戶端網(wǎng)絡(luò) 瀏覽器3內(nèi)執(zhí)行以檢索有關(guān)文檔13中其他元素或有關(guān)客戶端網(wǎng)絡(luò)瀏 覽器3或用戶環(huán)境的信息的所有類型的腳本或插件程序。例子可以是Visual Basic腳本,ActiveX組件、Java小程序(applet)、或本地客 戶端網(wǎng)絡(luò)瀏覽器3插件程序。HTTP協(xié)議可以由其他通信協(xié)議代替, 該其他通信協(xié)議的特征在于所述客戶端網(wǎng)絡(luò)瀏覽器3發(fā)起請求以從 所迷小型服務(wù)程序8檢索信息的單向通信路徑,以及所述小型服務(wù)程 序8發(fā)送至少包含指示所述請求成功或失敗的返回碼、并且在存在的 情況下還包含所述請求的結(jié)果的響應(yīng)。月良務(wù)器側(cè)2優(yōu)選為應(yīng)用服務(wù)器4 (例如,諸如WebSphere或 Tomcat的J2EE服務(wù)器),其優(yōu)選具有小型服務(wù)程序容件6。在本發(fā) 明的優(yōu)選實施例中,兩個小型服務(wù)程序-主小型服務(wù)程序8和次小型 服務(wù)程序10 —被安裝在該應(yīng)用服務(wù)器4中。應(yīng)用服務(wù)器4不必是J2EE服務(wù)器。可以使用能夠動態(tài)響應(yīng)來自 客戶端網(wǎng)絡(luò)瀏覽器3的HTTP請求的任何種類的服務(wù)器。可以被用于 代替J2EE應(yīng)用服務(wù)器的技術(shù)實例有Microsoft .Net、或能夠執(zhí)行 CGI腳本以顯示動態(tài)內(nèi)容的筒單網(wǎng)絡(luò)服務(wù)器。小型服務(wù)程序8、 10和 小型服務(wù)程序容件6可以由諸如ASP、 PHP或CGI腳本這樣的類似 技術(shù)替代。本發(fā)明在以其優(yōu)選實施例實現(xiàn)時工作如下(參見圖2A的箭頭) 在客戶端側(cè)1,客戶端網(wǎng)絡(luò)瀏覽器3發(fā)送請求到主小型服務(wù)程序 (1)。主小型服務(wù)程序8是響應(yīng)于初始請求執(zhí)行對于產(chǎn)生要發(fā)送到 客戶端網(wǎng)絡(luò)瀏覽器3的文檔-頁面13所必需的邏輯的小型服務(wù)程序。 主小型服務(wù)程序8接收該請求,讀取隨著請求傳遞的最終參數(shù),并開 始產(chǎn)生文檔13以將其返回到客戶端網(wǎng)絡(luò)瀏覽器3。隨著請求傳遞的參 數(shù)可以影響文檔13的產(chǎn)生。本發(fā)明并不依賴于主小型服務(wù)程序8為 了產(chǎn)生響應(yīng)文檔13而使用的邏輯。在產(chǎn)生響應(yīng)過程中的某些點處,主小型服務(wù)程序8需要客戶端網(wǎng) 絡(luò)瀏覽器3在請求中還沒有(作為參數(shù))提供、但可以很容易地通過 在客戶端網(wǎng)絡(luò)瀏覽器3中的客戶端側(cè)1上執(zhí)行JavaScript 12而被檢索 的附加信息。主小型服務(wù)程序8將JavaScript 12插入其已經(jīng)開始產(chǎn)生的文檔13中。在由客戶端網(wǎng)絡(luò)瀏覽器3執(zhí)行時,該腳本12檢索缺失信息, 發(fā)送HTTP請求到次小型服務(wù)程序10,其中該請求包含主小型服務(wù) 程序8所產(chǎn)生的密鑰(密鑰可以是隨機產(chǎn)生的任何唯一字符串)以及 在前一步驟中所檢索的值作為參數(shù)。一旦腳本12已經(jīng)被產(chǎn)生并被插入局部響應(yīng)中,主小型服務(wù)程序 8就刷新其緩沖器,使得響應(yīng)文檔13的到此時為止已經(jīng)產(chǎn)生的部分被 立刻傳送到客戶端網(wǎng)絡(luò)瀏覽器(2)。到網(wǎng)絡(luò)瀏覽器3的通信信道不 被關(guān)閉。被發(fā)送到客戶端網(wǎng)絡(luò)瀏覽器3的HTTP響應(yīng)的首標指示響應(yīng) 使用"分塊傳輸編碼(chunked transfer coding ),,,如HTTP 1,1中所 定義的。該編碼意味著響應(yīng)不是在一個片塊中到來的,而是在一系列 塊中到來的,并且客戶端網(wǎng)絡(luò)瀏覽器3應(yīng)當?shù)却聝?nèi)容,直到服務(wù)器 關(guān)閉連接。一旦部分產(chǎn)生的文檔13 (包含文檔起始部分和檢索缺失信息的 JavaScript 12的第一塊)被傳送到客戶端網(wǎng)絡(luò)瀏覽器3,在等待其余 文檔的同時,客戶端網(wǎng)絡(luò)瀏覽器3開始呈現(xiàn)到目前為止已經(jīng)接收的文 檔13的部分,并執(zhí)行被嵌入的腳本12。該腳本12的執(zhí)行檢索缺失值,并發(fā)送另一HTTP請求到次小型 服務(wù)程序10。該請求含有密鑰和在前一步驟(3)中檢索的值作為參 數(shù)。在第1個HTTP請求的響應(yīng)正被加載期間發(fā)送附加HTTP請求 到不同URL的能力對于網(wǎng)絡(luò)瀏覽器3來說是通常的行為。如果沒有 該能力,則在完全加載整個文檔之前,客戶端網(wǎng)絡(luò)瀏覽器3將例如不 能顯示包含在正被加載的長文檔的開始部分中的圖像。次小型服務(wù)程序10接收JavaScript 12所發(fā)送的HTTP請求,解 碼在請求的參數(shù)中所包括的密鑰和值,并將該密鑰值對存儲在當前 HTTP會話對象中(4 ) 。 HTTP會話是存儲有關(guān)一個客戶端1與服務(wù) 器2之間當前會話的信息的對象。每次接收到請求時,會話對象被傳 遞到小型服務(wù)程序。如果相同客戶端網(wǎng)絡(luò)瀏覽器3發(fā)送HTTP請求到 包含在相同小型服務(wù)程序容件6中和相同網(wǎng)絡(luò)應(yīng)用中的幾個小型服務(wù)程序8,則相同會話對象將被傳遞到不同小型服務(wù)程序8。小型服務(wù) 程序8可以在會話對象中讀寫值(該值被存儲在密鑰之下,該密鑰隨 后可以被用來檢索該值)。使用HTTP會話是在J2EE中在不同小型 服務(wù)程序8之間傳遞值的普通方法。不使用次小型JL務(wù)程序10, JavaScript 12可以發(fā)送更新HTTP 會話的請求到主小型服務(wù)程序8。但是在該情況下,主小型服務(wù)程序 8的第二實例將開始(平行于仍然正在產(chǎn)生對于主請求的響應(yīng)并等待 缺失值的第1實例)。主小型服務(wù)程序8然后將需要測試何時接收請 求,該請求是否正要求文檔或者該請求是否提供處理文檔請求(主請 求)的小型服務(wù)程序的其他實例已經(jīng)請求的附加信息。技術(shù)上,這通 過測試隨請求傳遞的參數(shù)來實現(xiàn)。如果特定參數(shù)被包含在請求中,則 主小型服務(wù)程序8將知道其應(yīng)當以包含在請求的其他參數(shù)中的密鑰/ 值對來更新HTTP會話。在任何其他情況中,主小型服務(wù)程序8應(yīng)當 產(chǎn)生響應(yīng)文檔13。通過這樣做,主小型服務(wù)程序8根據(jù)請求的參數(shù)將 具有2個不同的邏輯。這與具有2個不同小型服務(wù)程序完全相同,每 個小型服務(wù)程序執(zhí)行單個邏輯。次小型服務(wù)程序10不需要在HTTP會話中存儲第2個請求 (JavaScript所發(fā)送的請求)所傳遞的附加值以使主小型服務(wù)程序8 知道。其他方法可以存儲該值在小型服務(wù)程序容件6的Java虛擬機 的系統(tǒng)屬性中,或者使用其他共享存儲器機制(根據(jù)應(yīng)用服務(wù)器所使 用的技術(shù))。另一可能性是使次小型服務(wù)程序10存儲該值在服務(wù)器 的本地磁盤上的文件中,并且使主小型服務(wù)程序8讀取相同文件。一旦主小型服務(wù)程序8在共享存儲器中(在HTTP會話中)發(fā) 現(xiàn)所請求的值,主小型服務(wù)程序8就醒來,并繼續(xù)產(chǎn)生文檔13。使用 缺失信息,文檔現(xiàn)在能夠被完全產(chǎn)生,并且文檔的其余部分被傳送到 瀏覽器(5)-在最后步驟期間,主小型服務(wù)程序8已經(jīng)定期地檢查 了 HTTP會話的內(nèi)容以查看值是否可得到。每次它檢查會話并且值不 可得到時,其休眠一小段時間,并且再次檢查。一旦小型服務(wù)程序關(guān)閉與網(wǎng)絡(luò)瀏覽器3的連接(這在小型服務(wù)程序的doGet(...)或doPost(…)方法返回時自動執(zhí)行),客戶端網(wǎng)絡(luò)瀏覽 器就知道整個文檔已經(jīng)被下載了 。小型服務(wù)程序8可能需要來自客戶端網(wǎng)絡(luò)瀏覽器的不止一個附 加信息以處理請求??梢酝ㄟ^在處理請求期間重復(fù)這里所述的步驟多 次、或者通過產(chǎn)生一個在一個HTTP請求中檢索和傳送所有缺失信息 到次小型服務(wù)程序10的JavaScript 12來實現(xiàn)多個缺失信息的檢索。 次小型服務(wù)程序10于是必須解碼來自JavaScript所發(fā)送的輔助請求 的多個密鑰/值對,并相應(yīng)地更新HTTP會話。利用這種方法,在客戶端網(wǎng)絡(luò)瀏覽器3已經(jīng)提交其初始請求之 后,以及在處理請求期間,小型服務(wù)程序可以向客戶端網(wǎng)絡(luò)瀏覽器3 請求附加信息。請求的處理不必像沒有使用本發(fā)明那樣被中止并重新 從頭開始??蛻舳司W(wǎng)絡(luò)瀏覽器3中和應(yīng)用服務(wù)器4中不需要修改。主小型服 務(wù)程序8和次小型服務(wù)程序10分別是接收HTTP請求并返回單個響 應(yīng)到請求始發(fā)者的普通小型服務(wù)程序,如HTTP協(xié)議中所定義的那 樣。協(xié)議不被修改??蛻舳司W(wǎng)絡(luò)瀏覽器3和服務(wù)器2之間的所有通信 由客戶端網(wǎng)絡(luò)瀏覽器驅(qū)動(如HTTP協(xié)議所預(yù)見的那樣)。僅僅這兩個小型服務(wù)程序8、 10之間的協(xié)作以及小型服務(wù)程序能 夠通過將其響應(yīng)文檔分塊并將JavaScript命令嵌入其中來遠程控制客 戶端網(wǎng)絡(luò)瀏覽器3這一事實使服務(wù)器和客戶端網(wǎng)絡(luò)瀏覽器之間的雙向 通信成為可能。以下,一個簡單的實例顯示本發(fā)明實際上如何工作(參見圖2B)。 假設(shè)存在從客戶端網(wǎng)絡(luò)瀏覽器3接收請求并以取決于發(fā)送請求 的客戶端網(wǎng)絡(luò)瀏覽器3的一些屬性的方式產(chǎn)生一些內(nèi)容的主小型服務(wù) 程序8。進一步假設(shè),主小型服務(wù)程序8需要知道發(fā)送請求的客戶端 網(wǎng)絡(luò)瀏覽器窗口的寬度,并且該信息并沒有包括在發(fā)送給主小型服務(wù) 程序8的初始請求中。客戶端網(wǎng)絡(luò)瀏覽器窗口的寬度是可以通過在客戶端網(wǎng)絡(luò)瀏覽器 3中執(zhí)行JavaScript表達"window.outerWidth,,而4艮容易詢問的屬性。該示例的主小型服務(wù)程序8和次小型服務(wù)程序10的源代碼在本 說明書最后的附錄中。注意到,次小型服務(wù)程序獨立于主小型服務(wù)程 序的邏輯,并且可以由實現(xiàn)不同邏輯的幾個"主"小型服務(wù)程序重新使 用或共享。重要的是注意到,該第2個請求的結(jié)果-在對于主小型服務(wù)程 序的請求仍然在運行的同時-不應(yīng)當替換客戶端網(wǎng)絡(luò)瀏覽器所顯示 的當前文檔以及中斷第l個請求。這可以通過將第二請求的結(jié)果重定 向到單獨幀或頁面的特定元素(圖像,嵌入幀)、或者通過使用 JavaScript API來程序地打開HTTP請求來實現(xiàn);次小型服務(wù)程序IO接收在其參數(shù)中包含具有要存儲在會話(或 與第l個小型服務(wù)程序共享的存儲器)中的信息的密鑰/值對的請求。 然后,其返回成功碼到網(wǎng)絡(luò)瀏覽器3。網(wǎng)絡(luò)瀏覽器3可以忽略次小型 服務(wù)程序10的響應(yīng);主小型服務(wù)程序8在會話(共享存儲器)中檢測到已經(jīng)為其已經(jīng) 產(chǎn)生的密鑰存儲了值。其提取該值(該值是處理請求所缺失的信息), 將其從會話/共享存儲器中移除,并恢復(fù)處理該請求;處理繼續(xù),響應(yīng)文檔的其余部分被產(chǎn)生。如果后來在處理請求期 間發(fā)現(xiàn)有更多的信息缺失,則可以重復(fù)前幾個步驟,以順序地向用戶 要求更多信息。最后,請求被完成,并且客戶端網(wǎng)絡(luò)瀏覽器3接收并顯示完整響 應(yīng)文檔。圖2B顯示了根據(jù)本發(fā)明在該示例中在客戶端網(wǎng)絡(luò)瀏覽器和2個 小型服務(wù)程序之間發(fā)生的行動和通信。(1 )客戶端網(wǎng)絡(luò)瀏覽器通過向服務(wù)器2發(fā)送HTTP GET命4K可 選地也可以使用POST命令)來發(fā)送初始請求到主小型服務(wù)程序8, 從而請求主小型服務(wù)程序8的URL。該請求也可以包括在產(chǎn)生響應(yīng)文 檔期間主小型服務(wù)程序8可能使用的附加參數(shù)。在該示例中,沒有參 數(shù)。(2)主小型服務(wù)程序8通過寫文檔的開始部分直到需要缺失信息的點而開始產(chǎn)生響應(yīng)文檔(客戶端網(wǎng)絡(luò)瀏覽器的寬度)<html> <head> </head> <body>在要求缺失值之前小型服務(wù)程序所產(chǎn)生的 一些內(nèi)容<卩>, 在這點,為了寫文檔的其余部分,主小型服務(wù)程序8需要缺失信 息。其產(chǎn)生在客戶端網(wǎng)絡(luò)瀏覽器已經(jīng)將其發(fā)送到次主小型服務(wù)程序10 之后將被用來在HTTP會話中存儲和尋找缺失值的唯一密鑰,并將 JavaScript附加到所產(chǎn)生的內(nèi)容,其中JavaScript在被客戶端網(wǎng)絡(luò)瀏 覽器執(zhí)行時將檢索該值并將其與密鑰一起發(fā)送到次小型服務(wù)程序10。 這里是腳本在本例中看起來象什么第2行檢索網(wǎng)絡(luò)瀏覽器3 窗口的寬度,隨后的行使網(wǎng)絡(luò)瀏覽器3打開HTTP請求到次小型服務(wù) 程序10,從而將密鑰(這里,密鑰的隨機值是key_112108)和檢索值(這里被包含在變量"value"中)作為參數(shù)傳遞。<script language JavaScript",/ax value = window . outerWicth;var httpReq = new XMLHttpRequest();httpRoq.open("GET","SecondsryServlet key=key—112108&value=' lue, true),' httpReq.send(null); </script>(3) 通過刷新主小型服務(wù)程序8的緩沖器,局部文檔(到目前器3。當執(zhí)行此時,應(yīng)用服務(wù)器改變HTTP響應(yīng)的編碼為"分塊",這 向客戶端網(wǎng)絡(luò)瀏覽器3表明內(nèi)容將以幾個分塊片段被傳輸。圖2顯示 了此時傳輸?shù)娇蛻舳司W(wǎng)絡(luò)瀏覽器的文檔的內(nèi)容。(4) 主小型服務(wù)程序8暫停其執(zhí)行,直到其在HTTP會話中發(fā) 現(xiàn)在其已經(jīng)在步驟(2)中產(chǎn)生的密鑰下存儲的值。技術(shù)上,其暫停 其執(zhí)行,并以規(guī)則的間隔檢查該值是否可得到。 一旦發(fā)現(xiàn)該值,其就恢復(fù)其執(zhí)行。(5) 同時,客戶端網(wǎng)絡(luò)瀏覽器3已經(jīng)接收到主小型服務(wù)程序8 所發(fā)送的文檔的笫l個塊。其顯示到目前為止包含在文檔中的可顯示 內(nèi)容,并執(zhí)行嵌入其中的JavaScript,注意,JavaScript根本不影響 文檔的內(nèi)容。(6) 在執(zhí)行JavaScript時,客戶端網(wǎng)絡(luò)瀏覽器3檢索其窗口的 寬度(這里是454個象素),并發(fā)送HTTP GET請求到次小型服務(wù) 程序10。(替換地,也可以使用POST請求)。該請求包含之前產(chǎn)生的密鑰(key_112108)和檢索的值(454)作為參數(shù)。GET SecondaryServlet key=key—112108&value=d(7) 次小型服務(wù)程序IO接收該請求,從其參數(shù)中解碼出密鑰和 值,并在HTTP會話中將值(454)放在密鑰(key一112108)下面。 然后,其立刻返回成功碼(HTTP碼200) (8),(8 )以規(guī)則間隔檢查HTTP會話中存儲在密鑰"keyJ12108"之 下的值的主小型服務(wù)程序8發(fā)現(xiàn)該值。其將該值從會話中移除,并利 用其已經(jīng)檢索的值而恢復(fù)文檔的產(chǎn)生。(在該示例中,值被簡單地寫 入文本中。在更復(fù)雜的例子中,其可以被用來實現(xiàn)文檔的更復(fù)雜的布 局)。文檔的第2個分塊部分被發(fā)送到客戶端網(wǎng)絡(luò)瀏覽器3:完成頁面的產(chǎn)生寬度=454</body></html>(9) 文檔的第2個分塊部分被發(fā)送到客戶端網(wǎng)絡(luò)瀏覽器,并且 主小型服務(wù)程序8關(guān)閉與客戶端網(wǎng)絡(luò)瀏覽器3的通信信道,從而指示 后面沒有更多內(nèi)容。(10) 客戶端網(wǎng)絡(luò)瀏覽器3顯示文檔的其余部分。 更詳細的執(zhí)行圖解參見圖1。有關(guān)該示例的完整源代碼,參見本說明書末尾處的附錄。Source Main Servletimport java.io*"import: javax,Ser、f丄et; .http,public class Ma丄nServiet extends〖'tttpServl@t丄mplement:s Serviet f*隱-of the secondary Senrlet storing r—he i:eqiiestsd Imy/vaUe pairs * in th徑HTTP sessionprivate finai static String SECONDARY—SE;肌ST—, = "SscondaryServiet"public: void doGet (HttpSetrvletRequest req, HttpServletResponse resp) thr。ws ServletE乂c:eption, IOException { resp. setContencType ("text/html,' chsrset-ISO—SS59—4',),' HttpSessior』session = req,[Session (),' Printerout: - resp.ge,ricer ()'■ out .p2rin"rvr'<htwi>'"; out.print in(" <head〉">; out ^pi:int:in (" </heaci>") ^// Starls the generation of the response"Some content prcxJuced b:Y' t二He Servier cnsfore the m復(fù)ssir^ value is ask3d
" 〃 (,..>// ai: soip.^ point during tte processing of the answer, U:e Servlet noet.二es ds仁some ir-fcrn^tio—n are m丄ssing〃 Suspends the genemion of r》e response.// Asks the client/s web—browser's to ret:risve t::',e missing value and send丄丄to// th經(jīng)server thi'ough the seccmda^y Servlet// The 3rd parameter is the JavaScript expression retrieving/■/■ the value when executed x'n仁lie browser.// In this ex柳ple we ask the client's web-browsei: fosr the width of the browser window// When this加ethod returns, the iocal variable ',vsl.u錄',contsins the requested v.aiu設(shè)〃 Cont'irw the generation of the response 〃 (.'■}out.printinr'Blnish the generation of the page: Widths" + value>; ou仁,pr丄ntlrt ("</html>"); /"* Generates a unique K.ey that can be used to store the missing value in the Web sessionprivate Sr—i:ing gonersteKey () {return "key " + System.eurrentTimeMiJUis ()/"* Requests the client:'s web—browser to provide the Se-rviet a missing value,* This methods generates and transmit a. JavaScript to foe interpreted* by the client's web-browser. This JavaScript retrieves the. missing va丄ue* by executing s JavaScript expression given parameter,* and sends a request: Co the secondary Serv.let that store* the r^仁ri^ved. ,/8丄ue in the HTTP session, to chat it is accessi&丄e* for the mai,n Servlet.* Nots that, t'nls method will block and suspend the mai:n Secviet, un:il the missing value h&s been returneci by the client's web'-teows^ir.<formula>formula see original document page 23</formula>out .printLn (" </scr-Lp〔〉");〃 F.U:shes tlie buffej:' of仁he Sw由C, -so thst the JavaScript retrieving the// missing value is transmj丄tecl and exeeuted i.mmediait^iy by the client's// Suspends the execu仁丄or- the main Serv2ec unL丄i a vslue can be four-d // in the HTTP session under: the key defined previously -Object value - session.getAttribi3t:投(key) while (vaius = null)( try {Thr^(i,si餘p (雄}1valuo session ,getAt'.tr丄bu.t:e (key),'// ,w that the value has been extracted, remove its key/vslue pair from 〃 the session, to avoid m,ory leaks and adlow the s她e :key to be reusedsession. r柳oveAttribute (key);jretum value,'Soiarce 2: Secondary sei:vietimport java, io. *,' import javax-serviet—*; import javax, serviet. http', *,** Secondary Ser"let upd-sting the HTTP 'session with key/yaiug pairs. The key/vsiue pairs to store are e,OEit:ained丄n the inccmUng requests* under the keys "key" and "value".* For example a request containing the jparamet經(jīng)rs* will store the "myVa].ue" unci切r the key "myKey" in the HTTP session, public class SecortdaryServiet: extends HttpS暨rvlet iiDp;L咖ents Servlet, {(javax.se:L'\ iet*http.Ht.tpServ.etR q[iiest:, , setvaet. http-HttpSei:v.I.etRespong松)public void doGet (HttpServletRequest r叫 HttpServletHesponse resp) throws ServletExceptiort, IOExcept丄on (// Extracts from ths request coning from the browser ths key/value pair //to store in the HTTP session String key兩req. 90七^^1^61:0>1,,)/ String value ra req.getParametei: ("value"),' if (key !飯null) {// Store this key/./alue pa丄r in the HTlT sessionreq .getSession (i , setALtribute (key, value),'
權(quán)利要求
1.一種在不改變現(xiàn)有通信協(xié)議以及客戶端的情況下改善客戶端(1)-小型服務(wù)程序(2)通信的方法,其中所述通信協(xié)議的特征在于客戶端(1)發(fā)起從小型服務(wù)程序(8)檢索信息的請求的單向通信路徑,以及所述小型服務(wù)程序(8)發(fā)送至少包含指示所述請求的成功或失敗的返回碼的響應(yīng),并且在存在的情況下還包括所述請求的結(jié)果,其中在所述服務(wù)器側(cè),所述方法的特征在于以下步驟如果所述小型服務(wù)程序(8)識別到在所述初始請求中沒有被包括用于提供完整響應(yīng)的缺失信息,則通過利用所述初始請求的響應(yīng)功能,自動地打開從所述小型服務(wù)程序(8)經(jīng)由所述客戶端網(wǎng)絡(luò)瀏覽器到所述小型服務(wù)程序(8)的另一通信路徑,用于提供所述缺失信息到所述小型服務(wù)程序(8),其中所述另一通信路徑由另一小型服務(wù)程序功能組件(10)支持,并且其特征在于以下步驟所述小型服務(wù)程序(8)產(chǎn)生腳本(12),其中所述腳本當在客戶端網(wǎng)絡(luò)瀏覽器處執(zhí)行時檢索所述缺失信息并調(diào)用所述另一小型服務(wù)程序功能組件(10),將所述腳本(12)附加到所述響應(yīng),從而指示其為局部響應(yīng),發(fā)送包括所述腳本(12)的響應(yīng)到客戶端網(wǎng)絡(luò)瀏覽器,暫停所述小型服務(wù)程序(8)對所述初始響應(yīng)的執(zhí)行,直到所述缺失信息可用為止;所述另一小型服務(wù)程序功能組件(10)接收所述缺失信息,其中所述缺失信息被包含在所述腳本(12)當在所述客戶端網(wǎng)絡(luò)瀏覽器上執(zhí)行期間所創(chuàng)建的新請求中,提供所述缺失信息到所述小型服務(wù)程序(8),以及所述小型服務(wù)程序(8)利用所述缺失信息繼續(xù)執(zhí)行所述初始響應(yīng),以檢索所述響應(yīng)的其余部分,并提供所述響應(yīng)的所述其余部分到所述客戶端網(wǎng)絡(luò)瀏覽器用于顯示。
2. 根據(jù)權(quán)利要求l的方法,其中所述通信協(xié)議是HTTP協(xié)議。
3. 根據(jù)權(quán)利要求1或2的方法,其中所述另一小型服務(wù)程序功 能組件(10)被實現(xiàn)為單獨的次小型服務(wù)程序。
4. 根據(jù)權(quán)利要求3的方法,其中所述次小型服務(wù)程序(10)接 收所述腳本(12 )所發(fā)送的新HTTP請求,并將缺失信息存儲在這兩 個小型服務(wù)程序(8, 10)所使用的共享存儲器中。
5. 根據(jù)權(quán)利要求3的方法,其中所述缺失信息被所述次小型服 務(wù)程序(10)存儲在所述客戶端(1)與所述服務(wù)器(2)之間的當前 HTTP會話對象中,并被傳遞到所述小型服務(wù)程序。
6. 根據(jù)權(quán)利要求1或2的方法,其中所述另一小型服務(wù)程序功 能組件(10)是所述小型服務(wù)程序(8)的一部分,并且所述小型服 務(wù)程序?qū)λ鲂翲TTP請求的接收自動地開始所迷小型服務(wù)程序的 第二實例,并且以所述缺失信息更新當前HTTP會話對象。
7. 根據(jù)權(quán)利要求1或2的方法, 本(12)的執(zhí)行自動地檢索缺失信息, 失信息。
8. 根據(jù)權(quán)利要求1或2的方蜂, 實現(xiàn)為Java小型服務(wù)程序。
9. 根據(jù)權(quán)利要求1或2的方法, Java腳本。其中所述網(wǎng)絡(luò)瀏覽器對所述腳 或通過附加用戶輸入來檢索缺其中所述小型服務(wù)程序(8)被其中所述腳本(12)被實現(xiàn)為
10.根據(jù)權(quán)利要求1或2的方法,其中所述腳本(12)包含具有由所述小型服務(wù)程序所產(chǎn)生的分配的密鑰(密鑰/值對)的缺失信息 (值)。
11. 一種客戶端-服務(wù)器構(gòu)架中使用根據(jù)權(quán)利要求1到9之一的 方法的服務(wù)器。
12. —種客戶端-服務(wù)器構(gòu)架中具有至少一個用于檢索信息的小 型服務(wù)程序(8)的服務(wù)器(1),其中所述客戶端-服務(wù)器構(gòu)架使用 通信協(xié)議,其中所述通信協(xié)議的特征在于所述客戶端網(wǎng)絡(luò)瀏覽器(3 ) 發(fā)起從所述小型服務(wù)程序(8)檢索信息的請求的單向通信路徑,以 及所述小型服務(wù)程序發(fā)送至少包含指示所述請求的成功或失敗的返 回碼的響應(yīng),并且在存在的情況下還包括所述請求的結(jié)果,其中服務(wù) 器側(cè)的特征在于a) 識別裝置(8),用于識別在所述初始請求中沒有包括用于提 供完整響應(yīng)的缺失信息,b) 打開裝置(8),用于如果所述識別裝置識別到缺失信息,則 利用所述初始請求的響應(yīng)功能,自動地打開從所述小型服務(wù)程序經(jīng)由 所述客戶端網(wǎng)絡(luò)瀏覽器到所述小型服務(wù)程序的另 一通信路徑,用于提 供所述缺失信息到所述小型服務(wù)程序,其中所述另一通信路徑的特征 在于進一步的裝置c) 生成裝置(8),用于由所述小型服務(wù)程序產(chǎn)生腳本,其中所 述腳本當在客戶端網(wǎng)絡(luò)瀏覽器處執(zhí)行時檢索所述缺失信息并調(diào)用所 述另 一 小型服務(wù)程序功能組件,d) 附加裝置(8),用于將所述腳本附加到所述響應(yīng),以指示其 為局部響應(yīng),e) 發(fā)送裝置(8),用于發(fā)送包括所述腳本的響應(yīng)到所述客戶端 網(wǎng)絡(luò)瀏覽器,f) 暫停裝置(8),用于暫停所述小型服務(wù)程序?qū)λ龀跏柬憫?yīng) 的執(zhí)行,直到所述缺失信息可用,g) 接收裝置(8),用于接收缺失信息,其中所述缺失信息被包 含在所述腳本(12)當在所述客戶端網(wǎng)絡(luò)瀏覽器上執(zhí)行期間所創(chuàng)建的 新請求中,h) 提供裝置(8 ),用于提供所述缺失信息到所述小型服務(wù)程序 (8),以及i) 繼續(xù)執(zhí)行裝置(8),用于利用所述缺失信息繼續(xù)所述小型服 務(wù)程序?qū)λ龀跏柬憫?yīng)的執(zhí)行,以檢索所述響應(yīng)的其余部分,并提供 所述響應(yīng)的所述其余部分到所述客戶端網(wǎng)絡(luò)瀏覽器用于顯示。
13. 根據(jù)權(quán)利要求12的系統(tǒng),其中所述通信協(xié)議是HTTP。
14. 根據(jù)權(quán)利要求12或13的系統(tǒng),其中所述裝置a) - f)和h) 在所述小型服務(wù)程序中實現(xiàn),并且所述裝置g) -i)在另一單獨的小 型服務(wù)程序中實現(xiàn)。
15. 根據(jù)權(quán)利要求12或13的系統(tǒng),其中所述裝置a) -i)在單 個小型服務(wù)程序中實現(xiàn)。
16. —種計算機程序產(chǎn)品,包括用于執(zhí)行根據(jù)權(quán)利要求1到9 所述的方法的計算機可執(zhí)行指令。
全文摘要
本發(fā)明提供了一種用于改善萬維網(wǎng)(Web)中客戶端-小型服務(wù)程序通信的方法和系統(tǒng),而不改變現(xiàn)有通信協(xié)議也不改變客戶端。如果初始請求包括用于檢索期望信息的所有信息,則現(xiàn)有技術(shù)中在客戶端和小型服務(wù)程序之間的單向通信路徑保持不變。但是,如果小型服務(wù)程序識別到在初始客戶端網(wǎng)絡(luò)瀏覽器請求中沒有包括用于檢索期望信息的缺失信息,則小型服務(wù)程序通過利用所述初始HTTP請求的HTTP響應(yīng)功能,自動地打開另一通信路徑以將缺失信息提供到小型服務(wù)程序,其中該另一通信路徑由另一小型服務(wù)程序功能組件支持,并且特征為如下步驟小型服務(wù)程序產(chǎn)生腳本,其中該腳本當在客戶端網(wǎng)絡(luò)瀏覽器處執(zhí)行時檢索缺失信息并調(diào)用該另一小型服務(wù)程序功能組件;將腳本添加到所述HTTP響應(yīng),從而指示其作為局部響應(yīng);發(fā)送包括腳本的HTTP響應(yīng)到客戶端網(wǎng)絡(luò)瀏覽器;暫停小型服務(wù)程序?qū)Τ跏糎TTP響應(yīng)的執(zhí)行,直到可得到缺失信息;另一小型服務(wù)程序功能組件接收缺失信息,其中缺失信息被包含在腳本當在客戶端網(wǎng)絡(luò)瀏覽器上執(zhí)行期間所創(chuàng)建的新HTTP請求中;向小型服務(wù)程序提供缺失信息;并小型服務(wù)程序利用缺失信息繼續(xù)執(zhí)行初始HTTP響應(yīng),以檢索所述HTTP響應(yīng)的其余部分并提供HTTP響應(yīng)的其余部分到客戶端網(wǎng)絡(luò)瀏覽器來顯示。
文檔編號H04L29/08GK101258494SQ200680032557
公開日2008年9月3日 申請日期2006年7月26日 優(yōu)先權(quán)日2005年9月8日
發(fā)明者S·拉斯普爾, Y·塞爾萊特 申請人:國際商業(yè)機器公司