Java Web 分页查询实现:使用 JDBC、Servlet 和 JSP 展示数据
使用 JDBC、Servlet 和 JSP 实现分页查询
本示例展示了如何在 Java Web 应用中使用 JDBC、Servlet 和 JSP 实现分页查询功能,并通过 JSTL 标签库在 JSP 页面上展示分页数据。
1. 实体类 (Entity)
public class PageResult<T> {
private int totalPage; // 总页数
private List<T> dataList; // 每页需存放的数据
// 其他属性和方法
// getter 和 setter 方法
}
2. 数据访问层 (DAO)
public class UserDao {
public PageResult<User> queryUsersByPage(int currentPage, int pageSize) {
// 计算总记录数
int totalRecord = queryTotalRecord();
// 计算总页数
int totalPage = (totalRecord + pageSize - 1) / pageSize;
// 分页查询数据
List<User> userList = queryUsers(currentPage, pageSize);
// 创建 PageResult 对象并设置属性值
PageResult<User> pageResult = new PageResult<>();
pageResult.setTotalPage(totalPage);
pageResult.setDataList(userList);
return pageResult;
}
private int queryTotalRecord() {
// 执行查询总记录数的 SQL 语句,返回总记录数
}
private List<User> queryUsers(int currentPage, int pageSize) {
// 执行分页查询数据的 SQL 语句,返回当前页的数据列表
}
}
3. 控制器层 (Controller, Servlet)
@WebServlet("/userList")
public class UserListServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取当前页和每页显示的记录数
int currentPage = Integer.parseInt(req.getParameter("currentPage"));
int pageSize = Integer.parseInt(req.getParameter("pageSize"));
// 调用 DAO 层的方法进行分页查询
UserDao userDao = new UserDao();
PageResult<User> pageResult = userDao.queryUsersByPage(currentPage, pageSize);
// 将分页结果保存到 request 中
req.setAttribute("pageResult", pageResult);
// 跳转到 jsp 页面
req.getRequestDispatcher("userList.jsp").forward(req, resp);
}
}
4. JSP 页面 (userList.jsp)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>User List</title>
</head>
<body>
<table>
<tr>
<th>ID</th>
<th>Name</th>
<!-- 其他表头 -->
</tr>
<c:forEach items="${pageResult.dataList}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<!-- 其他字段 -->
</tr>
</c:forEach>
</table>
<div>
<!-- 分页导航 -->
<c:if test="${pageResult.totalPage > 1}">
<c:forEach begin="1" end="${pageResult.totalPage}" var="i">
<a href="userList?currentPage=${i}&pageSize=${pageSize}">${i}</a>
</c:forEach>
</c:if>
</div>
</body>
</html>
说明:
- 以上代码仅供参考,实际应用中需要根据具体的需求进行修改。
- 在 DAO 层中,
queryTotalRecord()和queryUsers()方法需要根据实际的数据库表结构和 SQL 语句进行实现。 - 在 JSP 页面中,
pageSize参数的值需要根据实际的需求进行设置。 - 可以根据需求添加其他分页功能,例如上一页、下一页等按钮。
- 为了提高性能,可以考虑使用缓存机制来缓存分页数据。
- 在实际开发中,建议使用框架(例如 Spring)来简化代码和提高开发效率。
原文地址: https://www.cveoy.top/t/topic/p6pQ 著作权归作者所有。请勿转载和采集!