📜  Servlet – 分页示例(1)

📅  最后修改于: 2023-12-03 15:34:56.791000             🧑  作者: Mango

Servlet – 分页示例

在Web应用程序开发中,分页是一个常见的需求。Java Servlet技术可以帮助我们轻松地实现分页,这篇文章将为您介绍如何使用Servlet和JavaServer Pages(JSP)技术实现分页。

实现分页的步骤
  1. 获取要显示的总行数和每页显示多少行的信息。
int totalRows = 50; // 要显示的总行数
int rowsPerPage = 10; // 每页显示多少行
  1. 计算总页数并记录当前页码。
int totalPages = (int) Math.ceil((double) totalRows / rowsPerPage); // 计算总页数
int currentPage = 1; // 当前页码
  1. 从数据库获取当前页的数据。
int startIndex = (currentPage - 1) * rowsPerPage; // 起始索引
int endIndex = startIndex + rowsPerPage; // 结束索引
String sql = "SELECT * FROM table_name LIMIT " + startIndex + "," + endIndex; // SQL语句
ResultSet resultSet = statement.executeQuery(sql); // 执行查询
  1. 在JSP页面中显示分页列表和数据。
<!-- 分页列表 -->
<% for (int i = 1; i <= totalPages; i++) { %>
  <% if (i == currentPage) { %>
    <strong><%= i %></strong> <!-- 当前页 -->
  <% } else { %>
    <a href="page.jsp?page=<%= i %>"><%= i %></a> <!-- 其他页 -->
  <% } %>
<% } %>

<!-- 数据 -->
<% while (resultSet.next()) { %>
  <tr>
    <td><%= resultSet.getString("column_name") %></td>
    ...
  </tr>
<% } %>
完整示例
@WebServlet("/page")
public class PageServlet extends HttpServlet {

    private static final int ROWS_PER_PAGE = 10;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int totalRows = getTotalRows(); // 获取要显示的总行数
        int totalPages = (int) Math.ceil((double) totalRows / ROWS_PER_PAGE); // 计算总页数
        int currentPage = getCurrentPage(request); // 获取当前页码
        int startIndex = (currentPage - 1) * ROWS_PER_PAGE; // 起始索引
        int endIndex = startIndex + ROWS_PER_PAGE; // 结束索引
        List<Data> dataList = getData(startIndex, endIndex); // 获取当前页的数据

        request.setAttribute("totalPages", totalPages);
        request.setAttribute("currentPage", currentPage);
        request.setAttribute("dataList", dataList);

        request.getRequestDispatcher("/WEB-INF/jsp/page.jsp").forward(request, response);
    }

    private int getTotalRows() {
        // TODO: 从数据库获取要显示的总行数
        return 50;
    }

    private int getCurrentPage(HttpServletRequest request) {
        String pageParam = request.getParameter("page");
        if (pageParam != null) {
            return Integer.parseInt(pageParam);
        } else {
            return 1;
        }
    }

    private List<Data> getData(int startIndex, int endIndex) {
        // TODO: 从数据库获取当前页的数据
        List<Data> dataList = new ArrayList<>();
        for (int i = startIndex; i < endIndex; i++) {
            Data data = new Data();
            data.setId(i + 1);
            data.setName("name" + (i + 1));
            dataList.add(data);
        }
        return dataList;
    }

}
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>分页示例</title>
</head>
<body>

<table border="1">
    <tr>
        <th>编号</th>
        <th>名称</th>
    </tr>
    <% for (Data data : dataList) { %>
        <tr>
            <td><%= data.getId() %></td>
            <td><%= data.getName() %></td>
        </tr>
    <% } %>
</table>

<% for (int i = 1; i <= totalPages; i++) { %>
    <% if (i == currentPage) { %>
        <strong><%= i %></strong> <!-- 当前页 -->
    <% } else { %>
        <a href="page?page=<%= i %>"><%= i %></a> <!-- 其他页 -->
    <% } %>
<% } %>

</body>
</html>
结论

使用Servlet和JSP技术实现分页非常简单和方便。只要按照上述步骤操作,就可以实现分页。但需要注意,从数据库中读取数据时,应该只取出当前页的数据,而不是全部数据,否则会影响性能。