在Web开发中,分页功能是非常常见的需求,JSP(Java Server Pages)是一种基于Java技术的动态网页开发技术,可以实现分页功能,本文将详细介绍如何使用JSP实现分页功能。
1、分页原理
分页是将大量数据分成多个页面显示的技术,用户可以通过点击页面上的导航按钮来浏览不同的页面,分页的原理是将数据从数据库中查询出来,然后根据用户请求的页面号和每页显示的数据量,计算出需要显示的数据范围,最后将这部分数据返回给用户。
2、JSP分页实现方法
JSP分页实现方法主要有以下几种:
(1)使用JSP标准标签库(JSTL)的<c:forEach>
标签进行分页。
(2)使用SQL语句中的LIMIT
和OFFSET
关键字进行分页。
(3)使用第三方分页插件,如PageHelper、MyBatis-Plus等。
下面分别介绍这三种方法的实现过程。
3、使用JSTL标签库进行分页
需要在项目中引入JSTL标签库,在JSP页面的顶部添加以下代码:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用<c:forEach>
标签进行分页,假设我们有一个名为list
的列表,存储了从数据库中查询出来的数据,我们需要将其分成每页显示10条数据的多个页面,可以使用以下代码实现:
<table> <tr> <th>编号</th> <th>名称</th> </tr> <c:forEach var="item" items="${list}" varStatus="status"> <tr> <td>${item.id}</td> <td>${item.name}</td> </tr> </c:forEach> </table>
接下来,我们需要实现分页导航,可以使用以下代码实现:
<div> <c:forEach begin="1" end="${totalPage}" var="i"> <a href="?page=${i}">${i}</a> </c:forEach> </div>
${totalPage}
表示总页数,可以通过计算得到,如果总共有50条数据,每页显示10条数据,那么总页数为5,计算总页数的代码如下:
<c:set var="totalPage" value="${(list.size() + 9) / 10}" />
4、使用SQL语句进行分页
在执行SQL查询时,可以使用LIMIT
和OFFSET
关键字进行分页,查询第2页的数据,每页显示10条数据,可以使用以下SQL语句:
SELECT * FROM table_name LIMIT 10 OFFSET 10;
在JSP中,可以使用PreparedStatement
对象执行带参数的SQL语句。
String pageIndex = request.getParameter("page"); // 获取当前页码 int offset = (Integer.parseInt(pageIndex) 1) * 10; // 计算偏移量 String sql = "SELECT * FROM table_name LIMIT 10 OFFSET ?"; // SQL语句,使用占位符代替实际参数值 PreparedStatement pstmt = connection.prepareStatement(sql); // 创建PreparedStatement对象 pstmt.setInt(1, offset); // 设置参数值 ResultSet resultSet = pstmt.executeQuery(); // 执行查询,获取结果集
5、使用第三方分页插件进行分页
除了上述两种方法外,还可以使用第三方分页插件来实现分页功能,使用PageHelper插件可以简化分页操作,需要在项目中引入PageHelper依赖,在执行查询前调用PageHelper.startPage()
方法设置分页参数。
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; // ...省略其他代码... String pageIndex = request.getParameter("page"); // 获取当前页码 int pageSize = 10; // 每页显示的数据量 PageHelper.startPage(Integer.parseInt(pageIndex), pageSize); // 设置分页参数 List<Item> list = itemMapper.selectAll(); // 执行查询,获取数据列表 PageInfo<Item> pageInfo = new PageInfo<>(list); // 将数据列表封装成PageInfo对象,包含分页信息和数据列表本身 request.setAttribute("pageInfo", pageInfo); // 将PageInfo对象存入请求域中,供JSP页面使用
在JSP页面中,可以直接使用${pageInfo.list}
访问当前页的数据列表,使用${pageInfo.totalCount}
访问总记录数,使用${pageInfo.pageNum}
访问当前页码,使用${pageInfo.pages}
访问总页数。
<span>总记录数:${pageInfo.totalCount}</span> | <span>总页数:${pageInfo.pages}</span> | <span>当前页:${pageInfo.pageNum}</span> | <span>每页显示:${pageSize}</span> | <span>总共显示:${pageInfo.totalPage}</span> | <span>跳转到:</span> <form action="?page=${pageInfo.nextPageNum}" method="get"> <input type="text" name="page" value="${pageInfo.nextPageNum}" /> <input type="submit" value="跳转" /> </form> | <span>跳转到:</span> <form action="?page=${pageInfo.prePageNum}" method="get"> <input type="text" name="page" value="${pageInfo.prePageNum}" /> <input type="submit" value="上一页" /> </form> | <span>跳转到:</span> <form action="?page=1" method="get"> <input type="text" name="page" value="1" /> <input type="submit" value="首页" /> </form> | <span>跳转到:</span> <form action="?page=${pageInfo.pages}" method="get"> <input type="text" name="page" value="${pageInfo.pages}" /> <input type="submit" value="尾页" /> </form> | <span>跳转到:</span> <form action="?page=${pageInfo.currentPageNum}" method="get"> <input type="text" name="page" value="${pageInfo.currentPageNum}" /> <input type="submit" value="下一页" /> </form> | <span>跳转到:</span> <form action="?page=${pageInfo.lastPageNum}" method="get"> <input type="text" name="page" value="${pageInfo.lastPageNum}" /> <input type="submit" value="末页" /> </form> | <span>跳转到:</span> <form action="/index.jsp" method="get"> <input type="text" name="page" value="/index.jsp" /> <input type="submit" value="首页" /> </form> | <span>跳转到:</span> <form action="/end.jsp" method="get"> <input type="text" name="page" value="/end.jsp" /> <input type="submit" value="尾页" /> </form> | <span> | </span><br/> | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} | ${list} |
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/163663.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复