小伙伴们应该都知道,我们在项目开发中经常要用到分页功能,现在我们一般都会使用各种分页插件来进行快速实现。不过在面试的时候,面试官有时会问我们分页的实现过程与原理,这就有点让人防不胜防了。所以为了防止大家在面试时手足无措,索尔就用最原始的技术来带各位实现一下分页效果,希望能够让大家弄清楚分页的底层原理!

内容导读

本文的核心内容主要分为如下几部分:

  • 程序结构

  • JSP页面设计

  • 分页主要编码

  • 效果展示

程序结构

本项目虽小,但也是遵循三层架构的。对啦,不要忘了在项目中导入tomcat、JRE、mysql的依赖库文件,我这里用的是Eclipse工具。

因为项目中用到了JSP标签,所以我们需要在tomcat安装文件夹中的lib子文件夹下放好jstl-1.2.jar与standard.jar文件,如果有的话就不用管它了。项目的代码及依赖结构如下图所示:

JSP页面设计

接下来是本项目所用的jsp页面文件,主要有以下几个。

1. 创建index.jsp网页文件

<%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%@taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>我的信息查询</title>
<link rel="stylesheet" type="text/css" href="css/index.css"  rel="external nofollow">
</head>
<body>
<h2>信息分页查询</h2><div class="wrap">
<table class="tab" border="2">
<tr>
<th>学号</th>
<th>姓名</th>
<th>成绩</th>
</tr>
<c:forEach items="${pg.list}" var="stu">
<tr>
<td><c:out value="${stu.sid}" /></td>
<td><c:out value="${stu.sname}" /></td>
<td><c:out value="${stu.score}" /></td>
</tr>
</c:forEach>
</table>
</div><div class="set">
第<span id="currentPage">${pg.currentPage}</span>页 共<span
id="totalPage"> ${pg.totalPage}</span>页 <a
href="index?currentPage=${0}">首页</a>  <a
href="index?currentPage=${pg.currentPage-1}">上一页</a>  <a
href="index?currentPage=${pg.currentPage+1}">下一页</a>  <a
href="index?currentPage=${pg.totalPage}">尾页</a>转到第:<input id="jump"
type="text" />页 <input id="go" type="button" value="GO" />
</div>
</body>
<script type="text/javascript" src="js/index.js"></script>
</html>

2. play.jsp文件

<%@ page language="java" contentType="text/html;charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>查询系统</title>
</head>
<body>
<jsp:forward page="index"></jsp:forward>
</body>
</html>

分页主要编码

1. 创建分页文件Pagination

public class Pagination<T> {private int currentPage;// 总页号或总页数private int totalPage;// 每页记录数或行数private int limitRows;// 总的记录数或行数private int totalRows;// 每页开始的记录号private int startRecord;// 存每页中的记录private List<T> list;//初始化操作public void init() {// 1.1 求总页数,通过总记录数与每页行数来计算,有几种情况// (1)不够一页(2)有零头(3)刚好是整数页int tp = totalRows / limitRows;if (totalRows > limitRows) {totalPage = (totalRows %limitRows) == 0 ? tp : tp + 1;} else {totalPage = 1;}// 1.2 将当页保留在第一页或最后一页if (currentPage > totalPage) {currentPage = totalPage;} else if (currentPage <1) {currentPage = 1;}// 1.3 初始化开始记录数,mysql应用的limit它不包括开始记录,所以不要加1;// 还有limit传入的是开始记录号与查询的条数,此处是每页可显示数limitRows,// 如果查到最后没有limitRows限制的行数,则显示剩余部分this.startRecord = (currentPage -1) * limitRows;}public Pagination() {}// 当前页号,总记录数,每页行数;这些属性需要传入后初始化,其它的可以set设置public Pagination(int currentPage,int totalRows, int limitRows) {this.currentPage = currentPage;this.totalRows = totalRows;this.limitRows = limitRows;}// 以下为简单的get与set方法,我给省略了......

2. 创建StuService类

public class StuService {//2.1 拿到记录条数public static int getTotalRows() {Dao dao = new DaoImpl();return dao.getTotalRows();}//2.2 拿到每个分页数据public static List<Stu> getList(int startRecord, int limitRows) {Dao dao = new DaoImpl();return dao.getList(startRecord, limitRows);}}

当然啦,还有数据库与表、实体类等也是需要我们创建的,大家可以根据项目需求自己去完成。

效果展示

接下来就是本项目运行后的效果展示。

今天的内容就写到这里,现在你知道分页是怎么实现的了吗?

手把手带你写代码,完美实现Java分页功能相关推荐

  1. 手把手带你写一个JavaScript类型判断小工具

    业务写了很多,依然不是前端大神,我相信这是很多'入坑'前端开发同学的迷茫之处,个人觉得前端职业发展是有路径可寻的,前期写业务是一个积累过程,后期提炼总结,比如编程思想,父子类的原型继承,还是对象之间的 ...

