JavaWeb分页的实现

分页的分类

分页的实现分为真分页和假分页两种。

1.真分页(物理分页):

  • 实现原理: SELECT * FROM xxx [WHERE...] LIMIT ?, 10;
    第一个参数是开始数据的索引位置
    10是要查询多少条数据,即每页显示的条数
  • 优点: 不会造成内存溢出
  • 缺点: 翻页的速度比较慢

2.假分页(逻辑分页):

  • 实现原理: 一次性将所有的数据查询出来放在内存之中,每次需要查询的时候就直接从内存之中去取出相应索引区间的数据
  • 优点: 分页的速度比较快
  • 缺点: 可能造成内存溢出

分页的一些术语:
-- 数据总条数: totalCount : select count(1) from t_user;
-- 每页显示条数:pageSize
-- 总页数:totalPage
-- 当前页:currPage
-- 起始索引: startIndex

-- 通过当前页码查询第几页的数据

select * from t_user limit 0, 5; -- 页码 1
select * from t_user limit 5, 5; -- 页码 2
select * from t_user limit 10, 5; -- 页码 3

-- 公式:startIndex = (currPage - 1) * pageSize

-- 计算一共有多少页

-- 方法一:result = totalCount%pageSize,如果余数result为0,
-- totalPage = totalCount / pageSize
-- 如果余数result不为0,
-- totalPage = totalCount / pageSize + 1;
-- 方法二:totalPage = (totalCount + pageSize - 1) / pageSize

Pageing工具类

public class PaginationBean<T> {

    private List<T> dataList;

    private int currPage;

    private int totalPage;

    public List<T> getDataList() {
        return dataList;
    }

    public void setDataList(List<T> dataList) {
        this.dataList = dataList;
    }

    public int getCurrPage() {
        return currPage;
    }

    public void setCurrPage(int currPage) {
        this.currPage = currPage;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
}

Servlet

@WebServlet("/showUserList")
public class ShowUserListServlet extends HttpServlet implements Servlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String operation = request.getParameter("operation");
        String currPageStr = request.getParameter("currPage");
        int currPage = 0;

        IUserService userSevice = new UserServiceImpl();
        int totalPage = userSevice.getTotalPage();

        if ("首页".equals(operation) || operation == null || currPageStr == null || currPageStr.length() == 0) {

            currPage  = 1;
        } else if ("上一页".equals(operation)) {

            currPage = Integer.parseInt(currPageStr) - 1;
            if (currPage <= 0) {
                currPage = 1;
            }
        } else if ("下一页".equals(operation)) {

            currPage = Integer.parseInt(currPageStr) + 1;
            if (currPage >= totalPage) {
                currPage = totalPage;
            }
        } else {

            currPage = totalPage;
        }

        List<TestUserBean> userList = userSevice.getUserListByCurrPage(currPage);

        PaginationBean<TestUserBean> pageBean = new PaginationBean<TestUserBean>();
        pageBean.setDataList(userList);
        pageBean.setCurrPage(currPage);
        pageBean.setTotalPage(totalPage);

        request.setAttribute("page", pageBean);

        request.getRequestDispatcher("/userList.jsp").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 引入JSTL --%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
    table {
        border-collapse: collapse;
    }
</style>
</head>
<body>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>密码</th>
            <th>身份证号</th>
        </tr>
        <c:forEach items="${page.dataList }" var="user">
            <tr>
                <td>${user.id }</td>
                <td>${user.name }</td>
                <td>${user.pwd }</td>
                <td>${user.idCard }</td>
            </tr>
        </c:forEach>
    </table>
    <span>第${page.currPage }页/共${page.totalPage }页</span>
    <br>
    <br>
    <form action="showUserList" method="get">
        <input type="submit" name="operation" value="首页">
        <input type="submit" name="operation" value="上一页">
        <input type="submit" name="operation" value="下一页">
        <input type="submit" name="operation" value="尾页">

