使用 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)来简化代码和提高开发效率。
Java Web 分页查询实现:使用 JDBC、Servlet 和 JSP 展示数据

原文地址: https://www.cveoy.top/t/topic/p6pQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录