📅  最后修改于: 2023-12-03 15:34:56.791000             🧑  作者: Mango
在Web应用程序开发中,分页是一个常见的需求。Java Servlet技术可以帮助我们轻松地实现分页,这篇文章将为您介绍如何使用Servlet和JavaServer Pages(JSP)技术实现分页。
int totalRows = 50; // 要显示的总行数
int rowsPerPage = 10; // 每页显示多少行
int totalPages = (int) Math.ceil((double) totalRows / rowsPerPage); // 计算总页数
int currentPage = 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); // 执行查询
<!-- 分页列表 -->
<% 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技术实现分页非常简单和方便。只要按照上述步骤操作,就可以实现分页。但需要注意,从数据库中读取数据时,应该只取出当前页的数据,而不是全部数据,否则会影响性能。