JavaWeb分页的实现代码实例
这篇文章主要介绍了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>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
上一篇:简单了解Spring中BeanFactory与FactoryBean的区别
栏 目:Java
本文标题:JavaWeb分页的实现代码实例
本文地址:https://www.xiuzhanwang.com/a1/Java/8880.html
您可能感兴趣的文章
- 01-10Springboot中@Value的使用详解
- 01-10JavaWeb实现邮件发送功能
- 01-10浅谈Java中真的只有值传递么
- 01-10如何解决线程太多导致java socket连接池出现的问题
- 01-10java实现的顺时针/逆时针打印矩阵操作示例
- 01-10java判断是否空最简单的方法
- 01-10java邮件乱码的彻底解决方案
- 01-10JAVA8独有的map遍历方式(非常好用)
- 01-10mybatis分页绝对路径写法过程详解
- 01-10Java实现双保险线程的示例代码
阅读排行
本栏相关
- 01-10Java实现动态模拟时钟
- 01-10Springboot中@Value的使用详解
- 01-10JavaWeb实现邮件发送功能
- 01-10利用Java实现复制Excel工作表功能
- 01-10Java实现动态数字时钟
- 01-10java基于poi导出excel透视表代码实例
- 01-10java实现液晶数字字体显示当前时间
- 01-10基于Java验证jwt token代码实例
- 01-10Java动态显示当前日期和时间
- 01-10浅谈Java中真的只有值传递么
随机阅读
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-11ajax实现页面的局部加载
- 01-10delphi制作wav文件的方法
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 04-02jquery与jsp,用jquery
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10SublimeText编译C开发环境设置
- 01-10C#中split用法实例总结