1. 程式人生 > >servlet+mvc實現分頁顯示列表頁

servlet+mvc實現分頁顯示列表頁

實現分頁顯示有好多種方法,有客戶端顯示的用JS,有服務端分頁的。在此我對服務端的分頁功能進行敘述
先展示下我的專案的目錄結構:
目錄結構
標準的MVC模式,現在我的分頁步驟是從jsp呼叫servlet,通過servlet呼叫對應的service類,service類去呼叫dao類
1、先看下頁面中的呼叫方式:

<div>當前${requestScope.pageBean.currentPage}/${requestScope.pageBean.totalPage }頁
    <a href="${pageContext.request.contextPath}/SenInfoManagerServlet?method=showSenInfo&currentPage=1"
>
首頁</a> <a href="${pageContext.request.contextPath }/SenInfoManagerServlet?method=showSenInfo&currentPage=${requestScope.pageBean.currentPage-1}">上一頁</a> <a href="${pageContext.request.contextPath }/SenInfoManagerServlet?method=showSenInfo&currentPage=${requestScope.pageBean.currentPage+1}"
>
下一頁</a> <a href="${pageContext.request.contextPath }/SenInfoManagerServlet?method=showSenInfo&currentPage=${requestScope.pageBean.totalPage}">尾頁</a> </div>

定義了當前頁,首頁,上一頁,下一頁,尾頁等方式。通過呼叫對應的servlet及currentPage,totalPage等引數,傳遞對應的pageBean資料
2、再看下servlet呼叫時的程式碼:

