jsp+oracle数据库/servlet分页思想

首先让我们构建一个PageControl对象将分页所涉及到的一些关键的"控制数据"予以封装.      
   
   
  具体说明如下:      
   
  public   int   curPage   ;   //当前是第几页      
  public   int   maxPage   ;   //一共有多少页      
  public   int   maxRowCount   ;   //一共有多少行      
  public   int   rowsPerPage   ;   //每页有多少行      
  public   yourDataType   yourdata   ;//装载每页的数据    
  关于每页所要显示的"实体数据"的载体,其实现方式多种多样,比如说在IBM电子商务系统MPE中是以bean的形式,这是一种面向对象的实现,比较的简略的实现可用java.util.Vector等,为了避免分散对核心问题的的注意力,这里用youDataType予以抽象.      
   
  public   void   countMaxPage()   {       //根据总行数计算总页数        
  if   (this.maxRowCount   %   this.rowsPerPage==0){    
        this.maxPage   =   this.maxRowCount/this.rowsPerPage;    
  }else{    
        this.maxPage   =   this.maxRowCount/this.rowsPerPage   +   1;    
          }    
  }    
       
  this.rowsPerPage其实应从配置文件中获得,这样做的好处是程序能在运行中读取从而实现动态(再)配置,简略的做法是直接写在程序中。      
  public   PageControl(yourPersistenceLayer   yourPL)      
  这是一个参数类型为yourPersistenceLayer的构造函数.PersistenceLayer是直接同数据库打交道的一层,不同的公司都有不同的实现,比如说Microsoft的ADO就可以看作是一PersistenceLayer,IBM在其MPE系统中也实现了一个庞大的PersistenceLayer,.   一种投机的做法是不要PersistenceLayer,或者可以说是淡化该层,这样做势必降低系统的稳定性,可重用性,可扩展性。   具体可以参考附录文献.在这个构造函数中,有这样几个主要操作:      
  this.maxRowCount   =   yourPL.getAvailableCount();     //得到总行数    
  this.yourdata         =   yourPL.getResult();                     //得到要显示于本页的数据    
  this.countMaxPage();                                                   //计算总页数    
   
       
   
   
  关于this.yourdata这里还有一个细节:在从数据库中获取"实体数据"时,通常有两种方式:(A)一次性获取所有数据;(B)每次根据当前页号,获取本页的数据,将其它数据予以抛弃;考虑到数据往往是大量甚至是海量的,如果一次性的获取,那么这些数据必然大量占用服务器内存资源,使系统性能大大降低,因此建议使用方法(A)    
   
  接下来的工作就可以交给servlet和jsp了      
  在servlet的service()方法中只需进行如下操作:      
  PageControl     pageCtl   =   yourBusinessObject.listData(req.getParameter("jumpPage"));    
  req.setAttribute("pageCtl",pageCtl);    
   
       
  说明:yourBusinessObject封装了商业逻辑,是位于Business   Logic   Layer中的一个对象,运用OOAD的方法,封装商业对象,在Persistent   Layer之上组建坚实的Business   Logic   Layer同样是构建大型电子商务架构的关键所在。本文的关注点只是分页处理,暂不详细论述.    
   
  在每个想要实现翻页显示数据的jsp页面中,我们的工作也很简单,其代码是公式化的:      
  <jsp:useBean   id="pageCtl"   class="yourpackage.PageControl"   scope="request"></jsp:useBean>    
  <%if(pageCtl.maxPage!=1)){%>    
  <form   name="PageForm"   action="/servlet/yourpackage.yourservlet"   method="post">    
  <%@   include   file="/yourpath/pageman.jsp"%>      
  </form>    
  <%}%>    
   
       
   
   
  说明:      
  if(pageCtl.maxPage!=1)实现了这样一个逻辑:如果所取得数据不足一页,那么就不用进行翻页显示。      
  我们注意到<%@   include   file="/yourpath/pageman.jsp"%>这使得真正的翻页部分完全得到了重用.    
   
  那么pageman.jsp到底做了些什么呢?它实现了经常做翻页处理的人耳熟能详的逻辑      
  (A)第一页时不能再向前翻;    
  (B)最后一页时不能再向后翻;    
  同时能够进行页面任意跳转,具体代码如下:      
  每页<%=pageCtl.rowsPerPage%>行    
  共<%=pageCtl.maxRowCount%>行    
  第<%=pageCtl.curPage%>页    
  共<%=pageCtl.maxPage%>页    
   
   
  <%if(pageCtl.curPage==1){   out.print("   首页   上一页");   }else{   %>          
  <A   HREF="javascript:gotoPage(1)">首页    
  <A   HREF="javascript:gotoPage(<%=pageCtl.curPage-1%>)">上一页    
  <%}%>    
  <%if(pageCtl.curPage==pageCtl.maxPage){   out.print("下一页   尾页");   }else{   %>          
  <A   HREF="javascript:gotoPage(<%=pageCtl.curPage+1%>)">下一页    
  <A   HREF="javascript:gotoPage(<%=pageCtl.maxPage%>)">尾页    
  <%}%>    
  转到第<SELECT   name="jumpPage"   onchange="Jumping()">    
            <%   for(int   i=1;i<=pageCtl.maxPage;i++)   {    
  if   (i==   pageCtl.curPage){    
  %>    
            <OPTION   selected   value=<%=i%>><%=i%></OPTION>    
    <%}else{%>    
            <OPTION   value=<%=i%>><%=i%></OPTION>    
            <%}}%>          
            </SELECT>页    
   
       
  在页面上会呈现出形如下图的外观,至于想要修饰美化,那是美工的工作所在。    
   
   
   
  最后附上用于页面跳转的javascript公共函数:      
  function   Jumping(){    
      document.PageForm.submit();    
      return   ;    
  }    
   
  function   gotoPage(pagenum){    
      document.PageForm.jumpPage.value   =   pagenum;    
      document.PageForm.submit();    
      return   ;    
  }    
   
       
   
   
  如果他们位于名为TurnPage.js的文件中,那么在每个要实现翻页数据显示的jsp页面中加上这样的引用:      
  <SCRIPT   Language="JavaScript"   src="/yourPath/TurnPage.js"></SCRIPT>

posted on 2009-04-16 15:14 MichaelLee 阅读(1201) 评论(1)  编辑  收藏 所属分类: SQL

评论

# re: jsp+oracle数据库/servlet分页思想 2012-10-25 16:55 胡姐姐

让他问问客户发skfaig就是感觉撒阿里看见飞洒就过来撒u干哦i我就关了手机佛i收购价是根据死狗i啊飒飒挂了个 阿娇飞洒u哦噶  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

公告

====Michael Lee====
=Java Sofware Engineer=
=Work @ Beijing=
---再烦,也别忘微笑;再急,也要注意语气;再苦,也别忘坚持;再累,也要爱自己!---
---低调做人,你会一次比一次稳健;高调做事,你会一次比一次优秀---
---成功的时候不要忘记过去;失败的时候不要忘记还有未来---

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