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

技术编号:2919350 阅读:178 留言:0更新日期:2012-04-11 18:40
在运行时模拟服务器页面的处理。系统包括定制标签库和服务器页面模拟器,所述服务器页面模拟器用于读取服务器页面,包括识别对定制标签库的任何调用并且还用于模拟对在服务器页面中经识别的定制标签的任何调用,以及由此在运行时动态产生和处理服务器页面。分析每个服务器页面,以便为所述页面的每个元素创建节点树并且每个节点被识别为模板文本、定制标签开始、定制标签结束以及表达式语言(EL)表达式之一。对于每个模板文本节点,将文本直接写入最终标记。对于每个定制标签节点,返回代码指示所述主体应当被跳过、被正常处理、或者作为成批数据而被提供给标签实现。对于每个EL表达式节点,评价所述EL表达式并将结果写入最终标记。

【技术实现步骤摘要】

本专利技术涉及计算机编程。更具体地,本专利技术涉及使用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程序员可以专心于编程逻辑,任何一方都不必担心与其它方拥有的文件部分的干扰。为了处理这一需求,引入了定制标签的概念、以及提供那些标签的实现的定制标签库。使用这样的标签,为了示出午餐菜单,页面编写者可以像下面那样创建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代码有关的等待本文档来自技高网...

【技术保护点】
一种用于模拟服务器页面的处理的方法,包括:读取所述服务器页面,包括识别对定制标签库的任何调用;模拟对在所述服务器页面中经识别的定制标签的任何调用;以及由此,在运行时动态地产生和处理所述服务器页面。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:詹姆斯P亨尼西
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利