private void showSenInfo(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{

        try {
            String currPage = request.getParameter
("currentPage"); if(currPage == null || "".equals(currPage.trim())) { currPage = "1"; //第一次訪問,設定當前頁為1 } int currentPage = Integer.parseInt(currPage); PageBean<SenInfo> pageBean = new PageBean<SenInfo>(); pageBean.setCurrentPage(currentPage); List<SenInfo> pageData = senInfoService.getAllSenInfo(pageBean); request.setAttribute("senInfoList",pageData); request.setAttribute("pageBean", pageBean); uri = request.getRequestDispatcher("/manager/senInfoManager.jsp"); WebUtils.goTo(request,response,uri); }catch(Exception e) { LogUtils.getLogger(SenInfoManagerServlet.class.getName(), "error", e.toString()); } }

此方法獲取當前頁引數,其中對應的PageBean類是我定義的翻頁的Model類,下面看PageBean對應的設計程式碼:

public class PageBean<T> {

    private int currentPage = 1; //當前頁,預設顯示第一頁
    private int pageCount = 10; //每頁顯示的行數(查詢返回的行數)
    private int totalCount;  //總記錄數
    private int totalPage;  //總頁數= 總記錄數/每頁顯示的行數(+1)
    private List<T> pageData; // 分頁查詢到的資料

    public int getCurrentPage() {
        return currentPage;
    }
    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }
    public int getPageCount() {
        return pageCount;
    }
    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }
    public int getTotalCount() {
        return totalCount;
    }
    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }
    public int getTotalPage() {
        if(totalCount % pageCount == 0) {
            totalPage = totalCount / pageCount;
        }else {
            totalPage = totalCount / pageCount +1;
        }
        return totalPage;
    }
    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
    public List<T> getPageData() {
        return pageData;
    }
    public void setPageData(List<T> pageData) {
        this.pageData = pageData;
    }

}

在此分頁類中設定了當前頁currentPage,每頁顯示的總行數pageCount,總記錄數totalCount,分頁查詢到的資料列表。
3、通過service呼叫dao類不再展示,其中service類沒做其他任何操作,直接呼叫的dao類,現在看看dao類的設計程式碼:
先獲取總數目:

/**
     * 獲取總數目
     */
    @Override
    public int getTotalCount() {
        StringBuilder sb = new StringBuilder();
        sb.append(" SELECT");
        sb.append(" count(*) ");
        sb.append(" FROM ");
        sb.append(" senInfo");
        try {
            Long count = qr.query(sb.toString(), new 
                    ScalarHandler<Long>());
            return count.intValue();
        }catch(Exception e) {
            LogUtils.getLogger(SenInfoDao.class.getName(), "error", e.toString());
        }
        return 0;
    }

再獲取每頁對應的資料:

QueryRunner qr = DBUtils.getQueryRunner();

    @Override
    public List<SenInfo> getAllSenInfo(PageBean<SenInfo> pageBean) {
        int totalCount = this.getTotalCount();
        pageBean.setTotalCount(totalCount);

        if(pageBean.getCurrentPage() <= 0) {
            pageBean.setCurrentPage(1);
        }else if(pageBean.getCurrentPage() > pageBean.getTotalPage()) {
            pageBean.setCurrentPage(pageBean.getTotalPage());
        }
        //獲取當前頁:計算查詢的起始行,返回的行數
        int currentPage = pageBean.getCurrentPage();
        int index = (currentPage - 1) * pageBean.getPageCount(); //查詢起始行
        int count = pageBean.getPageCount(); //每頁顯示的行數

        List<Object> list = new ArrayList<Object>();
        StringBuilder sb = new StringBuilder();
        sb.append(" SELECT");
        sb.append(" *");
        sb.append(" FROM ");
        sb.append(" senInfo ");
        sb.append(" limit ?,? ");
        list.add(index);
        list.add(count);
        List<SenInfo> pageData = null;

        try {
            //根據當前頁,查詢當前頁資料(一頁資料)
            if(index >= 0) {

                pageData = qr.query(sb.toString(), new BeanListHandler<SenInfo>(SenInfo.class),list.toArray());
                pageBean.setPageData(pageData);
                System.out.println("資料:"+pageData.toString());
            }
        }catch(Exception e) {
            LogUtils.getLogger(SenInfoDao.class.getName(), "error", e.toString());
        }
        return pageData;
    }

其中的實質內容在於mysql的語句,mysql分頁語句如下:
Select * from 表名 limit startrow,pagesize
(Pagesize為每頁顯示的記錄條數)
附:資料庫分頁查詢語句:

1.oracle資料庫分頁
    select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>=startrow

2.DB2資料庫分頁
    Select * from (select rownumber() over() as rc,a.* from (select * from 表名 order by列名) as a) where rc between startrow and endrow

3.SQL Server 2000資料庫分頁
    Select top pagesize * from 表名 where 列名 not in(select top pagesize*page 列名 from 表名 order by列名) order by列名

4.SQL Server 2005資料庫分頁
    Select * from (select 列名,row_number() over(order by 列名1) as 別名from 表名) as t where t.列名1>=startrow and t.列名1<=endrow

5.MySQL資料庫分頁
    Select * from 表名 limit startrow,pagesize
    (Pagesize為每頁顯示的記錄條數)

6.PostgreSQL資料庫分頁
    Select * from 表名 limit pagesize,offset startrow
    (Pagesize為每頁顯示的記錄條數)

總結:上述標準展示了MVC的呼叫方法,具體程式碼就不再過多顯示。
程式碼有何不懂,可以跟帖回問。僅供參考!

相關推薦

servlet+mvc實現顯示列表

實現分頁顯示有好多種方法,有客戶端顯示的用JS,有服務端分頁的。在此我對服務端的分頁功能進行敘述 先展示下我的專案的目錄結構: 標準的MVC模式,現在我的分頁步驟是從jsp呼叫servlet,通過servlet呼叫對應的service類,service類

asp.net MVC 使用PagedList.MVC實現

nbsp 超出 inf length names .cn www 名稱 ger 在上一篇的EF之DB First中,存在以下的兩個問題: 1. 添加/編輯頁面顯示的是屬性名稱,而非自定義的名稱(如:姓名、專業...) 2. 添加/編輯時沒有加入驗證 3. 數據展示使用分頁

servlet如何實現技術

Java中常見的分頁類別有物理分頁和邏輯分頁。對於一般的model專案可以使用邏輯分頁,對於資料比較多的,建議使用物理分頁。 物理分頁 只從資料庫中查詢出當前頁面的資料,不佔用很多記憶體,但效率比較低。 邏輯分頁 從資料庫中找到所有的資料, 儲存到記憶體當中。展示的頁面

servlet+jsp實現

1.PageBean /**  * 這是一個用於封裝了分頁的資料  * 包含:  *         該頁的學生集合資料  *        &n

JSP+Servlet+oracle 實現

效果如下圖: 分析: 1、oracle分頁語句的實現select * from (select rownum as rn,t.* from students t where rownum<=5) where rn>0; 2、需要構造分頁物件,包括 3、當前頁面

小程式中scroll-view元件實現效果之--------城市列表的索引(scroll-into-view)

想要實現的功能是在一個城市列表頁實現字母索引 點選字母跳轉到相應的位置,在小程式裡面利用scroll-view特別簡單 首先需要索引字母新增一個點選事件,捕獲到點選的id <view wx:

dedecms自定義模型之獨立模型在首列表、內容調用內容

兩個 定義 blog typeid 註意 lists lis curl lds dedecms關於自定義模型(獨立模型)的首頁、列表頁、內容怎麽調用?在後臺自定義模型(獨立模型)的建立及自定義字段的添加比較簡單,需要註意兩點: (1)如果某個字段需要在前臺列表頁顯示,則在前

vue——詳細返回列表,不重新整理,保留列表原來停留位置

經常有這樣的功能,從列表頁上選擇一項,跳到詳細頁,詳細頁看完,返回列表頁。這時,列表頁的元件會重新建立,也就是要重新從介面請求一次資料,並且會回到第一行,對於資料更新要求不高的業務來說,這樣會浪費資源,而且體驗頁不好(列表一共100條,滑動到了90條了,點進去看好明細,出來,

Servlet+AJAX實現資料處理顯示

實現功能:在輸入框中輸入字元,用AJAX傳到後臺Servlet處理後加上隨機數,並返回到前臺顯示。 一、寫前臺jsp頁面index.jsp <%@ page language="java"

Vue專案學習:16-vuex打通首列表的資料傳遞,最後有程式設計式導航

終於寫到vuex了,之前看過一些vuex的教程。但是總感覺太複雜,這次自己嘗試把它寫出來。官網地址:https://vuex.vuejs.org/zh-cn/什麼是vuex:官方解釋-Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式儲存管理應用的所

織夢DEDECMS首列表、文章呼叫評論數、收藏數標籤

效果: 23個收藏 | 23個評論 | 23次被瀏覽 一:文章頁呼叫評論數標籤: <small>{dede:field.id runphp='yes'}$dsql = new dedesql(false);$dsql -> SetQuery("Selec

Django前端實現列表顯示

有兩種方案: 一、使用Django的分頁外掛 詳細步驟參考http://blog.csdn.net/fighter_yy/article/details/41308277 缺點:django1.6版本之前無法使用 二、使用datatable(功能更強大,推薦)

JSP實現 留言板 顯示,新留言顯示在第一個~

date() sdf style string hid pre || lan pat 頁面效果圖: 留言Servlet-----MessageServlet package cn.MuJH.newsManager.servlet; import java.io.

織夢用dede:sql實現列表教程方法

將dede:list標籤進行改造,使用SQL標籤實現靜態分頁,在自定義表單呼叫的分頁用他就很方便 例如會員列表的模板標籤寫法 {dede:listsql sql="select * from myblog_member" pagesize="10"} <li><a href="https

後臺管理實現顯示----核心物件

需求 實現簡單的分頁管理資料的頁面功能,類似下面 採用物理分頁方式:即每開啟一頁都互動從後臺取回需要頁資料 同時也有邏輯分頁方式,就是一次互動,後臺把所有的所有頁面資料一起發過來,前端自己分頁顯示。雖互動簡單,但也不沒了實時性,不提倡。 解決方法 物

例項:建立一個表格,顯示資料(MongoDB資料庫儲存),功能:實現增刪改查

需求:建立一個表格,分頁顯示資料,功能:實現增刪改查 效果圖: 自動建立一個專案 命令列: express mongodb-demo --view=ejs cd mongodb-demo npm install npm install mongodb --save npm sta

PageHelper與bootstrap的模態框,以及jquery程式碼實現查詢顯示以及Echart的使用

模板下載地址:https://files.cnblogs.com/files/han-guang-xue/%E5%88%86%E9%A1%B5%E6%A8%A1%E6%9D%BF.zip jquery程式碼 var pn; var maxPn; $(function () { loading

Winform 圖片預覽列表+顯示

     針對圖片列表展示資訊,一開始沒有做過相關類似的功能,大多都是以表格行顯示為主,所以剛開始實現這個功能的時候是懵逼的。無從下口。在網上搜索一時半會也沒找到合適的解決方案。大致就是類似於下圖這樣,每條資料上面是圖片,下面是對應的相關資訊,在介面上進行一次排列,在介面上分頁展

Java Web顯示實現思路

實現效果 一.需求描述 從資料庫中將所有資料查詢出來,分頁顯示在前端頁面上,每頁顯示若干條資料,並實現"首頁","上一頁","下一頁","尾頁","跳轉至指定頁碼","顯示當前頁碼"等功能   二.實現思路  我的思路是將當前頁碼的值作為引數傳給servlet

Bootstrap結合angularjs顯示,實現當前選中居中效果

bosfore_app.controller("ctrlRead", ['$scope', '$http', function($scope, $http) { $scope.currentPage = 1; //當前頁 $scope.pageSize = 4; /