jsp+oracle數(shù)據(jù)庫/servlet分頁思想

          首先讓我們構建一個PageControl對象將分頁所涉及到的一些關鍵的"控制數(shù)據(jù)"予以封裝.      
             
             
            具體說明如下:      
             
            public   int   curPage   ;   //當前是第幾頁      
            public   int   maxPage   ;   //一共有多少頁      
            public   int   maxRowCount   ;   //一共有多少行      
            public   int   rowsPerPage   ;   //每頁有多少行      
            public   yourDataType   yourdata   ;//裝載每頁的數(shù)據(jù)    
            關于每頁所要顯示的"實體數(shù)據(jù)"的載體,其實現(xiàn)方式多種多樣,比如說在IBM電子商務系統(tǒng)MPE中是以bean的形式,這是一種面向對象的實現(xiàn),比較的簡略的實現(xiàn)可用java.util.Vector等,為了避免分散對核心問題的的注意力,這里用youDataType予以抽象.      
             
            public   void   countMaxPage()   {       //根據(jù)總行數(shù)計算總頁數(shù)        
            if   (this.maxRowCount   %   this.rowsPerPage==0){    
                  this.maxPage   =   this.maxRowCount/this.rowsPerPage;    
            }else{    
                  this.maxPage   =   this.maxRowCount/this.rowsPerPage   +   1;    
                    }    
            }    
                 
            this.rowsPerPage其實應從配置文件中獲得,這樣做的好處是程序能在運行中讀取從而實現(xiàn)動態(tài)(再)配置,簡略的做法是直接寫在程序中。      
            public   PageControl(yourPersistenceLayer   yourPL)      
            這是一個參數(shù)類型為yourPersistenceLayer的構造函數(shù).PersistenceLayer是直接同數(shù)據(jù)庫打交道的一層,不同的公司都有不同的實現(xiàn),比如說Microsoft的ADO就可以看作是一PersistenceLayer,IBM在其MPE系統(tǒng)中也實現(xiàn)了一個龐大的PersistenceLayer,.   一種投機的做法是不要PersistenceLayer,或者可以說是淡化該層,這樣做勢必降低系統(tǒng)的穩(wěn)定性,可重用性,可擴展性。   具體可以參考附錄文獻.在這個構造函數(shù)中,有這樣幾個主要操作:      
            this.maxRowCount   =   yourPL.getAvailableCount();     //得到總行數(shù)    
            this.yourdata         =   yourPL.getResult();                     //得到要顯示于本頁的數(shù)據(jù)    
            this.countMaxPage();                                                   //計算總頁數(shù)    
             
                 
             
             
            關于this.yourdata這里還有一個細節(jié):在從數(shù)據(jù)庫中獲取"實體數(shù)據(jù)"時,通常有兩種方式:(A)一次性獲取所有數(shù)據(jù);(B)每次根據(jù)當前頁號,獲取本頁的數(shù)據(jù),將其它數(shù)據(jù)予以拋棄;考慮到數(shù)據(jù)往往是大量甚至是海量的,如果一次性的獲取,那么這些數(shù)據(jù)必然大量占用服務器內存資源,使系統(tǒng)性能大大降低,因此建議使用方法(A)    
             
            接下來的工作就可以交給servlet和jsp了      
            在servlet的service()方法中只需進行如下操作:      
            PageControl     pageCtl   =   yourBusinessObject.listData(req.getParameter("jumpPage"));    
            req.setAttribute("pageCtl",pageCtl);    
             
                 
            說明:yourBusinessObject封裝了商業(yè)邏輯,是位于Business   Logic   Layer中的一個對象,運用OOAD的方法,封裝商業(yè)對象,在Persistent   Layer之上組建堅實的Business   Logic   Layer同樣是構建大型電子商務架構的關鍵所在。本文的關注點只是分頁處理,暫不詳細論述.    
             
            在每個想要實現(xiàn)翻頁顯示數(shù)據(jù)的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)實現(xiàn)了這樣一個邏輯:如果所取得數(shù)據(jù)不足一頁,那么就不用進行翻頁顯示。      
            我們注意到<%@   include   file="/yourpath/pageman.jsp"%>這使得真正的翻頁部分完全得到了重用.    
             
            那么pageman.jsp到底做了些什么呢?它實現(xiàn)了經常做翻頁處理的人耳熟能詳?shù)倪壿?nbsp;     
            (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>頁    
             
                 
            在頁面上會呈現(xiàn)出形如下圖的外觀,至于想要修飾美化,那是美工的工作所在。    
             
             
             
            最后附上用于頁面跳轉的javascript公共函數(shù):      
            function   Jumping(){    
                document.PageForm.submit();    
                return   ;    
            }    
             
            function   gotoPage(pagenum){    
                document.PageForm.jumpPage.value   =   pagenum;    
                document.PageForm.submit();    
                return   ;    
            }    
             
                 
             
             
            如果他們位于名為TurnPage.js的文件中,那么在每個要實現(xiàn)翻頁數(shù)據(jù)顯示的jsp頁面中加上這樣的引用:      
            <SCRIPT   Language="JavaScript"   src="/yourPath/TurnPage.js"></SCRIPT>

          posted on 2009-04-16 15:14 MichaelLee 閱讀(1228) 評論(1)  編輯  收藏 所屬分類: SQL

          評論

          # re: jsp+oracle數(shù)據(jù)庫/servlet分頁思想 2012-10-25 16:55 胡姐姐

          讓他問問客戶發(fā)skfaig就是感覺撒阿里看見飛灑就過來撒u干哦i我就關了手機佛i收購價是根據(jù)死狗i啊颯颯掛了個 阿嬌飛灑u哦噶  回復  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統(tǒng)計

          公告

          ====Michael Lee====
          =Java Sofware Engineer=
          =Work @ Beijing=
          ---再煩,也別忘微笑;再急,也要注意語氣;再苦,也別忘堅持;再累,也要愛自己!---
          ---低調做人,你會一次比一次穩(wěn)健;高調做事,你會一次比一次優(yōu)秀---
          ---成功的時候不要忘記過去;失敗的時候不要忘記還有未來---

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 留坝县| 大足县| 恩施市| 蓝田县| 和顺县| 田东县| 海阳市| 龙里县| 仙游县| 乐昌市| 南平市| 旬阳县| 文化| 黑河市| 昌邑市| 莱阳市| 商水县| 沙洋县| 丹棱县| 嵩明县| 四会市| 乐昌市| 肇源县| 梅河口市| 田阳县| 青冈县| 铜川市| 衢州市| 汽车| 辉县市| 正镶白旗| 富平县| 东乡县| 屯门区| 桃源县| 建宁县| 尉氏县| 武穴市| 林芝县| 宕昌县| 涿州市|