改善客户端-小型服务程序通信的方法和系统的制作方法

文档序号:7639533阅读:199来源:国知局
专利名称:改善客户端-小型服务程序通信的方法和系统的制作方法
改善客户端-小型服务程序通信的方法和系统 技术领域本申请一般涉及客户端-服务器通信,更具体而言,本发明涉及改善万维网(Web)中客户端-小型服务程序(servlet)通信,而不改 变现有通信协议也不改变客户端,本发明尤其涉及提高这样的小型服 务程序在小型服务程序识别到在初始客户端网络浏览器请求中没有 包括的用于检索期望信息的缺失信息的情况下的灵活性和交互性。
背景技术
术语"客户端-服务器"指的是包括经由通信协议(例如,HTTP) 互相通信的客户端和服务器的网络应用构架。Web指的是一种信息空间,其中感兴趣的项(被称为资源)由 被称为统一资源标识符(URI)的全局标识符来标识。Web包括3个 标准指定如何为每个信息页赋予能找到其的唯一"地址,,的统一资源 定位符(URL);指定客户端和服务器如何互相发送信息的超文本传 输协议(HTTP);和超文本置标语言(HTML), 一种使得信息能 被显示在各种设备上的信息编码方法。Web工作如下当打开客户端的网络浏览器(例如,Microsoft 的Internet Explorer, Apple的Safari)时,其代表客户端(或使用 的计算机)利用超文本传输协议(HTTP)通信,并进行网页请求。 一旦发送了请求,客户端的网络浏览器计算机就等待来自服务器的超 文本数据流。当服务器获得该请求时,其搜索所请求的文件,并且在 该文件存在的情况下,按照请求将其发送给客户端的网络浏览器。小型服务程序指的是在服务器上运行的程序,其等待来自客户端 的网络浏览器的请求,并产生对该请求的响应(例如,动态产生的网 页)。现有技术中的小型服务程序的工作方式如下客户端的网络浏览器通过调用其URL而发送HTTP请求到小型 服务程序。客户端的网络浏览器不必知道其正在调用小型服务程序。 调用小型服务程序就像加载任何其他网页 一样,区别在于参数可以在 请求中^皮传递到小型服务程序,并且服务器所发送回的响应不是静态 文档、而是动态地产生的。请求被对小型服务程序进行主机服务的应用服务器分析,并被传 递到对应于所要求的URL的小型服务程序。请求被小型服务程序分析,最终参数被解析和解释,并且动态地 产生返回到客户端的网络浏览器的文档(文档内容可以取决于客户端 网络浏览器在请求中所传递的最终参数)。所产生的文档被客户端网络浏览器接收,并被显示或解释(如果 其包含一些如JavaScript的可执4亍脚本)。小型服务程序已经通过提供用于展示动态内容的强大且可缩放 的框架转换了因特网不是公布内容必须定期更新的静态文档,小型 服务程序而是允许客户端网络浏览器附加参数到HTTP请求并基于 其请求获得当前信息。如果没有小型服务程序,就不可能创建其中用 户通过其客户端网络浏览器与服务器交互的交互式网络应用。但是,小型服务程序具有一个限制,即在接收到请求之后,它们 不能向客户端网络浏览器要求缺失的信息。通过进入的请求,小型服务程序可以接收能够影响服务器上所采 取的操作或服务器所返回的信息的参数的列表。例如,如果在因特网 上订购物品,则按下"提交,,按钮就将发送包含订购物品列表的请求到 服务器。服务器将处理该列表(更新数据库等等),并通常产生列出 所选择的所有物品的确认页面。但是,对于传统的小型服务程序,对于在服务器上处理请求所必 需的所有参数必须被包含在客户端网络服务器所发送的初始请求中 如果小型服务程序在处理请求期间发现在初始请求中客户端网络服 务器没有提供某附加信息,则没有办法暂停处理,向客户端网络服务器要求缺失的信息,并从中断点恢复处理。这限制了小型服务程序的应用领域客户端网络浏览器必须精确地知道小型服务程序需要什么信息。在其请求中,客户端网络服务器可能需要提供比小型服务程序实 际需要的信息更多的信息。传统的小型服务程序不能处理要求比客户端网络服务器所提供 的信息更多的信息的意外情况。如果请求不包含所有必要信息,则处 理该问题的传统方法是停止该处理,返回Web页面到客户端网络服 务器,其中该Web网页替换原始网页并显示错误消息或者显示要求 缺失信息并使用新信息调用相同或另一小型服务程序的新网页。这并不是处理缺失信息的非常好的方法,因为在一个小型服务程 序调用中停止请求处理并在另一小型服务程序调用中继续交易并不 是简单的事情。此外,这可能使用户迷惑,因为经常再次显示相同的但具有小注释以通知用户缺失什么信息的页面,这从可用性的观点来 看是有问题的。发明内容本发明的目的是提供一种在不改变现有通信协议且不改变客户 端的情况下改善万维网(Web)中客户端-小型服务程序通信的方法和 系统,更具体而言,本发明的目的是在小型服务程序识别到在初始客 户端网络浏览器请求中没有包括的用于检索期望信息的缺失信息的 情况下提高这样的小型服务程序的灵活性和交互性。本发明提供了一种在不改变现有通信协议也不改变客户端的情 况下改善客户端-小型服务程序通信的方法和系统。如果初始请求包括用于检索期望信息的所有信息,则当前现有技 术中在客户端和小型服务程序之间的单向通信路径保持不变。但是, 如果小型服务程序识别到在初始客户端网络浏览器请求中没有包括 的用于检索期望信息的缺失信息,则小型服务程序通过利用所述初始 HTTP请求的HTTP响应功能,自动地打开另一通信路径以将缺失信息提供给小型服务程序,其中该另 一通信路径由另 一 小型服务程序功能组件支持,并且特征为如下步骤小型服务程序产生脚本,其中该 脚本当在客户端网络浏览器处被执行时,检索缺失信息并调用该另一 小型服务程序功能组件;将该脚本附加到所述HTTP响应,指示其作 为部分响应;发送包括该脚本的HTTP响应到客户端网络浏览器;小 型服务程序暂停初始HTTP响应的执行,直到该缺失信息可用;该另 一小型服务程序功能组件接收所述缺失信息,其中该缺失信息被包含 在脚本当在客户端网络浏览器上执行期间所创建的新HTTP请求中; 向小型服务程序提供该缺失信息;以及通过小型服务程序利用缺失信 息以检索所述HTTP响应的其余部分并提供HTTP响应的其余部分给 客户端网络浏览器用于显示,继续执行初始HTTP响应。小型服务程序具有现有技术中所描述的限制的原因源于HTTP 协议和网络浏览器/服务器的设计方式HTTP是用于客户端网络浏览器和网络服务器之间通信的协议。通常,HTTP协议允许客户端网络浏览器发送请求到网络服务器 (或应用服务器/小型服务程序),以发送某信息到服务器(POST请 求)或从服务器获得文档(GET请求)。与客户端网络浏览器所发送的请求的类型(GET还是POST) 无关地,服务器应当总是处理该请求,并返回包含含有返回码(例如 指示请求是否能够被成功地处理)的首标以及最终结果文档的响应。 当请求成功时,客户端网络浏览器通常利用来自服务器的响应显示服 务器所返回的文档,从而替换包含产生请求的元素的链接的原始页 面。如果请求长期运行,则服务器也可以在完成整个文档产生之前定 期地发送响应文档的部分。通过这种方法,用户可以阅读文档的开始 部分,而不必等待产生并传送整个文档。这是单向通信协议仅仅预见了客户端网络浏览器发起的通信。 服务器通常没有办法发送请求到客户端网络浏览器。为了克服这一限制,本发明使用以下事实,即在产生整个响应文档之前,服务器可以发送"局部文档"到客户端网络浏览器;以及该局 部文档可以包含在完全传送整个文档之前可以由客户端网络浏览器 执行的JavaScript, JavaScript是能够被嵌入HTML页面中并且由客 户端网络浏览器解释的语言。通过本发明,提供了网络客户端和网络服务器之间的双向通信, 其工作如下(参见图l):客户端网络浏览器发送HTTP请求到应用服务器上的主小型服 务程序。通过该请求,其能够提供小型服务程序处理该请求所需要某 些初始参数;主小型服务程序接收请求10,提取和解释最终参数并通过在服 务器侧采取某些动作而开始处理该请求,从而产生响应文档20; (到现在为止,这是现有技术的小型服务程序的工作方式)。在处理请求期间,主小型服务程序发现某信息缺失,并且该信息 必须由请求发起者提供30。该信息可以是用户必须输入的某些缺失数 据、关于客户端网络浏览器本身或关于在处理请求期间在客户端网络 浏览器上所显示的页面中某些其他元素的状态的某些系统信息。其必 须是在需要或无需用户交互的情况下能够通过在客户端网络浏览器 上执行JavaScript而检索的信息;主小型服务程序暂停处理请求以及生成响应,并产生JavaScript 40,该JavaScript 40当在客户端网络浏览器上运行时进行以下工作其检索(或向用户请求)缺失信息;其调用次小型服务程序以传递附加检索的信息作为参数以及传 递请求该信息的小型服务程序所产生的密钥;主小型服务程序将在前一步骤中所产生的JavaScript附加到部 分产生的响应文档,并发送该局部响应到客户端网络浏览器50;主小型服务程序通过等待来暂停其执行,直到其在其之前已经产 生的密钥之下能够找在网络会话中或在共享存储器中找到其所要求 的信息60;同时,客户端网络浏览器开始显示从主小型服务程序所接收的局部文档。如果一些内容已经产生,则其将被显示。嵌入在响应中的JavaScript被执行j在执行嵌入在局部响应文档中的JavaScript期间,客户端网络 浏览器检索主小型服务程序所要求的缺失信息,将该信息和密钥编码 到次小型服务程序的URL中,并发送请求到该次URL。其中该信息 应当在利用该密钥的情况下被存储;重要的是注意到,该第二个请求的结果在对主小型服务程序的请 求仍然在运行时不应该替换客户端网络浏览器所显示的当前文档以 及中断第一个请求。这可以通过将第二请求的结果重新定向到单独帧或到页面的特定元素(图像,嵌入帧)、或者通过使用JavaScript API 来程序地打开HTTP请求而被实现;次小型服务程序接收请求62,在其参数中包含具有要存储在会 话64 (或与第一小型服务程序共享的存储器)中的信息的密钥/值对。 然后,其返回成功码到客户端网络浏览器65。客户端网络浏览器可以 忽略次小型服务程序的响应;主小型服务程序在会话(共享存储器)中检测到已经为其已经产 生的密钥存储了值。其提取该值(70;其是处理请求所缺失的信息), 将该值从会话/共享存储器中移除,并重新开始处理请求。处理继续,产生响应文档的其余部分。如果随后在处理请求期间 发现更多信息缺失,则可以重复前面的步骤,以顺序地向用户要求更 多信息80;和最后,完成请求,并且客户端网络浏览器接收并显示完整响应文 档80。在本发明的一个优选实施例中,小型服务程序被实现为Java小 型服务程序。但是,相同方法可以被用于CGI脚本或驻留在服务器上、 并响应于HTTP请求提供动态内容的任何类似小型服务程序的程序。在本明的另一优选实施例中,脚本被实现为Java脚本。但是, 返回到客户端网络浏览器以检索缺失信息的脚本(JavaScript)可以 是能够被嵌入网络页面中并由客户端网络浏览器在正在处理期间(onthe fly)执行的任何语言(Java, Visual Basic等等)。在本发明的再一优选实施例中,可以创建一般小型服务程序,其 从用户接收非常低级别的信息(诸如鼠标或键事件),并对该信息进 行复杂处理。客户端网络浏览器仅发送关于用户所产生的鼠标/键事件 的信息,而不知道在发送请求时小型服务程序会做什么或其对于该信 息是否将进行什么动作。小型服务程序解释该信息,并且当其判断在 发生特定事件时必须采取动作时,其可以向客户端网络浏览器要求提 供更多关于客户端网络浏览器侧上的事件或一些其他元素的信息,并 且根据客户端网络浏览器所返回的信息动态处理该事件。在本发明的另 一进一步的实施例中,以复杂处理路径使用小型服 务程序。初始请求包含足够的信息以开始处理。在处理期间,根据参 数或服务器从后端系统(数据库等等)中所检索的数据,小型服务程 序可以采取不同执行路径。如果在某点上用户必须决定处理应该如何 继续,则小型服务程序可以要求客户端网络浏览器提示用户做出决 定。该决定可以影响对该请求的进一步处理,而不中断该请求。处理 可以在单个交易中运行。在本发明的另一优选实施例中,附加地提供次小型服务程序。次 小型服务程序接收JavaScript所发送的新HTTP请求,并且在当前 HTTP会话对象中存储密钥值对。在本发明的再一优选实施例中,代替使用次小型服务程序, JavaScript可以发送更新HTTP会话的请求到主小型服务程序。但是, 在该情况中,主小型服务程序的第二实例会开始(平行于仍然正在产 生对主请求的响应并等待缺失值的第一实例)。在本发明的还一优选实施例中,HTTP协议可以由其他通信协议 替代,该其他通信协议的特征在于所述客户端网络浏览器(3)发起 请求以从所述小型服务程序(8)检索信息的单向通信路径,以及所 述小型服务程序发送至少包含指示所述请求的成功或失败的返回码、 并且在存在的情况下还包含所述请求的结果的响应。