        <input type="hidden" name="currPage" value="${page.currPage }">
    </form>
</body>
</html>

原文地址:https://www.cnblogs.com/rookie97/p/12081485.html

时间: 2024-10-16 13:15:19

JavaWeb分页的实现的相关文章

住javaWeb分页实现(模拟百度首页)

本文来源于 http://blog.csdn.net/tjpu_lin/article/details/41050475 近期在开发一个项目,项目中有非常多数据展示的模块.所以要用到分页,网上搜了非常多分页的样例,可是非常多实现的方法和自身的代码实例耦合度太高.导致直接拿来用根本不行. 于是自己仅仅能亲自上阵了,关于分页实现大体逻辑是前台须要和后台相互传递页面參数(比如当前页面,页面大小.总共页数等),后台主要接受前台穿过来的pageNum(当前页码),进行数据查询,然后查完数据后返回给前台的同

JavaWeb分页显示内容——数据库分页查询

转载请注明原文地址: 在开发过程中,经常做的一件事,也是最基本的事,就是从数据库中查询数据,然后在客户端显示出来.当数据少时,可以在一个页面内显示完成.然而,如果查询记录是几百条.上千条呢?直接一个页面显示完全的话,表格得多长啊......这时,我们可以用分页技术. 何为分页?效果图如下: 这里总共查询了100条记录,如果一次性显示的话表格会很多行,用户体验不佳.而我们采用分页显示的话,一页显示10条记录,共十页.用户可以自行翻阅,记录少,清晰显示. 下面谈谈分页效果的实现,思路有两种: 其一:

详谈javaWeb分页的实现(模拟百度分页)

本文出自 http://blog.csdn.net/tjpu_lin/article/details/41050475 最近在开发一个项目,项目中有很多数据展示的模块,所以要用到分页,网上搜了很多分页的例子,但是很多实现的方法和自身的代码实例耦合度太高,导致直接拿来用根本不行. 于是自己只能亲自上阵了,关于分页实现大体逻辑是前台需要和后台相互传递页面参数(例如当前页面,页面大小,总共页数等),后台主要接受前台穿过来的pageNum(当前页码),进行数据查询,然后查完数据后返回给前台的同时也要将页

MySQL---数据库从入门走向大神系列(十六)-JavaWeb分页技术实例演示1

分页,是一种将所有数据分段展示给用户的技术.用户每次看到的不 是全部数据,而是其中的一部分,如果在其中没有找到自己想要的内容,用户可以通过指定页码或是点上/下一页的方式进行翻页. 本例演示静态分页,也就是先设置好每页显示10行,再根据总行数,来算出总页数,将所有页数的页号都显示出来. 相关算法(技术): 总行数(num): select count(1) from stud; 每页显示的行数(n): 固定值---已知的一个常量 页数: pageSize= num/n +( (num%n==0)?

MySQL---数据库从入门走向大神系列(十七)-JavaWeb分页技术实例演示2

分页,是一种将所有数据分段展示给用户的技术.用户每次看到的不 是全部数据,而是其中的一部分,如果在其中没有找到自己想要的内容,用户可以通过指定页码或是点上/下一页的方式进行翻页. 本例演示静态分页,也就是先设置好每页显示10行,再根据总行数,来算出总页数,并且只显示10个页码.增加查询功能,并且查询后的页面也进行分页.页码也进行分页 ! 查询功能的实现,需要我们在servlet向后台传输一个person,封装我们的查询条件 相关算法(技术): 总行数(num): select count(1)

关于Javaweb分页处理以及导航栏实现小记

对于搜索功能结果展示的分页处理,首先应该明确的是目前页,每页显示数据的条数,以及总的数据数目. 接下来,通过这些数据来计算出总的显示页数,以及数据库语句limit查询的范围. Object result:是分页显示的数据,这里设置为Object的目的是为了方便通过JSON传输. 1 public class PageBean { 2 private int pageNum; // 当前页,从请求那边传过来 3 private int pageSize; // 每页显示的数据条数 4 privat

javaweb分页的后端实现

先上demo图 servlet实现部分: package servlet; import java.io.IOException; import java.util.List; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSe

JavaWeb分页

平时我们查询的必要参数是写在Dao层的,但这样是不合理的,Dao层只是用来访问和操作数据库,不应该包含其他信息,所以通用做法创建一个Page对象,将分页信息全部放到里面 Page对象 public class Page { private List<Object> list; //存放查询的数据 private int currentPage; //当前页数 private int pageSize; //每页显示的数据条数 private int totalRecord; //总数据条数 p

javaweb 实现分页

分页原理 什么是分页技术 分页,是一种将所有数据分段展示给用户的技术.用户每次看到的不是全部数据,而是其中的一部分,如果在其中没有找到自习自己想要的内容,用户可以通过制定页码或是翻页的方式转换可见内容,直到找到自己想要的内容为止.其实这和我们阅读书籍很类似 分页的意义 分页确实有效,但它一定会加大系统的复杂度,但可否不分页呢?如果数据量少的话当然可以.但是对于企业信息系统来说数据量不会限制在一个小范围内.如果不顾一切的Select * from某个表,再将返回的数据一古脑的扔给客户,即使客户能够