实现机制 从各种检索方式使用的效率来说,结果集对象的缓存是可行的。在JDBC2.0中,支持可滚动的结果集,能够任意取得结果集的一个子集。同时,可以指定能够被缓存的返回记录数量,这样就不需要一次返回全部的记录(对分页操作来说,该项功能具有实际的意义),当需要新的记录时,再到数据库中取得并替换掉缓存中的旧记录。然而,各个数据库厂商对JDBC2.0中的结果集以各自不同的方式实现,因此,效率各不相同。Oracle在这方面是做得比较完善的。 检索操作的具体流程为:用户通过检索页面(如search.jsp)构建检索的条件(包括输入关键词、选择范围等),提交后到检索处理程序(如SearchServlet),分析用户提交的数据并且构建一个合理的SQL查询语句;由检索执行程序(如LocalEngine)来执行该SQL查询语句,同时将执行返回的结果集进行缓存,并重新定向到检索结果页面(如searchresult.jsp);由检索结果页面提交请求到结果处理程序(如SearchResultServlet)来获取所需的数据,格式化并显示信息。 图1:检索序列图 网络检索的关键在于两个方面:检索的执行和结果的显示。如果从用户的角度来考虑,比较关心的是检索的准确性、结果界面的友好性及检索响应速度。 XML结合数据绑定的结果显示 XML在数据表现和数据交换方面优势使其发展潜力巨大。但是直接呈现XML数据给用户并不是最好的模式,需要利用浏览器的功能来完善数据的显示。一种有效传输XML的方式是利用MSXML解释器中的XMLHTTP对象,它允许你打开一个到服务器上的HTTP连接,发送一些数据和取回一些数据,并且所有的这一切都是在很少的几段脚本中就能够实现。使用XMLHTTP对象通常是进行XML数据交换,但其他格式的数据也是允许的。在作这一系列事情时,不需对当前网页进行重加载,用户甚至不知道后台在作些什么,网页不用重新刷新就已经获取了新的数据。 将客户端的请求发送到服务器后,通过XMLHTTP对象可以接受返回的数据。利用数据岛(Data Island)将我们返回的XML数据嵌入到页面中去。扩展标记语言XML使用标准的方式来描述和交换结构化数据;XML的数据以开放的、基于文本的格式进行描述,并通过标准HTTP协议传输。XML本身的特性决定了它天生就是一种灵活强大的数据源对象(DSO)。IE4.0使用JAVA APPLET来实现XML DSO;IE5.0支持Data Island,用户可以直接用<XML>标记定义的数据作为DSO。 数据绑定(Data Binding)并不是一个新概念,IE 4.0就已对其给予了丰富的支持。但是,数据绑定并未受到应有的重视,许多开发者似乎更加愿意使用服务器端脚本(Server Script)的方法。然而实际上,无论是在动态网页的代码实现方面,还是在动态网页的工作效率方面,数据绑定的效率都比后者更高。 可绑定的HTML元素共分为两大类:单值对象(Single-valued Consumer)和表对象(Tabular Consumer)。单值对象显示DSO提供的当前记录的某一个域,而表对象中的每行元素则分别对应一条记录中不同的域,并以此为模板重复显示数据集中的每条记录。数据显示对象既可以在设计时绑定到DSO,也可以在运行时动态绑定。 利用数据绑定,减轻了服务器的负担。服务器应用程序可以专注于数据的产生,而数据的显示和操作由客户端脚本来完成。由于不需要刷新页面,我们能够将结果记录总数、当前页码等信息保存在客户端,并且根据这些信息来生产总页数、分页显示的代码。 结果集缓存的检索 利用JDBC2.0的特性,我们可以更加自由地操作结果集对象,移动游标向前、向后以及指向任意位置(将ResultSet的类型设置为TYPE_SCROLL_INSENSITIVE或TYPE_SCROLL_SENSITIVE),同时能够指定一次取得记录的数量。检索应用的类图如下: 图6:检索操作类图 ResultHelper:用于检索操作的帮助类。通过该类来执行检索、获取记录总数、获取结果集的XML数据。 QueryProperties:生成实际执行的、完整的数据库操作SQL语句。 QueryBean:进行实际的数据库操作,提供对结果集的使用操作。该类也实现HttpSessionBindingListener接口,当不再需要该类的缓存数据时,能够关闭数据库连接。使用Iterator模式。 PageGlobals:检索操作的公共变量,如默认页面大小、默认开始页面、默认缓存时间等。 总结 实际使用的情况表明,结果集的缓存和XML数据绑定能够大大提高检索和显示的效率。 在服务器端,不需要使用JSP来生成检索结果页面,结果数据以XML来表示,能够提供给任何类型的客户端使用,而不仅仅局限于浏览器(类似于Web服务的概念);在网络传输方面,每次只是传递需要的XML,很大程度上减少了传输的数据量;客户端使用XMLHTTP对象来实现数据提交到服务器,形成一种后台操作的形式,“安静”地从服务器上取得数据;采用数据绑定的形式来呈现数据,生成网页的效率明显地提高了,而且编程工作量少,使用灵活。 采用XML技术、数据绑定的方式来完成高效的检索结果呈现,在编程实现方面会带来一定的复杂性,但是,复杂的工作是高效率的代价,可以根据实际情况来决定采用的方式。