以下将参考附图以仅仅示例的方式详细地描述本发明的优选实施例图l显示了本发明的创新的双向通信路径;图2A显示了实现创造性双向通信路径的一个优选实施例的客户 端-服务器构架,和图2B显示的时序图描述了给定实例中客户端网络浏览器、主小 型服务程序和次小型服务程序之间的通信步骤。图2A显示了客户端-服务器构架中本发明的一个优选实施例。
具体实施方式
本发明包括客户端1和服务器2侧。客户端1优选地是标准客户 端网络浏览器3,其能够发送HTTP请求到网络服务器,并能够显示 服务器所返回的HTML文档。客户端网络浏览器3应当能够执行嵌 入要显示的文档13中的JavaScript 12。此外,其应当能够在已经传 送整个文档3之前显示和执行嵌入服务器所返回的文档13的部分中 的JavaScript 12。这是市场上可得到的所有现有客户端网络浏览器3 的标准行为。可选地,服务器返回并在客户端网络浏览器3上显示的文档13 的格式不需要必须是HTML文档13。可以使用所有能够由客户端网 络浏览器3显示并且能够包含在呈现期间被客户端网络浏览器3解释 的脚本元素的文档类型。可以使用的文档的例子XML, XHTML, SVG (可缩放矢量图形),XUL (XML用户接口语言)等等(尤其 是所有类型的XML文档)。嵌入文档中的脚本12可以以除JavaScript 之外的其他语言编写。客户端网络浏览器3中的JavaScript 12 (或其 标准化版本ECMA脚本)的支持是标准的。但是,可以使用能够被 嵌入要由网络浏览器3呈现的文档13中的、以及能够在客户端网络 浏览器3内执行以检索有关文档13中其他元素或有关客户端网络浏 览器3或用户环境的信息的所有类型的脚本或插件程序。例子可以是Visual Basic脚本,ActiveX组件、Java小程序(applet)、或本地客 户端网络浏览器3插件程序。HTTP协议可以由其他通信协议代替, 该其他通信协议的特征在于所述客户端网络浏览器3发起请求以从 所迷小型服务程序8检索信息的单向通信路径,以及所述小型服务程 序8发送至少包含指示所述请求成功或失败的返回码、并且在存在的 情况下还包含所述请求的结果的响应。月良务器侧2优选为应用服务器4 (例如,诸如WebSphere或 Tomcat的J2EE服务器),其优选具有小型服务程序容件6。在本发 明的优选实施例中,两个小型服务程序-主小型服务程序8和次小型 服务程序10 —被安装在该应用服务器4中。应用服务器4不必是J2EE服务器。可以使用能够动态响应来自 客户端网络浏览器3的HTTP请求的任何种类的服务器。可以被用于 代替J2EE应用服务器的技术实例有Microsoft .Net、或能够执行 CGI脚本以显示动态内容的筒单网络服务器。小型服务程序8、 10和 小型服务程序容件6可以由诸如ASP、 PHP或CGI脚本这样的类似 技术替代。本发明在以其优选实施例实现时工作如下(参见图2A的箭头) 在客户端侧1,客户端网络浏览器3发送请求到主小型服务程序 (1)。主小型服务程序8是响应于初始请求执行对于产生要发送到 客户端网络浏览器3的文档-页面13所必需的逻辑的小型服务程序。 主小型服务程序8接收该请求,读取随着请求传递的最终参数,并开 始产生文档13以将其返回到客户端网络浏览器3。随着请求传递的参 数可以影响文档13的产生。本发明并不依赖于主小型服务程序8为 了产生响应文档13而使用的逻辑。在产生响应过程中的某些点处,主小型服务程序8需要客户端网 络浏览器3在请求中还没有(作为参数)提供、但可以很容易地通过 在客户端网络浏览器3中的客户端侧1上执行JavaScript 12而被检索 的附加信息。主小型服务程序8将JavaScript 12插入其已经开始产生的文档13中。在由客户端网络浏览器3执行时,该脚本12检索缺失信息, 发送HTTP请求到次小型服务程序10,其中该请求包含主小型服务 程序8所产生的密钥(密钥可以是随机产生的任何唯一字符串)以及 在前一步骤中所检索的值作为参数。一旦脚本12已经被产生并被插入局部响应中,主小型服务程序 8就刷新其緩冲器,使得响应文档13的到此时为止已经产生的部分被 立刻传送到客户端网络浏览器(2)。到网络浏览器3的通信信道不 被关闭。被发送到客户端网络浏览器3的HTTP响应的首标指示响应 使用"分块传输编码(chunked transfer coding ),,,如HTTP 1,1中所 定义的。该编码意味着响应不是在一个片块中到来的,而是在一系列 块中到来的,并且客户端网络浏览器3应当等待新内容,直到服务器 关闭连接。一旦部分产生的文档13 (包含文档起始部分和检索缺失信息的 JavaScript 12的第一块)被传送到客户端网络浏览器3,在等待其余 文档的同时,客户端网络浏览器3开始呈现到目前为止已经接收的文 档13的部分,并执行被嵌入的脚本12。该脚本12的执行检索缺失值,并发送另一HTTP请求到次小型 服务程序10。该请求含有密钥和在前一步骤(3)中检索的值作为参 数。在第1个HTTP请求的响应正被加载期间发送附加HTTP请求 到不同URL的能力对于网络浏览器3来说是通常的行为。如果没有 该能力,则在完全加载整个文档之前,客户端网络浏览器3将例如不 能显示包含在正被加载的长文档的开始部分中的图像。次小型服务程序10接收JavaScript 12所发送的HTTP请求,解 码在请求的参数中所包括的密钥和值,并将该密钥值对存储在当前 HTTP会话对象中(4 ) 。 HTTP会话是存储有关一个客户端1与服务 器2之间当前会话的信息的对象。每次接收到请求时,会话对象被传 递到小型服务程序。如果相同客户端网络浏览器3发送HTTP请求到 包含在相同小型服务程序容件6中和相同网络应用中的几个小型服务程序8,则相同会话对象将被传递到不同小型服务程序8。小型服务 程序8可以在会话对象中读写值(该值被存储在密钥之下,该密钥随 后可以被用来检索该值)。使用HTTP会话是在J2EE中在不同小型 服务程序8之间传递值的普通方法。不使用次小型JL务程序10, JavaScript 12可以发送更新HTTP 会话的请求到主小型服务程序8。但是在该情况下,主小型服务程序 8的第二实例将开始(平行于仍然正在产生对于主请求的响应并等待 缺失值的第1实例)。主小型服务程序8然后将需要测试何时接收请 求,该请求是否正要求文档或者该请求是否提供处理文档请求(主请 求)的小型服务程序的其他实例已经请求的附加信息。技术上,这通 过测试随请求传递的参数来实现。如果特定参数被包含在请求中,则 主小型服务程序8将知道其应当以包含在请求的其他参数中的密钥/ 值对来更新HTTP会话。在任何其他情况中,主小型服务程序8应当 产生响应文档13。通过这样做,主小型服务程序8根据请求的参数将 具有2个不同的逻辑。这与具有2个不同小型服务程序完全相同,每 个小型服务程序执行单个逻辑。次小型服务程序10不需要在HTTP会话中存储第2个请求 (JavaScript所发送的请求)所传递的附加值以使主小型服务程序8 知道。其他方法可以存储该值在小型服务程序容件6的Java虚拟机 的系统属性中,或者使用其他共享存储器机制(根据应用服务器所使 用的技术)。另一可能性是使次小型服务程序10存储该值在服务器 的本地磁盘上的文件中,并且使主小型服务程序8读取相同文件。一旦主小型服务程序8在共享存储器中(在HTTP会话中)发 现所请求的值,主小型服务程序8就醒来,并继续产生文档13。使用 缺失信息,文档现在能够被完全产生,并且文档的其余部分被传送到 浏览器(5)-在最后步骤期间,主小型服务程序8已经定期地检查 了 HTTP会话的内容以查看值是否可得到。每次它检查会话并且值不 可得到时,其休眠一小段时间,并且再次检查。一旦小型服务程序关闭与网络浏览器3的连接(这在小型服务程序的doGet(...)或doPost(…)方法返回时自动执行),客户端网络浏览 器就知道整个文档已经被下载了 。小型服务程序8可能需要来自客户端网络浏览器的不止一个附 加信息以处理请求。可以通过在处理请求期间重复这里所述的步骤多 次、或者通过产生一个在一个HTTP请求中检索和传送所有缺失信息 到次小型服务程序10的JavaScript 12来实现多个缺失信息的检索。 次小型服务程序10于是必须解码来自JavaScript所发送的辅助请求 的多个密钥/值对,并相应地更新HTTP会话。利用这种方法,在客户端网络浏览器3已经提交其初始请求之 后,以及在处理请求期间,小型服务程序可以向客户端网络浏览器3 请求附加信息。请求的处理不必像没有使用本发明那样被中止并重新 从头开始。客户端网络浏览器3中和应用服务器4中不需要修改。主小型服 务程序8和次小型服务程序10分别是接收HTTP请求并返回单个响 应到请求始发者的普通小型服务程序,如HTTP协议中所定义的那 样。协议不被修改。客户端网络浏览器3和服务器2之间的所有通信 由客户端网络浏览器驱动(如HTTP协议所预见的那样)。仅仅这两个小型服务程序8、 10之间的协作以及小型服务程序能 够通过将其响应文档分块并将JavaScript命令嵌入其中来远程控制客 户端网络浏览器3这一事实使服务器和客户端网络浏览器之间的双向 通信成为可能。以下,一个简单的实例显示本发明实际上如何工作(参见图2B)。 假设存在从客户端网络浏览器3接收请求并以取决于发送请求 的客户端网络浏览器3的一些属性的方式产生一些内容的主小型服务 程序8。进一步假设,主小型服务程序8需要知道发送请求的客户端 网络浏览器窗口的宽度,并且该信息并没有包括在发送给主小型服务 程序8的初始请求中。客户端网络浏览器窗口的宽度是可以通过在客户端网络浏览器 3中执行JavaScript表达"window.outerWidth,,而4艮容易询问的属性。该示例的主小型服务程序8和次小型服务程序10的源代码在本 说明书最后的附录中。注意到,次小型服务程序独立于主小型服务程 序的逻辑,并且可以由实现不同逻辑的几个"主"小型服务程序重新使 用或共享。重要的是注意到,该第2个请求的结果-在对于主小型服务程 序的请求仍然在运行的同时-不应当替换客户端网络浏览器所显示 的当前文档以及中断第l个请求。这可以通过将第二请求的结果重定 向到单独帧或页面的特定元素(图像,嵌入帧)、或者通过使用 JavaScript API来程序地打开HTTP请求来实现;次小型服务程序IO接收在其参数中包含具有要存储在会话(或 与第l个小型服务程序共享的存储器)中的信息的密钥/值对的请求。 然后,其返回成功码到网络浏览器3。网络浏览器3可以忽略次小型 服务程序10的响应;主小型服务程序8在会话(共享存储器)中检测到已经为其已经 产生的密钥存储了值。其提取该值(该值是处理请求所缺失的信息), 将其从会话/共享存储器中移除,并恢复处理该请求;处理继续,响应文档的其余部分被产生。如果后来在处理请求期 间发现有更多的信息缺失,则可以重复前几个步骤,以顺序地向用户 要求更多信息。最后,请求被完成,并且客户端网络浏览器3接收并显示完整响 应文档。图2B显示了根据本发明在该示例中在客户端网络浏览器和2个 小型服务程序之间发生的行动和通信。(1 )客户端网络浏览器通过向服务器2发送HTTP GET命4K可 选地也可以使用POST命令)来发送初始请求到主小型服务程序8, 从而请求主小型服务程序8的URL。该请求也可以包括在产生响应文 档期间主小型服务程序8可能使用的附加参数。在该示例中,没有参 数。(2)主小型服务程序8通过写文档的开始部分直到需要缺失信息的点而开始产生响应文档(客户端网络浏览器的宽度)<html> <head> </head> <body>在要求缺失值之前小型服务程序所产生的 一些内容<卩>, 在这点,为了写文档的其余部分,主小型服务程序8需要缺失信 息。其产生在客户端网络浏览器已经将其发送到次主小型服务程序10 之后将被用来在HTTP会话中存储和寻找缺失值的唯一密钥,并将 JavaScript附加到所产生的内容,其中JavaScript在被客户端网络浏 览器执行时将检索该值并将其与密钥一起发送到次小型服务程序10。 这里是脚本在本例中看起来象什么第2行检索网络浏览器3 窗口的宽度,随后的行使网络浏览器3打开HTTP请求到次小型服务 程序10,从而将密钥(这里,密钥的随机值是key_112108)和检索值(这里被包含在变量"value"中)作为参数传递。<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) 通过刷新主小型服务程序8的緩冲器,局部文档(到目前器3。当执行此时,应用服务器改变HTTP响应的编码为"分块",这 向客户端网络浏览器3表明内容将以几个分块片段被传输。图2显示 了此时传输到客户端网络浏览器的文档的内容。(4) 主小型服务程序8暂停其执行,直到其在HTTP会话中发 现在其已经在步骤(2)中产生的密钥下存储的值。技术上,其暂停 其执行,并以规则的间隔检查该值是否可得到。 一旦发现该值,其就恢复其执行。(5) 同时,客户端网络浏览器3已经接收到主小型服务程序8 所发送的文档的笫l个块。其显示到目前为止包含在文档中的可显示 内容,并执行嵌入其中的JavaScript,注意,JavaScript根本不影响 文档的内容。(6) 在执行JavaScript时,客户端网络浏览器3检索其窗口的 宽度(这里是454个象素),并发送HTTP GET请求到次小型服务 程序10。(替换地,也可以使用POST请求)。该请求包含之前产生的密钥(key_112108)和检索的值(454)作为参数。GET SecondaryServlet key=key—112108&value=d(7) 次小型服务程序IO接收该请求,从其参数中解码出密钥和 值,并在HTTP会话中将值(454)放在密钥(key一112108)下面。 然后,其立刻返回成功码(HTTP码200) (8),(8 )以规则间隔检查HTTP会话中存储在密钥"keyJ12108"之 下的值的主小型服务程序8发现该值。其将该值从会话中移除,并利 用其已经检索的值而恢复文档的产生。(在该示例中,值被简单地写 入文本中。在更复杂的例子中,其可以被用来实现文档的更复杂的布 局)。文档的第2个分块部分被发送到客户端网络浏览器3:完成页面的产生宽度=454</body></html>(9) 文档的第2个分块部分被发送到客户端网络浏览器,并且 主小型服务程序8关闭与客户端网络浏览器3的通信信道,从而指示 后面没有更多内容。(10) 客户端网络浏览器3显示文档的其余部分。 更详细的执行图解参见图1。有关该示例的完整源代码,参见本说明书末尾处的附录。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复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经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设〃 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经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),'
权利要求
1.一种在不改变现有通信协议以及客户端的情况下改善客户端(1)-小型服务程序(2)通信的方法,其中所述通信协议的特征在于客户端(1)发起从小型服务程序(8)检索信息的请求的单向通信路径,以及所述小型服务程序(8)发送至少包含指示所述请求的成功或失败的返回码的响应,并且在存在的情况下还包括所述请求的结果,其中在所述服务器侧,所述方法的特征在于以下步骤如果所述小型服务程序(8)识别到在所述初始请求中没有被包括用于提供完整响应的缺失信息,则通过利用所述初始请求的响应功能,自动地打开从所述小型服务程序(8)经由所述客户端网络浏览器到所述小型服务程序(8)的另一通信路径,用于提供所述缺失信息到所述小型服务程序(8),其中所述另一通信路径由另一小型服务程序功能组件(10)支持,并且其特征在于以下步骤所述小型服务程序(8)产生脚本(12),其中所述脚本当在客户端网络浏览器处执行时检索所述缺失信息并调用所述另一小型服务程序功能组件(10),将所述脚本(12)附加到所述响应,从而指示其为局部响应,发送包括所述脚本(12)的响应到客户端网络浏览器,暂停所述小型服务程序(8)对所述初始响应的执行,直到所述缺失信息可用为止;所述另一小型服务程序功能组件(10)接收所述缺失信息,其中所述缺失信息被包含在所述脚本(12)当在所述客户端网络浏览器上执行期间所创建的新请求中,提供所述缺失信息到所述小型服务程序(8),以及所述小型服务程序(8)利用所述缺失信息继续执行所述初始响应,以检索所述响应的其余部分,并提供所述响应的所述其余部分到所述客户端网络浏览器用于显示。
2. 根据权利要求l的方法,其中所述通信协议是HTTP协议。
3. 根据权利要求1或2的方法,其中所述另一小型服务程序功 能组件(10)被实现为单独的次小型服务程序。
4. 根据权利要求3的方法,其中所述次小型服务程序(10)接 收所述脚本(12 )所发送的新HTTP请求,并将缺失信息存储在这两 个小型服务程序(8, 10)所使用的共享存储器中。
5. 根据权利要求3的方法,其中所述缺失信息被所述次小型服 务程序(10)存储在所述客户端(1)与所述服务器(2)之间的当前 HTTP会话对象中,并被传递到所述小型服务程序。
6. 根据权利要求1或2的方法,其中所述另一小型服务程序功 能组件(10)是所述小型服务程序(8)的一部分,并且所述小型服 务程序对所述新HTTP请求的接收自动地开始所迷小型服务程序的 第二实例,并且以所述缺失信息更新当前HTTP会话对象。
7. 根据权利要求1或2的方法, 本(12)的执行自动地检索缺失信息, 失信息。
8. 根据权利要求1或2的方蜂, 实现为Java小型服务程序。
9. 根据权利要求1或2的方法, Java脚本。其中所述网络浏览器对所述脚 或通过附加用户输入来检索缺其中所述小型服务程序(8)被其中所述脚本(12)被实现为
10.根据权利要求1或2的方法,其中所述脚本(12)包含具有由所述小型服务程序所产生的分配的密钥(密钥/值对)的缺失信息 (值)。
11. 一种客户端-服务器构架中使用根据权利要求1到9之一的 方法的服务器。
12. —种客户端-服务器构架中具有至少一个用于检索信息的小 型服务程序(8)的服务器(1),其中所述客户端-服务器构架使用 通信协议,其中所述通信协议的特征在于所述客户端网络浏览器(3 ) 发起从所述小型服务程序(8)检索信息的请求的单向通信路径,以 及所述小型服务程序发送至少包含指示所述请求的成功或失败的返 回码的响应,并且在存在的情况下还包括所述请求的结果,其中服务 器侧的特征在于a) 识别装置(8),用于识别在所述初始请求中没有包括用于提 供完整响应的缺失信息,b) 打开装置(8),用于如果所述识别装置识别到缺失信息,则 利用所述初始请求的响应功能,自动地打开从所述小型服务程序经由 所述客户端网络浏览器到所述小型服务程序的另 一通信路径,用于提 供所述缺失信息到所述小型服务程序,其中所述另一通信路径的特征 在于进一步的装置c) 生成装置(8),用于由所述小型服务程序产生脚本,其中所 述脚本当在客户端网络浏览器处执行时检索所述缺失信息并调用所 述另 一 小型服务程序功能组件,d) 附加装置(8),用于将所述脚本附加到所述响应,以指示其 为局部响应,e) 发送装置(8),用于发送包括所述脚本的响应到所述客户端 网络浏览器,f) 暂停装置(8),用于暂停所述小型服务程序对所述初始响应 的执行,直到所述缺失信息可用,g) 接收装置(8),用于接收缺失信息,其中所述缺失信息被包 含在所述脚本(12)当在所述客户端网络浏览器上执行期间所创建的 新请求中,h) 提供装置(8 ),用于提供所述缺失信息到所述小型服务程序 (8),以及i) 继续执行装置(8),用于利用所述缺失信息继续所述小型服 务程序对所述初始响应的执行,以检索所述响应的其余部分,并提供 所述响应的所述其余部分到所述客户端网络浏览器用于显示。
13. 根据权利要求12的系统,其中所述通信协议是HTTP。
14. 根据权利要求12或13的系统,其中所述装置a) - f)和h) 在所述小型服务程序中实现,并且所述装置g) -i)在另一单独的小 型服务程序中实现。
15. 根据权利要求12或13的系统,其中所述装置a) -i)在单 个小型服务程序中实现。
16. —种计算机程序产品,包括用于执行根据权利要求1到9 所述的方法的计算机可执行指令。
全文摘要
本发明提供了一种用于改善万维网(Web)中客户端-小型服务程序通信的方法和系统,而不改变现有通信协议也不改变客户端。如果初始请求包括用于检索期望信息的所有信息,则现有技术中在客户端和小型服务程序之间的单向通信路径保持不变。但是,如果小型服务程序识别到在初始客户端网络浏览器请求中没有包括用于检索期望信息的缺失信息,则小型服务程序通过利用所述初始HTTP请求的HTTP响应功能,自动地打开另一通信路径以将缺失信息提供到小型服务程序,其中该另一通信路径由另一小型服务程序功能组件支持,并且特征为如下步骤小型服务程序产生脚本,其中该脚本当在客户端网络浏览器处执行时检索缺失信息并调用该另一小型服务程序功能组件;将脚本添加到所述HTTP响应,从而指示其作为局部响应;发送包括脚本的HTTP响应到客户端网络浏览器;暂停小型服务程序对初始HTTP响应的执行,直到可得到缺失信息;另一小型服务程序功能组件接收缺失信息,其中缺失信息被包含在脚本当在客户端网络浏览器上执行期间所创建的新HTTP请求中;向小型服务程序提供缺失信息;并小型服务程序利用缺失信息继续执行初始HTTP响应,以检索所述HTTP响应的其余部分并提供HTTP响应的其余部分到客户端网络浏览器来显示。
文档编号H04L29/08GK101258494SQ200680032557
公开日2008年9月3日 申请日期2006年7月26日 优先权日2005年9月8日
发明者S·拉斯普尔, Y·塞尔莱特 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1