微智科技网
您的当前位置:首页基于JAVA WEB的分页研究

基于JAVA WEB的分页研究

来源:微智科技网
基于web分页技术的研究余凯

(湖北科技学院,咸宁437100)摘要随着社交网络的兴起,对于有大量数据的情况下,所有的内容显示在一页是不现实的,通常的做法就是采用分页显示技术,每页显示一部分数据。根据数据量和具体应用情况,可以采取不同的分页策略。关键词:分页优化结构化查询语言

TheResearchofPagingTechnologyBasedonWebYUKAI(HubeiUniversityofScienceandTechnology,Xianning437100)Abstractwiththeriseofsocialnetworking,forthecaseoflargeamountsofdata,Allofthecontentdisplayintheapageisunrealistic,theusualpracticeistopaginationdisplayasubsetofdataperpage.Basedontheamountofdataandthespecificapplication,youcantakeadifferentpagingstrategies.KeywordspagingoptimizeSQL1引言

在JSP页面中,访问数据库并读取一个数据结果集时,如果记录数太多,一个是会占用服务器的大量内存,造成服务器负荷过重,数据传输和显示速度缓慢得难以忍受;另一方面,一个JSP页面展示空间是有限的,不可能列出所有的数据库记录,一次传输所有的数据到客户端也非常的不合理。因此,当检索的数据很多时,通常需要分页显示数据,并要实现翻页。建立动态Web应用,分页浏览功能不可或缺,这是数据库与Web页面处理中非常常见的问题。其解决方案有很多,并且随着技术的发展,许多新的方案被提出来。本文将针对数据分页问题给出几种解决方案,并叙述较好的方式。2几种常见的分页解决方案

2.1使用游标定位,丢弃不属于页面的数据

直接使用ResultSet来处理。ResultSet是直接在数据库上建立游标,然后通过ResultSet的行位置定位接口来获得指定行位置的记录。这是一种简单的分页显示实现技术,在每个页面先查询得到所有的数据航,接着使用游标定位到结果集中页面对应的行数,读取并显示该页面的数据,然后关闭数据库连接,丢弃该页面之外的结果集数据。这种分页技术适用于数据量极少的查询,但对于数据量大的查询操作来说效率非常低,因为这种操作需要范围内所有的数据行,从而浪费了大量的内存资源。减少了数据库连接对象的多次分配获取,减少了对数据库的SQL查询执行。而这些资源都是十分宝贵的有的。由于数据库的查询及其分页处理是直接使用JDBC的,并在分页中是使用RseultSet的查询结果集-游标形式实现的,并且每个客户对应一个会话,每个会话对应一个数据库连接和一个结果集(游标),数据库连接和游标是在会话终止时才释放的。在用例分页查询的整个会话期间,一个用户的分页查询就要占用一个数据库连接对象和结果集的游标,这种方式对数据库的访问资源占用比较大,并且其利用率不是很高。2.2使用缓存结果集,一次查询所有数据

目前比较广泛使用的分页方式是将查询结果存在HttpSession或状态Bean中,翻页的时候从缓存中取出一页数据显示。这种方法目前被广泛采用,因为它能减少数据库的连接次数,节省数据连接资源,但有两个主要的缺点:一是用户可能看到的是过期数据;二是如果数据量非常大时第一查询遍历结果集会耗费很长时间,并且缓存的数据也会占用大量的内存,效率明显下降。因此数据库访问及其数据库的处理可能是个瓶颈。2.3使用数据库提供的定位集的SQL语句,返回特定行的数据

在用户的分页查询请求中,将获取的查询请求的行范围作为参数,通过这些参数生成SQL查询语句,然后请求获得一个数据库连接对象并执行SQL查询,把查询结果范围给用户,最后释放所有数据库访问资源。该方式无论对内存资源的占用还是对数据库资源的占用都是最合理的,是效率最高的一种实现方式,但是由于不同数据库对应的定位行集SQL语句的语法差异很大,如果需要改变Web应用所使用的后台数据库的话,就要修改程序中所有特定数据库的定位行集SQL语句。直接使用数据库产品的提供的对查询的结果集可定位行范围的SQL接口技术。在用户的分页面查询请求中,每次可取得查询请求的行范围的参数,然后使用这些参数生产取得指定行范围的的SQL查询语句,然后每次请求获得一个数据库连接对象并执行SQL查询,把查询的结果返回给用户,最后释放说有的数据库访问资源。这种技术是直接使用数据库产品自己提供的可对查询结果集定位行范围过滤的功能,因此直接利用了数据库的性能对此分页查询的优化功能。对数据库的访问资源(数据库连接对象,数据库游标等)没有浪费,这些资源的充分重复的利用。对查询的结果对Web容器没有什么特别要求。要执行多次数据库SQL查询操作。对每次的分页面操作请求都要指定相应范围的结果集来执行SQL语句的数据库查询操作,这对数据库有一定的影响。对每次分页面查询请求要频繁的从Web容器中获得数据库访问资源(数据库连接对象和数据库游标)。要依赖于具体的数据库产品。因为对没有实现没有提供此技术的数据库产品不能使用此方式。由于每次对数据库的SQL查询操作相对而言耗用的数据资源比较少,并且在实际用户的操作中,有可能用户对查询的所有结果集只是需要查看其中的部分页面。3本文用到的技术简介

