温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JSP如何做分页功能

发布时间:2026-07-17 07:17:35 来源:亿速云 阅读:98 作者:小樊 栏目:编程语言

在 JSP 中实现分页功能,核心思想是:
后端负责查询“当前页的数据 + 总记录数”,前端负责展示页码和翻页按钮。
分页不是 JSP 单独完成的,而是 JSP + Servlet + DAO + 数据库 配合实现。

下面给你一个最常用、最清晰的分页实现方案(适合初学者和项目实战)。


一、分页的基本原理

分页需要两个关键参数:

  1. 当前页 pageNum
  2. 每页显示条数 pageSize

数据库查询时使用:

SELECT * FROM 表名
LIMIT (pageNum - 1) * pageSize, pageSize;

二、数据库示例

假设有一张用户表:

CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50)
);

三、分页实体类(PageBean)

public class PageBean<T> {
    private int pageNum;      // 当前页
    private int pageSize;     // 每页条数
    private int totalCount;   // 总记录数
    private int totalPage;    // 总页数
    private List<T> list;     // 当前页数据

    // getter / setter
}

四、DAO 层(数据库查询)

1️⃣ 查询当前页数据

public List<User> findByPage(int pageNum, int pageSize) {
    int start = (pageNum - 1) * pageSize;
    String sql = "SELECT * FROM user LIMIT ?, ?";
    // 使用 JDBC / MyBatis 查询
}

2️⃣ 查询总记录数

public int getTotalCount() {
    String sql = "SELECT COUNT(*) FROM user";
}

五、Servlet 中处理分页逻辑

@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);
    }
}

六、JSP 页面显示分页

1️⃣ 显示数据

<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>

2️⃣ 分页按钮(重点)

<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 显示页码

如果你愿意,我可以:

  • ✅ 给你一个 完整可运行 Demo
  • ✅ 改成 MyBatis / Spring MVC
  • ✅ 做 Ajax 分页
  • ✅ 做 Bootstrap 分页样式

你现在是 Servlet + JSP 原生项目 吗?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手