在 JSP 中实现分页功能,核心思想是:
后端负责查询“当前页的数据 + 总记录数”,前端负责展示页码和翻页按钮。
分页不是 JSP 单独完成的,而是 JSP + Servlet + DAO + 数据库 配合实现。
下面给你一个最常用、最清晰的分页实现方案(适合初学者和项目实战)。
分页需要两个关键参数:
pageNumpageSize数据库查询时使用:
SELECT * FROM 表名
LIMIT (pageNum - 1) * pageSize, pageSize;
假设有一张用户表:
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50)
);
public class PageBean<T> {
private int pageNum; // 当前页
private int pageSize; // 每页条数
private int totalCount; // 总记录数
private int totalPage; // 总页数
private List<T> list; // 当前页数据
// getter / setter
}
public List<User> findByPage(int pageNum, int pageSize) {
int start = (pageNum - 1) * pageSize;
String sql = "SELECT * FROM user LIMIT ?, ?";
// 使用 JDBC / MyBatis 查询
}
public int getTotalCount() {
String sql = "SELECT COUNT(*) FROM user";
}
@WebServlet("/userList")
public class UserServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int pageNum = 1;
int pageSize = 5;
String page = request.getParameter("pageNum");
if (page != null && !page.isEmpty()) {
pageNum = Integer.parseInt(page);
}
UserDao dao = new UserDao();
List<User> list = dao.findByPage(pageNum, pageSize);
int totalCount = dao.getTotalCount();
int totalPage = (int) Math.ceil(totalCount * 1.0 / pageSize);
PageBean<User> pageBean = new PageBean<>();
pageBean.setPageNum(pageNum);
pageBean.setPageSize(pageSize);
pageBean.setTotalCount(totalCount);
pageBean.setTotalPage(totalPage);
pageBean.setList(list);
request.setAttribute("pageBean", pageBean);
request.getRequestDispatcher("userList.jsp").forward(request, response);
}
}
<table border="1">
<tr>
<th>ID</th>
<th>用户名</th>
</tr>
<c:forEach items="${pageBean.list}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.username}</td>
</tr>
</c:forEach>
</table>
<div>
第 ${pageBean.pageNum} 页 / 共 ${pageBean.totalPage} 页
<c:if test="${pageBean.pageNum > 1}">
<a href="userList?pageNum=1">首页</a>
<a href="userList?pageNum=${pageBean.pageNum - 1}">上一页</a>
</c:if>
<c:if test="${pageBean.pageNum < pageBean.totalPage}">
<a href="userList?pageNum=${pageBean.pageNum + 1}">下一页</a>
<a href="userList?pageNum=${pageBean.totalPage}">末页</a>
</c:if>
</div>
| 方式 | 说明 |
|---|---|
| 数据库分页(推荐) | 使用 LIMIT,性能好 |
| 内存分页 | 查出所有数据再分页(不推荐) |
| 前端分页 | 数据量小可用 |
✅ 页码条(1 2 3 4 5)
✅ 防止 pageNum 越界
✅ 使用 MyBatis RowBounds 或 PageHelper
✅ Ajax 分页(不刷新页面)
JSP 分页 = 后端算页 + 数据库 LIMIT + JSP 显示页码
如果你愿意,我可以:
你现在是 Servlet + JSP 原生项目 吗?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。