用于模拟服务器页面的处理的系统和方法

文档序号:6564749阅读:123来源:国知局
专利名称:用于模拟服务器页面的处理的系统和方法
技术领域
本发明涉及计算机编程。更具体地,本发明涉及使用Java编程语言创建动态网络应用程序。
背景技术
本领域的技术人员熟悉用来创建具有极为动态或极多页面的网络应用程序的方式。动态网页并不新鲜。多年来,人们通过使用来自C程序的“通用网关接口”(CGI)而书写了足够的网络应用程序。最近,很多程序员使用Java编程语言和Java小服务程序(Servlet)技术来创建动态网页。允许代码和表示(representation)之间的更好分离的相关技术是Java服务器页面技术。
Java服务器页面是描述对于给定协议来说如何根据请求对象创建响应对象的文本文档。这些在“JavaServer Pages(TM)Specification”Version 2.0,Chapter JSP.1.Sun Microsystems,Copyright 2003中进行了描述。
在此之前,为了书写动态网页以显示一日的时间,例如,将按照与以下简化示例有些类似的方式来对小服务程序进行编码import java.io.*;import java.util.Date;import javax.servlet.*;import javax.servlet.http.*;public class DateServlet entends HttpServlet{public void doGet(HttpServletRequest req,HttpServletResponse resp){PrintWriter out=resp.getWriter();out.write(″<html><body>The time is″);out.write(new Date().toString());out.write(″</body></html>″);
}}对于简单的网页,这足够了,但是对于需要熟练编写HTML并且也了解Java编程的某些人的服务的更复杂的网页来说,这并不够。
使得非程序员更容易创建页面的小服务程序技术发展到Java服务器页面(JSP)技术。可以按照以下方式将上述动态网页表示为JSP<html>
<body>
The time is<%=new Date().toString()%>
</body>
</html>
对于精通HTML编写但是编程不熟练的某些人来说,这一语法方便得多。然而,它只是一种用来表示小服务程序语法的不同的方式。重要的是认识到在运行时,这也将被JSP容器转换为小服务程序。也就是说,当浏览器首先请求这一JSP页面时,JSP容器将读取上面示出的文件并且产生与最初示出的小服务程序示例大致相同的小服务程序源代码。然后,它将调用Java编译器来将该Java源代码转换为Java目标代码。然后,与原来用小服务程序的形式表示动态页面几乎一样,将加载和调用该新的小服务程序以处理所述请求。
上述示出的JSP示例看起来更容易书写,但是想象一下在Java代码量比该示例中更广泛的情况下结果会怎样。例如,为了示出午餐菜单,可能有必要书写代码,以便在数据库中查找信息并且在表中为其编排格式。在这种情况下,JSP文件成为标记(markup)和Java代码的难以阅读的混合体。较好的方法将允许用户接口专家将精力集中在HTML标记上,而Java程序员可以专心于编程逻辑,任何一方都不必担心与其它方拥有的文件部分的干扰。为了处理这一需求,引入了定制标签的概念、以及提供那些标签的实现的定制标签库。[参见“JavaServer Pages(TM)Specification”Version 2.0,Chapter JSP.8.Sun Microsystems,Santa Clara,CA.Copyright 2003。]使用这样的标签,为了示出午餐菜单,页面编写者可以像下面那样创建JSP标记<html>
<body>
<p>Today′s lunch menu is the following:</p>
<caf:lunchMenu view=″standard″/>
<p>Vegetarians may choose from the following meat-free alternatives:</p>
<caf:lunchMenu view=″vegetarian″/>
</body>
</html>
在此示例中,页面编写者使用“定制标签”来插入动态信息。程序员提供实现这些定制标签的Java库。正如在上一个JSP示例中那样,当浏览器首先请求此页面时,JSP容器读入JSP文件并且创建Java源代码,随后它将该Java源代码编译为Java目标代码。当JSP引用定制标签时,所产生的Java代码将对程序员提供的库例程进行调用(call)。以这一方式,程序员和用户接口专家可以各自将精力集中在他们的专长上。
使用定制标签的JSP示例对于很多网络应用程序来说足够了,但是不能充分处理以下内容。
1.具有数千个动态网页的网络应用程序。
如上所述,必须在可以访问JSP文件之前将其编译成小服务程序。为此,JSP容器创建Java代码以便表示该小服务程序。它创造了Java类名以用于此Java代码,将源代码编译成目标代码,将所得到的Java类定义加载到存储器中并且着手使用所加载的代码。在此操作中,存在相当多的存储器开销。存在某种类定义信息,其与消耗存储器资源的每个新的Java类相伴随。如果在网络应用程序的存在期内对JSP页面引用了一次,则该类的类定义将被加载和保存在存储器中,直到该网络应用程序终止为止。如果网络应用程序足够大,那么这可能是个问题。显然,今后的很多网络应用程序将足够大以至于遇到这一问题。
2.JSP页面不是静态的网络应用程序。
在某些环境中,将页面表示为JSP文件、而仍然向程序员提供在显示网页之前微调网页内容的功能是方便的。例如,网络应用程序的某个任务可能希望在示出页面之前使用Java代码来从JSP添加或删除标记。用于实现这一操作的直接方法是每次所述任务希望对页面进行改动时,都书写新的JSP文件,但是这一方法将使得对于JSP文件的每次变化都创建和加载新的小服务程序类,从而迅速耗尽存储器。
3.其页面没有被存储为JSP标记的网络应用程序。
为了提供对于诸如蜂窝电话和PDA的“普通”设备的支持,在服务器上,以某种抽象XML来表示很多动态网页。当引用页面时,在运行时将XML转换为适合目标设备的标记。如果通过转换代码可以使用现有的定制标签库,那么这将是有用和方便的。为此,当引用页面时,转换代码将动态地创建JSP标记。但是,如果使用传统的JSP容器来处理JSP标记以便将其转换为最终形式(HTML或某种其它标记语言),则将创建新的小服务程序类并且将其加载到存储器中。但是同样,这是不实际的,因为它将迅速消耗存储器资源。此外,与产生和编译Java代码有关的等待时间通常是不可接受的。

