服务器端动态页面的执行
技术领域
一般来说,本发明涉及服务器端的动态页面,尤其是涉及客户机与服务器之间多个请求-响应周期上动态页面的单步法执行。
背景技术
在因特网或万维网上,通过超文本传输协议(HTTP)的请求-响应周期交换信息。例如,客户机可以通过向服务器提交信息请求而启动所述周期。所述请求可以为了静态页面(比如HTML或VXML)、动态页面(比如JSP、ASP或PHP)或者请求执行具体的应用程序以产生返回页面。服务器从客户机收到这样的请求后,执行必要的任务以产生返回页面,比如检索所请求的页面或应用程序,按要求执行,需要时访问数据库,与其他服务器建立连接等等。服务器获得了必要的信息后,向客户机发送响应,完成请求-响应周期。
在客户机与服务器之间建立的请求-响应序列称为“往返”,对客户机发出的每项请求都执行。服务器可以服务来自单一客户机的多个请求,也可以作为替代,被配置为处理来自多台客户机的请求。在每种情况下,服务器收到的每项请求都必须独立地服务。
服务器端动态页面的单步法执行在本领域内公知,正如已公开的2003/0009519号美国专利申请(James A.Gosling,2003年1月9日公开)中的公开内容,它介绍了一种方法和装置,用于操作客户机-服务器网络的本地服务器计算机,包括从客户机-服务器网络的客户机计算机接收请求的技术。对所述请求是否需要从客户机-服务器网络的servlet对象动态产生的信息作出判断。假若如此,可以从客户机-服务器网络的远程服务器计算机上传所述请求对应的指定servlet对象。然后执行指定servlet对象以获得所述请求对应的动态产生的信息。
服务器端页面和开发网络应用程序的脚本的能力来自它们允许应用程序充分利用服务器端组件的速度、可靠性和安全性的能力,并且正在显现为语音应用程序开发的流行技术。服务器端的动态页面可以由本文称为容器的动态网络内容执行环境处理。词“容器”通常用于主要指servlet和JSP的动态网络内容执行环境,但是后文也将用于指其他动态页面,如ASP和PHP,以确保术语一致性。同样,术语“动态页面”用于定义服务器端页面的一般类,比如ASP、JSP、PHP以及servlet,本发明应用于它们。所述容器接收并分析来自客户机的关于动态页面的请求,根据动态页面的结果向客户机发送响应并保持服务器端动态页面的状态。典型情况下,所述容器与外部网络服务器协作,后者从客户机接收若干HTTP请求,所述HTTP请求在需要时被转发到所述容器。可以在http://www.onjava.com/pub/a/onjava/2003/05/14/java_webserver.html在线访问标题为“How Servlet Containers Work”的适宜容器实例。
所述容器也负责执行适当的servlet、JSP、PHP或ASP。具体参考servlet的执行作为展示实例,在已经例示了servlet类以指明置于服务中的servlet之后,由所述容器调用init方法一次。所述init方法必须成功地完成,servlet才能接收任何请求。然后容器调用service方法,允许servlet响应请求。在service方法的执行期间,客户机典型情况下无法影响servlet执行,servlet也无法从客户机请求任何附加信息。一旦执行完成,容器先调用destroy方法,再从服务中去除servlet实例。从servlet的service方法返回后,容器根据servlet的结果构建响应并向客户机发送。然后终止到网络服务器的连接。
如果用户采用视觉信息提示,比如空间性质的图形用户界面(GUI),以上执行方法很好用。遗憾的是,语音应用接口的时间性质意味着传统的单步法执行不太适合。如果需要客户机提供多个领域的信息,比如在在线账单支付应用程序中,输入的数据(比如信用卡号和有效期限)往往使用服务器端组件调用数据库进行确认。基于GUI的应用程序允许在空间上收集信息,并且在提交后由服务器确认。如果任何或全部信息无效,则返回单独的响应页面,通知客户机这个问题。不过,对于语音应用程序,使用一系列问题-回答-确认步骤在一段时间上收集信息。这种类型的接口要求在某种信息无效时立即通知用户。使用传统的单步法方式执行语音应用程序很繁琐,并且会导致用户受挫,因为要求用户口头地重新输入全部信息才能进行验证的另一次尝试。
本发明的目的是至少减少一个或多个上述问题。
发明内容
本发明的一方面提供了一种方法,用于在客户机-服务器环境中执行服务器端计算机上的动态页面。为了执行所述动态页面,从客户机接收请求。启动所述动态页面的执行。在每个实例当所述执行动态页面需要来自所述请求客户机的附加信息以继续执行时,那么:(a)从所述动态页面向所述客户机发送对信息的中间请求并进入所述执行动态页面的等待状态;(b)由通告程序实体从所述客户机接收所请求的信息并将所述信息传递到所述执行动态页面;以及(c)采用所述信息继续执行所述执行动态页面。根据所述动态页面的结果向所述客户机发送响应。
本发明的另一方面提供了一种系统,用于执行动态页面。第一接收装置从客户机接收请求以执行动态页面,处理装置处理所请求的动态页面。当需要附加信息时,发送装置向客户机发送对这样的附加信息的中间请求,第二接收装置从所述客户机接收所请求的附加信息。所述发送装置被进一步配置为根据所述处理动态页面的结果向所述客户机发送响应。
本发明的其他方面提供了一种计算机程序产品,包括计算机可读的介质,其中记录着计算机程序,用于根据本文介绍的方法执行动态页面。
进一步公开了一种系统,用于执行动态页面。第一接收器至少从客户机接收对动态页面的请求,处理器处理所请求的动态页面。发送器向客户机发送对附加信息的中间请求,第二接收器从所述客户机接收所请求的附加信息。所述发送器被配置为根据所述处理动态页面的结果向所述客户机发送响应。
从另一方面看,本发明提供了一种计算机程序产品,包括计算机可读的介质,其中记录着计算机程序,用于执行动态页面,所述计算机程序产品包括:为了执行所述动态页面,从客户机接收请求的计算机程序代码装置;启动所述动态页面的执行的计算机程序代码装置;在每个实例当所述执行动态页面需要来自所述请求客户机的附加信息以继续执行时,那么:(a)从所述动态页面向所述客户机发送对信息的中间请求并进入所述执行动态页面的等待状态;(b)由通告程序servlet从所述客户机接收所述请求的信息并将所述信息传递到所述执行动态页面;以及(c)采用所述信息继续执行所述执行动态页面的计算机程序代码装置;以及根据所述动态页面的结果向所述客户机发送响应的计算机程序代码装置。
从另一方面看,本发明提供了一种系统,用于执行动态页面,包括:第一接收器,用于至少从客户机接收对动态页面的请求;处理器,用于处理所述请求的动态页面;发送器,用于向所述客户机发送对附加信息的中间请求;第二接收器,用于从所述客户机接收所述请求的附加信息,其中所述发送器被配置为根据所述处理动态页面的结果向所述客户机发送响应。
优选情况下,本发明提供了一种系统,其中所述动态页面先进入等待状态,所述发送器再发送所述中间请求。
优选情况下,本发明提供了一种系统,其中所述接收器进一步包括将所述收到的附加信息传递到所述处理的动态页面以及通知所述动态页面采用所述收到的附加信息恢复处理的装置。
优选情况下,本发明提供了一种系统,其中所述第二接收器是通告程序实体。
优选情况下,本发明提供了一种系统,其中所述处理器进一步包括将Javaserver页面(JSP)编译为servlet的装置。
优选情况下,本发明提供了一种系统,其中所述处理器进一步包括挂起所述动态页面的执行并进入等待状态的装置。
附图说明
图1是功能框图,显示了根据现有技术的动态页面的执行;
图2是功能框图,展示了根据本发明优选实施例的动态页面的执行;
图3是流程图,展示了根据本发明优选实施例的多个请求-响应周期上动态页面的单步法执行的步骤;
图4是流程图,展示了根据本发明优选实施例当动态页面需要进一步信息以继续执行时所采取的步骤;
图5是通用计算机的示意框图,根据本发明优选实施例本文介绍的方法可以在其上执行。
具体实施方式
已知实施例
图1是包括客户机12和服务器14的系统10的功能框图。根据公知的实施,客户机12和服务器14正在执行往返操作。在系统10中,客户机12与服务器14彼此直接通信,没有中介。服务器14可以是例如适应J2EE、能够与客户机通信的网络服务器,并可以包括容器15以处理JSP和servlet。客户机12在它需要动态页面的结果比如servlet 16时,向服务器14发送请求20。如果所请求的页面是JSP,则将它编译为对应的servlet 16。具体地参考servlet 16的执行作为展示性实例,如果servlet 16是第一次执行,则容器15加载servlet 16并调用init方法。然后该容器执行servlet 16的service方法。作为实例,考虑servlet 16包括多个代码块18a-18e。servlet 16的完整执行需要18a-18e每个代码块依次执行。一旦全部代码块18a-18e都已经执行,service方法便结束并向客户机12发送最终结果22。这就构建了servlet16的请求-响应周期。为了执行ASP容器内驻留的ASP,可以利用类似的现有技术系统,不过,ASP不要求编译为servlet,因为ASP编写为在若干代码块中执行。
在系统10中,为了完成客户机12的请求20的执行,servlet 16可能需要附加信息。根据现有技术,实现这一点的两种方法是(i)挂起servlet 16的执行并请求来自客户机12的信息,再以附加信息重新访问servlet 16,注意从挂起点重新启动执行,或者(ii)将每个代码块18a-18e编写为单独的JSP。第一种方法需要servlet 16的复杂状态管理(尤其是在检索进一步的信息时),而第二种方法不可伸缩。
实施例
现在参考图2,其中展示了系统30的功能框图,用于在多个请求-响应周期上动态页面的单步法执行,比如servlet、ASP和JSP。系统30包括客户机32和服务器34,它们彼此直接通信,无须中介。当客户机32请求合并了动态页面36结果的页面时,向服务器34发送初始请求40。服务器34可以包含多个动态页面36,它们存储在容器35内并由其管理。如果所请求的页面是JSP,容器35将JSP编译为对应的servlet。执行对ASP或servlet(它们也可以驻留在其各自容器中,但是并未显示)的请求时无须编译。有用的是将动态页面36认为具有多个连续的代码块42a-42e,每个块依次执行,以完成servlet 36的执行。如果在代码块42a-42e中任何一个结束时需要附加信息以继续执行,动态页面36便通过服务器34向客户机32发送中间请求44。中间请求44以客户机32的适当标示发送,比如HTML、XML、VXML等,根据客户机32作出的初始请求40确定。为了确保执行能够从适当点继续,动态页面36先进入等待状态,再发送中间请求44。客户机32接收中间请求44,输入所请求的信息并向通告程序实体发送中间响应46。通告程序不必是servlet却是能够从客户机接收请求、分析该请求、提取相关信息并将信息传递到正在等待的动态页面的任何实体,以便动态页面能够使用通告程序实体传递的信息恢复执行。对于servlet和JSP,本实施是简单的通告程序servlet,不过一般来说它可以是所述容器内实施的任何软件实体。通告程序实体38将信息传递到执行动态页面36并通知执行动态页面36处理可以继续。如果中间响应46内包含的信息不适当,那么动态页面36将再次发送中间请求44,并再次进入等待状态,直到从客户机32收到另一个中间响应46。再次发送中间请求44的这个过程继续下去,直到中间响应46包括适当的信息。同样,如果不止一个代码块42a-42e需要来自客户机32的附加信息,动态页面36可以发送不止一项中间请求44。客户机32每次发送中间响应46时,通告程序实体38都接收响应,将信息传递到执行动态页面36并通知执行动态页面36继续处理。
当执行动态页面36到达最后的代码块42e的结尾(即动态页面36的结尾)时,产生所执行动态页面的结果。容器35利用该结果产生最终响应48,并由服务器34向客户机32发送。最终响应48为非往返条件下(即单步法执行时)会发送的实际响应。以这种方式,servlet36的作者能够根据现有的单步法执行原理产生servlet代码,而仍然允许使用需要多步法执行条件的应用(比如语音)利用该应用程序。
现在参考图3,其中显示了根据优选实施例执行动态页面36时所存取步骤的流程图50。服务器34接收对动态页面36的请求(步骤52)并将该请求传递到容器35,它检索适当的动态页面36。容器35然后执行所请求的动态页面36(步骤54)。如果所请求的动态页面是JSP,容器35将把JSP编译为对应的servlet再执行。
在每个执行的代码块的结尾,动态页面36都检查执行后续代码块是否需要附加信息(步骤56)。如果判定继续执行需要附加信息,那么动态页面36进入等待状态并向客户机32发送中间请求(步骤58)。动态页面36收到所请求的信息后,从进入等待状态的点继续执行(步骤60)。在动态页面36执行期间,请求信息并挂起动态页面36执行直到收到信息的过程可能发生多次。一旦动态页面36执行到达最后的代码块的结尾并且判定不需要来自客户机32的进一步信息,动态页面36执行结束。根据所执行动态页面36的结果,容器35产生最终响应,服务器34向客户机32发送最终响应(步骤62)。
现在也参考图4,其中显示了详述请求来自客户机32的附加信息、暂停动态页面36的执行以及一旦收到附加信息随后恢复执行(图3的步骤58和60)时所采取步骤的流程图70。一旦已经判定正在执行的动态页面36的继续执行需要附加信息(步骤72),动态页面36进入等待状态并向客户机32发送对附加信息的中间请求(步骤58)。包含附加信息的、对中间请求的响应由通告程序实体38接收(步骤74)。通告程序实体38和正在执行的动态页面36都在容器35内,它包含多个动态页面36。通告程序实体38将附加信息传递到正在执行的动态页面36(步骤76)并通知正在执行的动态页面36可以继续执行。正在执行的动态页面36收到附加信息后退出等待状态并从后续代码块42a-42e恢复执行(步骤78)。
实施
优选情况下,使用通用计算机系统100,比如图5所示的,实行在多个请求-响应周期上动态页面单步法执行的方法,其中图3和图4的过程可以实施为软件,比如计算机系统100内执行的应用程序。确切地说,在多个请求-响应周期上动态页面单步法执行的方法步骤由计算机执行的软件中的指令实现。这些指令可以形成为一个或多个代码模块,每个都执行一项或多项具体任务。软件也可以划分为两个单独的部分,第一部分执行在多个请求-响应周期上动态页面单步法执行方法,第二部分管理第一部分与用户之间的用户接口。软件可以存储在计算机可读介质中,包括例如以下介绍的存储设备。软件从计算机可读介质加载到计算机中,然后由计算机执行。具有这样的软件即计算机程序记录其上的计算机可读介质是计算机程序产品。优选情况下,在计算机中使用计算机程序产品实现了在多个请求-响应周期上动态页面单步法执行的有利装置。
虽然上述说明主要集中在Javaserver页面(JSP)的执行,但是对于本领域的技术人员显而易见在多个请求-响应周期上动态页面单步法执行的方法同样适用于其他动态页面,比如微软的动态服务器页面(ASP)。
计算机系统100由计算机模块101、输入设备比如键盘102和鼠标103、输出设备包括打印机115、显示设备114和扬声器117形成。调制解调器收发器设备116由计算机模块101用于与通信网络120通信,例如通过电话线121或其他功能媒介可连接。调制解调器116可以用于获得对因特网和其他网络系统的访问,比如局域网(LAN)或广域网(WAN),并且在某些实施中可以合并在计算机模块101中。
典型情况下,计算机模块101包括至少一个处理器单元105,以及内存单元106,例如由半导体随机存取存储器(RAM)和只读存储器(ROM)形成。模块101也包括许多输入/输出(I/O)接口,包括连接到视频显示器114和扬声器117的音频-视频接口107、键盘102和鼠标103以及可选的游戏杆(未显示)所用的I/O接口113以及调制解调器116和打印机115所用的接口108。在某些实施中,调制解调器116可以合并在计算机模块101内,例如在接口108内。配备了存储设备109并且典型情况下包括硬盘驱动器110和软盘驱动器111。也可以使用磁带驱动器(未显示)。典型情况下,CD-ROM驱动器112配备为非易失性数据源。典型情况下,计算机模块101的部件105至113通过互连的总线104通信,方式为产生相关领域技术人员公知的计算机系统100的常规操作模式。能够实行所介绍布局的计算机实例包括IBM-PC和兼容机、SUN的Sparc工作站或从它们发展的类似计算机系统。
典型情况下,应用程序驻留在硬盘驱动器110上,并且由处理器105在其执行中读取和控制。程序和从网络120取来的任何数据的中间存储可以使用半导体存储器106完成,可能与硬盘驱动器110配合。在某些情况下,应用程序可以编码在CD-ROM或软盘上供应给用户,通过对应的驱动器112或111读取,或者作为替代,可以由用户通过调制解调器设备116从网络120读取。再进一步,软件也可以从其他的计算机可读介质加载到计算机系统100中。本文所用的术语“计算机可读介质”是指参与向计算机系统100提供指令和/或数据以便执行和/或处理的任何存储或传输媒介。存储介质的实例包括软盘、磁带、CD-ROM、硬盘驱动器、ROM即集成电路、磁光盘或者计算机可读的卡比如PCMCIA卡等,无论这样的设备是在计算机模块101内部还是外部。传输媒介的实例包括到另一台计算机或联网设备以及因特网或内联网的射频或红外线传输通道以及网络连接,包括电子邮件传输和网站上记录的信息等。