java web手写实现分页功能

下面是“Java Web手写实现分页功能”的详细攻略:

下面是“Java Web手写实现分页功能”的详细攻略:

1. 前置知识

在手写实现分页功能之前,需要掌握以下知识:

  • JDBC,用于操作数据库
  • Servlet,用于接收请求和响应数据
  • JSP,用于在页面上呈现数据
  • HTML/CSS,用于美化页面

2. 实现思路

  • 根据用户请求的当前页数和每页显示记录数,计算出查询的起始位置和结束位置
  • 使用JDBC从数据库中查询数据,并根据起始位置和结束位置进行分页
  • 将查询到的数据传递给JSP页面,使用JSTL标签库和EL表达式在页面上呈现数据
  • 在页面上添加分页按钮和链接,方便用户进行翻页操作

3. 实现步骤

3.1 编写JDBC和DAO层代码

在DAO层中使用JDBC从数据库中查询数据,并计算出分页相关的参数,比如总记录数、总页数、起始位置和结束位置等,然后将查询到的数据以及分页相关参数封装到一个PageBean对象中,最后返回给Servlet。

示例代码:

public class UserDaoImpl implements UserDao {

    @Override
    public PageBean<User> findByPage(int currentPage, int pageSize) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            PageBean<User> pageBean = new PageBean<>();
            List<User> userList = new ArrayList<>();

            // 获取数据库连接
            conn = JdbcUtils.getConnection();

            // 查询总记录数
            String countSql = "select count(*) from user";
            ps = conn.prepareStatement(countSql);
            rs = ps.executeQuery();
            rs.next();
            int totalCount = rs.getInt(1);
            pageBean.setTotalCount(totalCount);

            // 计算总页数
            int totalPage = (totalCount + pageSize - 1) / pageSize;
            pageBean.setTotalPage(totalPage);

            // 计算起始位置和结束位置
            int start = (currentPage - 1) * pageSize;
            int end = currentPage * pageSize;

            // 查询分页数据
            String dataSql = "select * from user limit ?, ?";
            ps = conn.prepareStatement(dataSql);
            ps.setInt(1, start);
            ps.setInt(2, pageSize);
            rs = ps.executeQuery();
            while(rs.next()) {
                User user = new User();
                user.setId(rs.getString("id"));
                user.setName(rs.getString("name"));
                user.setAge(rs.getInt("age"));
                userList.add(user);
            }
            pageBean.setData(userList);

            // 设置当前页码和每页显示记录数
            pageBean.setCurrentPage(currentPage);
            pageBean.setPageSize(pageSize);

            return pageBean;
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            JdbcUtils.release(conn, ps, rs);
        }
    }
}

3.2 编写Servlet层代码

在Servlet中接收用户请求参数(当前页数和每页显示记录数),调用DAO层的方法进行查询,并将查询结果封装成PageBean对象传递给JSP页面。

示例代码:

public class UserServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        int currentPage = Integer.parseInt(req.getParameter("currentPage"));
        int pageSize = Integer.parseInt(req.getParameter("pageSize"));

        UserDao userDao = new UserDaoImpl();
        PageBean<User> pageBean = userDao.findByPage(currentPage, pageSize);

        req.setAttribute("pageBean", pageBean);
        req.getRequestDispatcher("/user_list.jsp").forward(req, resp);
    }

}

3.3 编写JSP页面代码

在JSP页面中通过JSTL标签库和EL表达式将查询到的数据呈现在页面上,并添加分页按钮和链接来方便用户进行翻页操作。

示例代码:

<%@ 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>
<html>
<head>
    <meta charset="UTF-8">
    <title>用户列表</title>
</head>
<body>
    <table border="1" align="center">
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>年龄</th>
        </tr>
        <c:forEach var="user" items="${pageBean.data}">
            <tr>
                <td>${user.id}</td>
                <td>${user.name}</td>
                <td>${user.age}</td>
            </tr>
        </c:forEach>
    </table>
    <div align="center">
        <c:if test="${pageBean.currentPage > 1}">
            <a href="${pageContext.request.contextPath}/userServlet?currentPage=${pageBean.currentPage-1}&pageSize=${pageBean.pageSize}">上一页</a>
        </c:if>
        <c:forEach begin="1" end="${pageBean.totalPage}" var="i">
            <c:if test="${pageBean.currentPage == i}">
                ${i }
            </c:if>
            <c:if test="${pageBean.currentPage != i}">
                <a href="${pageContext.request.contextPath}/userServlet?currentPage=${i}&pageSize=${pageBean.pageSize}">${i }</a>
            </c:if>
        </c:forEach>
        <c:if test="${pageBean.currentPage < pageBean.totalPage}">
            <a href="${pageContext.request.contextPath}/userServlet?currentPage=${pageBean.currentPage+1}&pageSize=${pageBean.pageSize}">下一页</a>
        </c:if>
    </div>
</body>
</html>

以上就是手写实现分页功能的完整攻略和示例代码了。

本文标题为:java web手写实现分页功能

基础教程推荐