3.1

Java语言

Java命名来源于开发人员名字的组合:JamesGosling、ArthurVanHoff和AndyBechtolsheim首字母的缩写。它是一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的,安全的,结构的,中立的,可移植的,性能很优异的,多线程的,动态的语言。它具有以下特点:Java能运行于不同的平台。Java引进虚拟机原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关,Java虚拟机(JavaVirtualMachine)是建立在硬件和操作系统之上,实现Java二进制代码的解释执行功能,提供于不同平台的接口的。Java对程序提供了安全管理器,防止程序的非法访问。Java的编程类似C++,学习过C++的读者将很快掌握Java的精髓。Java舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。Java吸取了C++面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性。类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用。程序员只需把主要精力用在类和接口的设计和应用上。Java提供了众多的一般对象的类,通过继承即可使用父类的方法。在Java中,类的继承关系是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。Java提供的Object类及其子类的继承关系如同一棵倒立的树形,根类为Object类,Object类功能强大,经常会使用到它及其它派生的子类。Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。Java还实现了真数组,避免了覆盖数据的可能,这些功能特征大大提高了开发Java应用程序的周期。并且Java还提供了Null指针检测、数组边界检测、异常出口、Bytecode校验等功能。WEB服务器编程使用的主要是JSP(JavaServerPages)技术,是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。3.2JDBC技术

JDBC(JavaDataBaseConnectivity,Java数据库连接)是一套允许Java与SQL数据库对话的程序设计接口,它是用于执行SQL语句的JavaAPI,是Java应用程序连结数据库、存取数据的一种机制,可以为多种关系数据库提供统一的访问,它由一组用Java语言编写的类和接口组成。由于Java是一个健壮,安全,易于使用的,易于理解且可以从网络中自动download,所以它成为开发数据库应用的一种良好的语言基础。它提供了C,C++,Smalltalk,BASIC,COBOL,and4GLs的许多优点。有了JDBC,用户只需用JDBCAPI写一个程序逻辑,它可以向各种不同的数据库发送SQL语句。所以,在使用Java编程语言编写应用程序时,不用再去为不同的平台编写不同的应用程序。由于Java语言具有跨平台性,所以将Java和JDBC结合起来将使程序员只须写一遍程序就可让它在任何平台上运行,这也进一步体现了Java语言“编写一次,到处运行”的宗旨。JDBC向应用程序开发者提供于数据库的、统一的API,当应用程序被移植到不同的平台或数据库系统,应用程序不变,改变的是驱动程序,驱动程序扮演了多层数据库设计中的中间层(或中间件)的角色。JDBC主要完成以下四方面的工作:加载JDBC驱动程序;建立与数据库的连接;使用SQL语句进行数据库操作并处理结果;关闭相关连接总而言之,JDBCAPI是能体现SQL最基本抽象概念的、最直接的Java接口。它建构在ODBC的基础上,因此,熟悉ODBC的程序员将发现学习JDBC非常容易。JDBC保持了ODBC的基本设计特征。实际上,这两种接口都是基于X/OPENSQL的调用级接口(CLI)。它们的最大的不同是JDBC是基于Java的风格和优点,并强化了Java的风格和优点。JDBC支持两层模型,也支持三层模型访问数据库。两层模型中,一个javaAppple或者一个JA-va应用直接同数据库连接。这就需要能直接被访问的数据库进行连接的JDBC驱动器。用户的SQL语句被传送给数据库,而这些语句执行的结果将被传回给用户。数据库可以在同一机器上,也可以另一机器上通过网络进行连接。这被称为“Client/Server”结构,用户的计算机作为Client,运行数据库的计算机作为Server。这个网络可是intranet,比如连接全体雇员的企业内部网,当然也可以是internet。在三层模型中,命令将被发送到服务的“中间层”,而“中间层”将SQL语句发送到数据库。数据库处理SQL语句并将结果返回“中间层”,然后“中间层”将它们返回用户。MIS管理员将发现三层模型很有吸引力,因为“中间层”可以进行对访问的控制并协同数据库的更新,另一个优势就是如果有一个“中间层”用户就可以使用一个易用的高层的API,这个API可以由“中间层”进行转换,转换成底层的调用。而且在许多情况下,三层模型可以提供更好的性能。到目前为止,“中间层”通常还是用C或C++实现,以保证其高性能。但随着优化编译器的引入,将java的字节码转换成高效的机器码,用java来实现“中间层”将越来越实际。而JDBC是允许从一个Java“中间层”访问数据库的关键。3.3实现分页显示