  2. 【NLP】Pyhon+讯飞开放平台:​手把手带你写一个智能语音播报系统

    手把手带你写一个智能语音播报系统. 微信扫码登陆讯飞开放平台:https://www.xfyun.cn/ 完成个人认证. 在控制台创建应用,注意应用名称全库查重,很容易跟别人重复. 可查看到pytho ...

  3. 手把手带你写米课官网

    手把手带你写米课官网 人生没有白走的路,每一步都算数,大家好,我是小王,今天,手把手教你写一个米课官网原创不易,希望大家多多支持! 需要源代码或者素材的评论区留言.大家记得关注我哦!我会不定期的跟大家 ...

  4. MATLAB AHP AHP层次分析法code 自写代码 完美运行。 权重设计

    MATLAB AHP AHP层次分析法code 自写代码 完美运行. 权重设计 ID:5150612144581085YouthOG

  5. 学了编程却写出错误代码?程序运行结果与想象不符?当bug出现时该何去何从,别担心,这篇文章统统告诉你!手把手带你调试代码,让bug原形毕露!

    [手把手带你搞定]实用调试技巧 什么是bug 调试及调试的重要性 什么是调试 调试的基本步骤 1. 发现程序错误的存在 2. 以隔离.消除等方式对错误进行定位 3. 确定错误产生的原因 4. 提出纠正 ...

  6. Python老司机手把手带你写爬虫,整站下载妹子图,一次爽个够!

    其实很多编程语言都可以做爬虫,例如java.c#.php等等甚至excel都可以抓网页的图表,那么为什么我们要用Python呢?它简单.便捷,而且有好多库可以选择,可以说python是写爬虫的首选了! ...

  7. 永磁同步电机驱动视频教程_矢量控制_手把手教你写代码_无感FOC_有感FOC_状态观测器_卡尔曼滤波_慧驱动

    手把手教你驱动永磁同步电机_视频教程 前言 大家在刚开始搞永磁同步电机控制的时候,大部分都是先接触的芯片厂商提供的方案,然后查资料,买芯片厂商的电机套件,买回来后,通电启动,电机顺利的转起来了,然后再 ...

  8. 手把手带你写一个 Vue3 的自定义指令

    背景 众所周知,Vue.js 的核心思想是数据驱动 + 组件化,通常我们开发页面的过程就是在编写一些组件,并且通过修改数据的方式来驱动组件的重新渲染.在这个过程中,我们不需要去手动操作 DOM. 然而 ...

  9. java分页代码思路,记录--java 分页 思路 (hibernate关键代码)

    有时会脑袋蒙圈,记录下分页的思路 下面代码是hibernate的分页,其分页就是从第几条数据为起点,取几条数据.比如在mysql中的limit(5,10)取的就是第6条到第10条 在下面代码中的pag ...

最新文章

  1. 数据导出为Excel(未完)
  2. think in java interview-高级开发人员面试宝典(三)
  3. 基于SpringBoot和Vue的分布式爬虫系统(JavaWeb)
  4. Knative 暂时不会捐给任何基金会 | 云原生生态周报 Vol. 22
  5. quit推不出mysql_cmd下使用mysql插入中文出现无法退出语句的情况!终极解决办法! 安装mysql详细教程。...
  6. 2021-11-12Date类
  7. 三百英雄服务器维护2020,酸败英雄梦服维护公告《300英雄梦服》将定于2020年8月3...
  8. 二段式提交和三段式提交
  9. php页面不刷新 图片的src不更新,详解iframe的src指向的内容不刷新的解决办法
  10. OpenEmu:一个让你在Mac上爽快体验任天堂的模拟器
  11. Discuz修改默认用户头像
  12. Python 之字典(dict)根据 value 获取 key
  13. 【OpenCV】 码书(CodeBook)基本原理介绍
  14. 机器学习(一)模型三要素
  15. dvd光驱在计算机内怎么找不到,为什么在我的电脑中找不到光驱了?
  16. 联想服务器装系统不能加载硬盘,联想电脑重装系统读不出硬盘怎么办
  17. Centos 7 硬盘扩容
  18. 订单漏单问题分析及解决方案
  19. cakephp视图用php文件,CakePHP的视图
  20. 在项目中单元测试是用来做什么的?

热门文章

  1. 淘东电商项目(79) -项目Github开源
  2. 第二章 编写MBR主引导记录
  3. LVM-HOWTO/学习笔记(五)
  4. ubuntu 22.04 国内镜像阿里云/163源/清华大学/中科大--转--已验证
  5. 关于ubuntu下的c++编译
  6. 区块链技术与应用:未来的一场技术革命
  7. SAP批次双单位CWM的系统实现
  8. js 判断视频编码格式是不是avc格式的
  9. python资源管理错误漏洞_Python 资源管理错误漏洞|CVE-2019-9674|CNNVD-202002-041|互联网安全漏洞库 | 指尖安全 | 垂直互联网安全媒体...
  10. CAPL编程中的思想:if...else...判断语句还能这么玩