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

          首先讓我們構(gòu)建一個PageControl對象將分頁所涉及到的一些關(guān)鍵的"控制數(shù)據(jù)"予以封裝.      
             
             
            具體說明如下:      
             
            public   int   curPage   ;   //當前是第幾頁      
            public   int   maxPage   ;   //一共有多少頁      
            public   int   maxRowCount   ;   //一共有多少行      
            public   int   rowsPerPage   ;   //每頁有多少行      
            public   yourDataType   yourdata   ;//裝載每頁的數(shù)據(jù)    
            關(guān)于每頁所要顯示的"實體數(shù)據(jù)"的載體,其實現(xiàn)方式多種多樣,比如說在IBM電子商務(wù)系統(tǒng)MPE中是以bean的形式,這是一種面向?qū)ο蟮膶崿F(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其實應(yīng)從配置文件中獲得,這樣做的好處是程序能在運行中讀取從而實現(xiàn)動態(tài)(再)配置,簡略的做法是直接寫在程序中。      
            public   PageControl(yourPersistenceLayer   yourPL)      
            這是一個參數(shù)類型為yourPersistenceLayer的構(gòu)造函數(shù).PersistenceLayer是直接同數(shù)據(jù)庫打交道的一層,不同的公司都有不同的實現(xiàn),比如說Microsoft的ADO就可以看作是一PersistenceLayer,IBM在其MPE系統(tǒng)中也實現(xiàn)了一個龐大的PersistenceLayer,.   一種投機的做法是不要PersistenceLayer,或者可以說是淡化該層,這樣做勢必降低系統(tǒng)的穩(wěn)定性,可重用性,可擴展性。   具體可以參考附錄文獻.在這個構(gòu)造函數(shù)中,有這樣幾個主要操作:      
            this.maxRowCount   =   yourPL.getAvailableCount();     //得到總行數(shù)    
            this.yourdata         =   yourPL.getResult();                     //得到要顯示于本頁的數(shù)據(jù)    
            this.countMaxPage();                                                   //計算總頁數(shù)    
             
                 
             
             
            關(guān)于this.yourdata這里還有一個細節(jié):在從數(shù)據(jù)庫中獲取"實體數(shù)據(jù)"時,通常有兩種方式:(A)一次性獲取所有數(shù)據(jù);(B)每次根據(jù)當前頁號,獲取本頁的數(shù)據(jù),將其它數(shù)據(jù)予以拋棄;考慮到數(shù)據(jù)往往是大量甚至是海量的,如果一次性的獲取,那么這些數(shù)據(jù)必然大量占用服務(wù)器內(nèi)存資源,使系統(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同樣是構(gòu)建大型電子商務(wù)架構(gòu)的關(guān)鍵所在。本文的關(guān)注點只是分頁處理,暫不詳細論述.    
             
            在每個想要實現(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)了經(jīng)常做翻頁處理的人耳熟能詳?shù)倪壿?nbsp;     
            (A)第一頁時不能再向前翻;    
            (B)最后一頁時不能再向后翻;    
            同時能夠進行頁面任意跳轉(zhuǎn),具體代碼如下:      
            每頁<%=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%>)">尾頁    
            <%}%>    
            轉(zhuǎn)到第<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)出形如下圖的外觀,至于想要修飾美化,那是美工的工作所在。    
             
             
             
            最后附上用于頁面跳轉(zhuǎ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我就關(guān)了手機佛i收購價是根據(jù)死狗i啊颯颯掛了個 阿嬌飛灑u哦噶  回復(fù)  更多評論   


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


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

          導(dǎo)航

          統(tǒng)計

          公告

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

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 灯塔市| 富阳市| 呼图壁县| 梓潼县| 汕头市| 云和县| 阜新市| 利川市| 荔浦县| 平泉县| 塔河县| 闵行区| 济阳县| 光泽县| 孟津县| 重庆市| 库车县| 天全县| 汾西县| 任丘市| 积石山| 玛纳斯县| 永年县| 岚皋县| 余江县| 临城县| 中宁县| 巩义市| 乌鲁木齐市| 东宁县| 普格县| 金华市| 佛坪县| 额济纳旗| 盐津县| 读书| 峡江县| 犍为县| 开阳县| 成安县| 句容市|