目前比较好的分页做法是每次翻页的时候只从数据库里检索页面大小的块区的数据。这样虽然每次翻页都需要查询数据库,但查询出的记录数非常少,网络传输数据量不大,如果使用连接池更能略过最耗时的建立数据库连接过程。而在数据库端有各种成熟的优化技术用于提高查询速度,比在应用服务器层做缓存有效多了。取得页码从数据中提取数据显示在IE中点击页码链接商品编号商品名称商品类别<%Stringstr=(String)request.getParameter(\"page\");if(str==null){str=\"0\";}intpagesize=10;//页面大小rsAll.last();intrecordCount=rsAll.getRow();//总行数intmaxPage=0;maxPage=(recordCount%pagesize==0)?(recordCount/pagesize):(recordCount/pagesize+1);//总页数intcurrentPage=Integer.parseInt(str);if(currentPage<1){currentPage=1;}else{if(currentPage>maxPage){currentPage=maxPage;}}rsAll.absolute((currentPage-1)*pagesize+1);//定位记录指针位置for(inti=1;i<=pagesize;i++){%><%=rsAll.getString(\"p_id\")%><%=rsAll.getString(\"p_name\")%><%=rsAll.getString(\"p_type\")%>详情购买<%if(!rsAll.next()){break;}}%>当前页数:[<%=currentPage%>/<%=maxPage%>] <%if(currentPage>1){%>第一页\">上一页<%}if(currentPage\">下一页\">最后一页 <%}rsAll.close();{e.printStackTrace();}%>stmt.close();conn.close();}catch(Exceptione)4结语

在本文的写作过程中参考了网上有关资料,过程中遇到许多难题是我从没有想到的。在整个的学习过程中,我学习了数据库、JSP、HTML、Apache、网站建设的基本思想等重要内容。到现在为止,我还是很庆幸能够学到这么多的内容。这次技术难点有常规分页技术。常规分页技术比较简单,例如在JSP页面中直接分页,采用JSP+Servlet进行分页,结合JSP+JavaBean进行分页等,都很容易实现。JSP页面分页技术实现的关键在于获得当前页面的数据,在ResultSet里获得当前页面的数据是比较简单易于实现的。万能分页技术。万能分页技术相对复杂一些,其实质上是针对不同的表,不同的查询SQL采用可完全复用的代码实现分页,非常灵活,具有很强的通用性。实现的关键在于动态的获得对结果集中字段的描述性信息,并将结果集的数据以HTML形式返回。结合数据库特点进行分页。对于大数据量查询,依赖于ResultSet方式的分页方法在很多时候都是行不通的。此时需要充分利用各种大型数据库SQL的特性和高级功能来进行分页,技术实现的难点在于如何用优化的、特定的SQL语句获得当前页面的数据。整个网分页代码是在参考了资料的情况下完成的。虽然整个代码中还有很多不足,还有一些功能没有完全实现,但是我的确能够感到在我制作过程中技能的提高。由于知识面的问题整个设计还有一些不足,我会在以后工作和学习中不断吸收新的知识,从而弥补自己在动态网络语言方面的不足。参考文献

[1]周作建.jsp分页技术[J].电脑编程技巧,2007,(8)[2]Avedal,黎文译.JSP编程指南[M3.北京:电子工业出版社,2001[3]郑凯.基于JSP的分页与页面保存技术的实现[J].计算机工程,2004,(1)[4]吴浪.一种优化JSP分页显示处理的技术方案[J].韶关学院学报,2006,7(6)[5]腾永昌.Oracle9i数据库管理员使用大全[M].北京:清华大学出版社,2004[6]KevinLoney,GeorgeKoch,eta1.钟鸣等译.Oracle9i参考手册[M].北京:机械工业出版社,2003[7]飞思科技产品研发中心.JSP应用开发详解[M].北京:电子工业出版社,2002[8]萨师煊,王珊.数据库系统概论(第三版)[M].北京:高等教育出版社,2000.[9].JSP中文问题及一套整体解决方案[J].许昌学院学报,2006,25(5):77-80[10]孙东卫,张冀红,李声利.数据库访问技术研究[J].现代电子技术.2002,18(5).20-34.

因篇幅问题不能全部显示,请点此查看更多更全内容