发明内容
根据本发明,提供了一种用于模拟服务器页面的处理的方法和计算机程序产品,包括读取服务器页面,包括识别对于定制标签库的任何调用;模拟对于在服务器页面中经识别的定制标签的任何调用;以及由此在运行时动态产生和处理服务器页面。
此外,根据本发明,提供了一种用于在运行时模拟服务器页面的处理的系统,包括定制标签库;以及服务器页面模拟器,用于读取服务器页面,包括识别对于定制标签库的任何调用并且还用于模拟对于在服务器页面中经识别的定制标签的任何调用;以及由此在运行时动态产生和处理服务器页面。
根据结合附图进行的对本发明的当前优选实施例的以下详细描述,本发明的其它特征和优点将变得清楚。


图1是示出根据本发明优选实施例的Java服务器页面(JSP)模拟器的环境(输入和输出)的高级系统图。
图2是本发明优选实施例的方法和结构的示意表示。
图3是本发明优选实施例的流程图表示。
图4A和4B是从图3的步骤216起调用的处理(process)定制标签开始(start)方法的流程图表示。
图5A和5B是从图3的步骤220起调用的处理定制标签结束方法的流程图表示。
图6是用于实现本发明优选实施例的计算机程序产品的高级系统图。
具体实施例方式
本发明通过允许在运行时动态产生和处理Java服务器页面(JSP)自己来扩展Java服务器页面技术。
参考图1,在此描述的本发明通过创建另一类型的JSP容器或模拟器100来解决上面列出的问题,所述模拟器100是不把JSP页面(其可被例示为例如盘上的JSP文件)102编译为小服务程序、而是读取它们并且模拟对于定制标签库104的任何必要调用242、249、250、251、266、272(图4B、5A和5B)的模拟器。此方法使得在JSP页面102中包括Java小脚本程序(Scriptlet)(嵌入的Java代码)不实际,但是当使用定制标签214、218(图3)或者在JSP 2.0规范中引入的、经常是嵌入的Java小脚本程序的可接受的替换的“EL表达式”222时,此方法非常有用。在“JavaServer Pages(TM)Specification”Version 2.0,Chapter JSP.2.Sun Microsystems,Copyright 2003中描述了EL表达式。在它与本发明的JSP模拟器相关的情况下,EL表达式是在运行时评价的表达式语法。在EL表达式中使用的函数名被映射到标签语言定义(TLD)文件300(图2)中的定义类和函数签名。
JSP容器或模拟器100可以读取JSP页面102——其不需要是盘上的文件;它可以仅驻留在已经由运行的任务在运行中创建的存储器中——并且创建使得定制标签实现不可能将JSP模拟器100与传统的JSP容器区分开的环境。
如将在下文中结合图3、4A、4B、5A和5C而更充分地描述的那样,当模拟器100分析(步骤208)JSP页面102时,作为输出流或最终标记112而直接写入212被确定为“模板文本”210的任何文本。当在JSP页面102中遇到定制标签214、218时,模拟器100向定制标签库实现104发出调用242、249、250、251、266和/或272,从而提供定制标签库104期望传统JSP容器提供的所有相同目标的实现。最重要的目标是在定制标签代码104用来写入动态内容的页面上下文(pagecontext)对象350(在步骤206中创建)中包含的输出流的实现。定制标签实现如它通常所做的那样进行并且产生动态内容。通过步骤212和224以及在步骤242、250、266和272中由定制标签实现产生的任何输出来产生最终内容或标记112并将其馈送给诸如浏览器的某个目的地106。
如上面隐含的那样,本发明的优点在于相对于将JSP页面102编译为小服务程序的传统方法,它节省了存储器并且它允许动态地产生JSP页面内容102本身,这使得用传统容器将是不实际的。即使存储器开销不是问题,实际上,模拟JSP页面102所花费的时间也是将其转换为小服务程序并且编译和加载该新的小服务程序所花费的时间的一小部分,因此,如果应用程序在运行时产生JSP页面102,则模拟器100执行得好的多。随着较大的重要网络应用程序282(图2)的迅速增多,这是对传统JSP容器的有价值的替换。
传统JSP容器将产生代表小服务程序的Java源代码,将该Java源代码编译为Java目标代码,加载新的Java类定义并且随后像小服务程序一样对待它。然而,根据本发明,JSP模拟器100读取JSP页面102,分析内容并且立即处理它以产生输出112,包括调用定制标签库104实现。本发明的优点是定制标签库104实现不能检测来自本发明的JSP模拟器100和传统JSP容器的调用的差别。
在所述规范“JavaServer Pages(TM)Specification”Version 2.0,ChapterJSP.1.Sun Microsystems,Copyright 2003中描述了用于JSP页面102的语法。先前给出的自助餐厅的示例是它的一个示例。可以通过使运行的任务将文件写入盘来由该运行的任务在运行时创建页面102,或者甚至可以在不写入盘的情况下,将文件内容置于存储器中以便由JSP模拟器100处理。
通过步骤206以及在步骤224、242、249、250、251、266和272中提供给定制标签库104实现的方法参数(argument)来创建环境,其中对于定制标签104实现来说该环境不可能与传统JSP容器区分。
最终标记或输出流112是将来自JSP模拟器100的输出写入的地方。它通常被最终发送给浏览器106。在最终标记112中,在模板文本、表达式、或任何其它种类的输入之间不存在区别,因为此时它们都已经被处理成也被称为标记的纯文本。如在这里使用的那样,模板文本为不是定制标签库引用(reference)或EL表达式的任何文本。定制标签库104代码是使用Java API创建的Java代码。例如JspWriter writer=pageConext.getOUt();
writer.write(″This is dynamic output″);参考图2,阐述了本发明优选实施例的某些编程结构和方法。将结合对图3、4A、4B、5A和5B的流程图的以下描述来对此进行介绍。
结合图2参考图3,由JSP模拟器100执行的处理在步骤200开始。在步骤202中,如果尚未进行,则JSP模拟器100发现和分析用于这一服务器280上下文的标签语言定义(TLD)文件300。“服务器上下文”是指特定的网络应用程序282。网络服务器280可以容留若干网络应用程序282并且每一个可以使用一组不同的定制标签库104。TLD文件300是包含关于定制标签104的名称和合法标签属性的名称的信息、关于需要属性或者属性可以接受作为表达式的值的信息、以及实现定制标签处理的Java类的名称。
在步骤204中,JSP模拟器100分析JSP页面102并且创建存储器节点树302,其中,每个节点是JSP元素304并且为JSP页面102中的每种类型的元素提供节点。因此,树302是JSP页面102中的文档303的分析过的表示。JSP页面102包含标记、表达式以及对定制标签的引用并且TLD 300包含关于合法标签的信息。
在步骤206中,JSP模拟器100创建和初始化PageConetxt对象350。在步骤208中,JSP模拟器100通过树302下行,从而处理每个节点或元素304。
如果此JSP元素或节点304是模板文本210,则在步骤212中,将文本字符写入输出流112。
如果此元素304是标签开始214,则在步骤216中,JSP模拟器100调用执行图4A和4B的处理的定制标签开始322。
如果此元素304是标签结束218,则在步骤220中,JSP模拟器100调用执行图5A和5B的处理的定制标签结束方法324。
如果此元素304是EL表达式222,则在步骤224中,调用方法评价EL表达式326并将结果写入输出流(即,最终标记112)。
如果此元素304不是元素210、214、218和222中的任何一个,则在步骤226中,JSP模拟器100结束。因此,当在树302中不再有元素时,模拟器100结束处理页面102。将没有被具体识别出的任何语法假设为模板文本210。
参考图4A和4B,从步骤212起调用的定制标签开始方法322在步骤230处开始并且输入包括页面上下文350以及父标签和属性值。在步骤232中,JSP模拟器100检验属性的正确性,包括所需属性是否存在。
在步骤234中,如果TLD 300指示标签主体314必须为空,则JSP模拟器100确定标签主体314是否为空。也就是说,TLD 300指示是否允许某个标签包含主体。
在步骤236中,JSP模拟器100从标签池330中检索标签句柄332的实例,或者如果在池330中不存在可用实例则创建一个。(已经在初始化或开始步骤200期间由JSP模拟器建立了标签池330。)在步骤238中,JSP模拟器100设置句柄实例332的性质,包括页面上下文350、父标签352、和属性值354(通过评价设置这些值354的任何EL表达式222来设置后者)。
在步骤240中,JSP模拟器100将关于此定制标签104的信息推到标签状态栈360上。标签库104包含定制标签的实现。JSP元素304包含对于特定标签104的引用或“调用”。这一步骤240在栈360上储存关于对此特定标签的这一特定调用的这种调用信息。由于一个调用的主体可以包含对其它或者甚至相同标签104的调用,因此这样的嵌套是可以的。所储存的信息包括对这一标签104的引用、对其中嵌套这一标签的任何父标签104的引用352、指定的属性名称和值354、标签主体314是否为空等等。
在步骤242中,JSP模拟器100调用标签句柄实例332的DoStartTag()(处理开始标签())方法。DoStartTag()方法将返回Skip_Body 243(跳过_主体243)、Eval_Body_Include 246(评价_主体_包括246)或Eval_Body_Buffered 248(评价_主体_缓冲248)的响应。
如果来自DoStartTag()方法的响应242是Skip_Body 243,则在步骤244中,标签开始方法332跳过主体314并且在定制标签结束310之前向JSP模拟器100返回处理。
在步骤246和248中,如果来自DoStartTag()方法的响应334分别是Eval_Body_Include 246或Evan_Body_Buffered 248,则DoStartTag()方法322调用PageContext.PushBody()249(页面上下文.进栈主体()249)、BodyTag.SetBodyContent()250(主体标签.设置主体内容()250)、以及BodyTag.DoInitBody()251(主体标签.处理初始化主体()251)并且在步骤252中结束,从而在步骤208向JSP模拟器100返回控制。当来自DoStartTag()的响应334不是响应243、246或248中的任何一个时,对错误条件进行标记并且标签开始方法322结束252。
Skip_Body 243、Eval_Body_Include 246和Eval_Body_Buffered 248是来自DoStartTag()方法调用的可能返回值。DoStartTag()的定制标签的实现(步骤242)返回控制后续处理并且可指示所述主体应当被跳过、被正常处理、或者作为成批数据而被提供给标签实现的值。
参考图5A和5B,结合图2,从步骤220起调用的处理定制标签结束方法324在步骤260开始。在步骤262中,从JSP模拟器100的标签状态栈360弹出关于此定制标签的信息。
在步骤264中,JSP模拟器100确定此标签是否是迭代标签以及主体314是否已被处理。如果不是,则处理在步骤272继续进行。如果是,则在步骤266中,JSP模拟器100调用DoAfterBody()(在主体之后处理)方法。利用定制标签句柄332来实现所述DoAfterBody()方法。当JSP容器完成处理所述主体时,对其进行调用。在此方法中,所述句柄可以做它在那时想做的任何事情。在迭代标签的情况下,它还利用返回值指示JSP容器是否应当循环并且再次处理所述主体。
在步骤268中,JSP模拟器100确定响应是否是Eval_Body_Again,并且,如果是,则在步骤270中通过返回步骤266来处理标签主体,即另一次重复。如果不是,则处理继续进行到步骤272。
在步骤272中,JSP模拟器100调用其DoEndTag()(处理结束标签())方法。DoEndTag()也是由定制标签句柄332实现,并且当JSP容器100处理结束标签218时被调用。在此方法中,句柄332可以做它想做的任何事情。它通常向输出流112写入某些内容。它还通过返回值指示JSP容器100是应当继续并且处理更多标签还是立即停止。在“JavaServer Pages(TM)Specification”Version 2.0.Sun Microsystems,Copyright 2003中描述了所有这些方法。
在步骤274中,JSP模拟器100确定响应是否是Skip_page(跳过页面)。如果是,则在步骤276中,JSP模拟器100安排跳过页面的其余部分并且在步骤278终止,从而向步骤208返回控制,以便在树302中仍然存在JSP元素304时处理下一个JSP元素304。
图3中的处理结果是最终标记或输出流112。此输出是通常作为对由浏览器做出的网络请求的响应而被发送给浏览器的文本。
相对于现有技术的优点本发明的优点是提供了一种用于模拟Java服务器页面的处理的系统和方法。
替换实施例本发明可以采用全硬件实施例、全软件实施例或者既包含硬件又包含软件元素的实施例的形式。在优选实施例中,用软件来实现本发明,所述软件包括但不限于固件、驻留软件、微代码等。
此外,参考图6,本发明可以采用能够从计算机可用或计算机可读介质120访问的计算机程序产品的形式,所述计算机可用或计算机可读介质120提供用于由计算机124或任何指令执行系统执行或者与计算机124或任何指令执行系统结合使用的程序代码122。出于这一描述的目的,计算机可用或计算机可读介质120可以是可包含、存储、传送、传播或传输用于由指令执行系统、装置或设备124使用或者与指令执行系统、装置或设备124结合使用的程序的任何装置。
介质120可以是电子、磁、光、电磁、红外或半导体系统(或装置或设备)或者传播介质。计算机可读介质的示例包括半导体或固态存储器、磁带、可拆卸计算机盘、随机存取存储器(RAM)、只读存储器(ROM)、硬磁盘和光盘。光盘的当前示例包括致密盘-只读存储器(CD-ROM)、致密盘-读/写(CD-R/W)和DVD。
适合存储和/或执行程序代码的数据处理系统将包括通过系统总线直接或间接耦接到存储器元件的至少一个处理器124。存储器元件可以包括在实际执行程序代码期间采用的本地存储器、大容量存储器、以及高速缓冲存储器,所述高速缓冲存储器提供至少一些程序代码的临时存储,以便减少在执行期间必须从大容量存储器检索代码的次数。
输入/输出或I/O设备(包括但不限于键盘、显示器、指示设备等)可以直接或者通过中间I/O控制器耦接到所述系统。
网络适配器也可以耦接到所述系统,以便允许数据处理系统通过中间专用或公共网络耦接到其它数据处理系统或远程打印机或存储设备。调制解调器、电缆调制解调器和以太网卡只是目前可以获得的网络适配器的类型中的一些。
因此,本发明的保护范围仅由所附权利要求及其等同物限定。
权利要求
1.一种用于模拟服务器页面的处理的方法,包括读取所述服务器页面,包括识别对定制标签库的任何调用;模拟对在所述服务器页面中经识别的定制标签的任何调用;以及由此,在运行时动态地产生和处理所述服务器页面。
2.如权利要求1所述的方法,还包括所述调用有选择地包括开始标签、调用页面上下文进栈主体、调用主体标签设置主体内容、调用主体标签处理初始化主体、在主体之后处理以及处理结束标签。
3.如权利要求1所述的方法,还包括发现和分析用于此服务器上下文的标签语言定义TLD文件;分析所述服务器页面,以便为树的每个元素创建节点树;创建和初始化页面上下文对象;依序处理所述树,以便将每个所述节点识别为模板文本、定制标签开始、定制标签结束以及表达式语言EL表达式之一;响应于此节点是模板文本,将所述文本直接写入最终标记;响应于此节点是定制标签开始,处理定制标签开始方法,包括验证属性的正确性,包括所需属性是否存在;如果所述TLD文件需要标签主体为空,则验证所述标签主体是否为空;设置标签句柄实例的性质,以包括所述页面上下文、任何父标签、以及根据评价任何EL表达式所确定的任何属性值;将关于此定制标签的信息推到标签状态栈上;从所述定制标签开始方法接收响应代码,所述响应代码是跳过主体、评价主体包括和评价主体缓冲之一;响应于所述响应代码是跳过主体,跳过主体;响应于所述响应代码是评价主体包括和评价主体缓冲之一,调用用于页面上下文进栈主体、主体标签组主体内容和主体标签处理初始化主体的方法;响应于此代码是标签结束,处理定制标签结束方法,包括确定此定制标签是否是迭代以及所述主体是否已被处理,并且如果不是,则调用处理结束标签方法;响应于此定制标签不是迭代并且所述主体已被处理,调用在主体之后处理方法,以便处理每个剩余的迭代并且随后调用所述处理结束标签方法;响应于来自所述处理结束标签方法的跳过网页响应,安排将要跳过的这一页面的剩余部分;响应于此节点是EL表达式,评价所述EL表达式并且将结果写入所述最终标记。
4.如权利要求3所述的方法,所述最终标记包括被处理为纯文本的模板文本、定制标签评价以及EL表达式。
5.如权利要求2所述的方法,还包括所述调用有选择地包括Java dostarttag()、调用pagecontext.pushbody()、调用bodytag.setbodycontent()、调用bodytag.doinitbody()、doafterbody()和doendtag()方法。
6.如权利要求1所述的方法,所述服务器页面是Java服务器页面JSP并且还包括当分析所述服务器页面时,将被确定为模板文本的任何文本直接写入到最终标记。
7.一种用于在运行时模拟服务器页面的处理的系统,包括定制标签库;服务器页面模拟器;所述服务器页面模拟器,用于读取所述服务器页面,包括识别对所述定制标签库的任何调用;所述服务器页面模拟器还用于模拟对在所述服务器页面中经识别的所述定制标签的任何调用;和由此,在运行时动态产生和处理所述服务器页面。
8.如权利要求7所述的系统,还包括所述调用有选择地包括开始标签、调用页面上下文进栈主体、调用主体标签设置主体内容、调用主体标签处理初始化主体、在主体之后处理和处理结束标签。
9.如权利要求7所述的系统,还包括标签语言定义TLD文件;所述服务器页面模拟器还用于发现和分析用于此服务器上下文的标签语言定义TLD文件;所述服务器页面模拟器还用于分析所述服务器页面,以便为树的每个元素创建节点树;所述服务器页面模拟器还用于创建和初始化页面上下文对象;所述服务器页面模拟器还用于依序处理所述树,以便将每个所述节点识别为模板文本、定制标签开始、定制标签结束以及表达式语言EL表达式之一;所述服务器页面模拟器还响应于这一节点是模板文本而将所述文本直接写入最终标记;所述服务器页面模拟器还响应于这一节点是定制标签开始而处理定制标签开始方法,包括验证属性的正确性、包括所需属性是否存在;如果所述TLD文件需要标签主体为空,则验证标签主体是否为空;设置标签句柄实例的性质,以便包括所述页面上下文、任何父标签、以及根据评价任何EL表达式所确定的任何属性值;将关于此定制标签的信息推到标签状态栈上;从所述定制标签开始方法接收响应代码,所述响应代码是跳过主体、评价主体包括和评价主体缓冲之一;响应于所述响应代码是跳过主体,跳过主体;响应于所述响应代码是评价主体包括和评价主体缓冲之一,调用用于页面上下文进栈主体、主体标签组主体内容以及主体标签作初始化主体的方法;所述服务器页面模拟器还响应于这一节点是标签结束而用于处理定制标签结束方法,包括确定此定制标签是否是迭代以及所述主体是否已被处理,并且如果不是,则调用处理结束标签方法;响应于这一定制标签不是迭代并且所述主体已被处理,调用在主体之后处理方法,以处理每个剩余迭代并且随后调用所述处理结束标签方法;响应于来自所述处理结束标签方法的跳过网页响应,安排将要跳过的这一页面的剩余部分;所述服务器页面模拟器还响应于这一节点是EL表达式而用于评价所述EL表达式并且将结果写入所述最终标记。
10.如权利要求9所述的系统,所述最终标记包括被处理为纯文本的模板文本、定制标签评价以及EL表达式。
11.如权利要求8所述的系统,还包括所述调用有选择地包括Java dostarttag()、调用pagecontext.pushbody()、调用bodytag.setbodycontent()、调用bodytag.doinitbody()、doanerbody()和doendtag()方法。
12.如权利要求7所述的系统,所述服务器页面是Java服务器页面JSP并且还包括所述服务器页面模拟器还用于在分析所述服务器页面时,将被确定为模板文本的任何文本直接写入最终标记。
13.如权利要求1所述的方法,还包括分析每个所述服务器页面,以便为所述服务器页面的每个元素创建节点树;将每个所述节点识别为模板文本、定制标签开始、定制标签结束以及表达式语言EL表达式之一;对于每个模板文本节点,将文本直接写入最终标记;对于每个定制标签开始和定制标签结束节点对,有选择地跳过、正常处理、以及作为成批数据提供给标签实现;以及对于每个EL表达式节点,评价所述EL表达式并将结果写入最终标记。
全文摘要
在运行时模拟服务器页面的处理。系统包括定制标签库和服务器页面模拟器,所述服务器页面模拟器用于读取服务器页面,包括识别对定制标签库的任何调用并且还用于模拟对在服务器页面中经识别的定制标签的任何调用,以及由此在运行时动态产生和处理服务器页面。分析每个服务器页面,以便为所述页面的每个元素创建节点树并且每个节点被识别为模板文本、定制标签开始、定制标签结束以及表达式语言(EL)表达式之一。对于每个模板文本节点,将文本直接写入最终标记。对于每个定制标签节点,返回代码指示所述主体应当被跳过、被正常处理、或者作为成批数据而被提供给标签实现。对于每个EL表达式节点,评价所述EL表达式并将结果写入最终标记。
文档编号G06F9/46GK1987783SQ200610171719
公开日2007年6月27日 申请日期2006年12月19日 优先权日2005年12月20日
发明者詹姆斯·P·亨尼西 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1