JSP分页是指将大量数据分为多页进行展示,提高用户体验并减少服务器压力。下面将详细讲解如何实现JSP分页显示,以及两个示例说明。
一、分页的基本思路
- 在JSP页面中,使用SQL语句查询出所有数据数量;
- 计算总页数,每页显示数据数量,以及当前页码;
- 使用SQL语句查询出当前页码的数据;
- 在JSP页面中循环显示当前页码的数据,并在页面上添加分页控件。
二、实现步骤
1. 数据库准备
假设我们需要对一张名为user
的表进行分页显示。表中包含id
和name
两个字段。
2. 在JSP页面中进行查询
在JSP页面中编写SQL查询语句,查询出数据库中数据的总数量,并将其存储到totalCount
变量中。
<%
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "SELECT COUNT(*) FROM user";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if (rs.next()) {
int totalCount = rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭数据库连接
}
%>
3. 分页计算
计算总页数,每页显示数据数量以及当前页码,并将其存储到相应的变量中。这里我们设定每页显示5条数据。
<%
int pageSize = 5;
int currentPage = 1;
int totalCount = 0;
int totalPage = 0;
// 上面查询数据库的代码
if (request.getParameter("currentPage") != null) {
currentPage = Integer.parseInt(request.getParameter("currentPage"));
}
totalPage = (totalCount + pageSize - 1) / pageSize;
%>
4. 查询当前页码数据
根据当前页码和每页显示数据数量,在SQL语句中加上LIMIT
限制条件,从数据库中查询出当前页码的数据。
<%
String sql = "SELECT * FROM user LIMIT ?, ?";
int start = (currentPage - 1) * pageSize;
ps = conn.prepareStatement(sql);
ps.setInt(1, start);
ps.setInt(2, pageSize);
rs = ps.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
// 将数据展示到页面上
}
%>
5. 分页控件的实现
在页面上以列表的形式展示数据,并在底部添加分页的控件。通常的分页控件有“上一页”、“下一页”、“首页”、“尾页”和页码数字等。这里以Bootstrap为例实现一个简单的分页控件。
<nav aria-label="Page navigation">
<ul class="pagination">
<li <% if (currentPage == 1) { %>class="disabled"<% } %>>
<a href="/index.jsp?currentPage=<%= currentPage - 1 %>" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<% for (int i = 1; i <= totalPage; i++) { %>
<li <% if (i == currentPage) { %>class="active"<% } %>>
<a href="/index.jsp?currentPage=<%= i %>"><%= i %></a>
</li>
<% } %>
<li <% if (currentPage == totalPage) { %>class="disabled"<% } %>>
<a href="/index.jsp?currentPage=<%= currentPage + 1 %>" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
三、示例说明
示例1:分页查询学生信息
我们需要将一张名为student
的表进行分页展示,其中包含字段id
、name
、age
和score
。并按照分数从高到低进行排序。
具体实现过程如下:
- 在JSP页面中,使用SQL语句查询出所有学生数据数量;
- 计算总页数,每页显示10条数据,以及当前页码;
- 使用SQL语句查询出当前页码的学生数据,并按照分数从高到低排序;
- 在JSP页面中循环显示当前页码的学生数据,并在页面上添加分页控件。
示例代码如下:
<%
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "SELECT COUNT(*) FROM student";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if (rs.next()) {
int totalCount = rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭数据库连接
}
int pageSize = 10;
int currentPage = 1;
int totalPage = 0;
if (request.getParameter("currentPage") != null) {
currentPage = Integer.parseInt(request.getParameter("currentPage"));
}
totalPage = (totalCount + pageSize - 1) / pageSize;
sql = "SELECT * FROM student ORDER BY score DESC LIMIT ?, ?";
int start = (currentPage - 1) * pageSize;
ps = conn.prepareStatement(sql);
ps.setInt(1, start);
ps.setInt(2, pageSize);
rs = ps.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
float score = rs.getFloat("score");
// 将数据展示到页面上
}
%>
<nav aria-label="Page navigation">
<ul class="pagination">
<li <% if (currentPage == 1) { %>class="disabled"<% } %>>
<a href="/student.jsp?currentPage=<%= currentPage - 1 %>" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<% for (int i = 1; i <= totalPage; i++) { %>
<li <% if (i == currentPage) { %>class="active"<% } %>>
<a href="/student.jsp?currentPage=<%= i %>"><%= i %></a>
</li>
<% } %>
<li <% if (currentPage == totalPage) { %>class="disabled"<% } %>>
<a href="/student.jsp?currentPage=<%= currentPage + 1 %>" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
示例2:分页查询商品信息
我们需要将一张名为goods
的表进行分页展示,其中包含字段id
、name
、price
和image
。并按照价格从低到高进行排序。
具体实现过程如下:
- 在JSP页面中,使用SQL语句查询出所有商品数据数量;
- 计算总页数,每页显示20条数据,以及当前页码;
- 使用SQL语句查询出当前页码的商品数据,并按照价格从低到高排序;
- 在JSP页面中循环显示当前页码的商品数据,并在页面上添加分页控件。
示例代码如下:
<%
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "SELECT COUNT(*) FROM goods";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if (rs.next()) {
int totalCount = rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭数据库连接
}
int pageSize = 20;
int currentPage = 1;
int totalPage = 0;
if (request.getParameter("currentPage") != null) {
currentPage = Integer.parseInt(request.getParameter("currentPage"));
}
totalPage = (totalCount + pageSize - 1) / pageSize;
sql = "SELECT * FROM goods ORDER BY price ASC LIMIT ?, ?";
int start = (currentPage - 1) * pageSize;
ps = conn.prepareStatement(sql);
ps.setInt(1, start);
ps.setInt(2, pageSize);
rs = ps.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
float price = rs.getFloat("price");
String image = rs.getString("image");
// 将数据展示到页面上
}
%>
<nav aria-label="Page navigation">
<ul class="pagination">
<li <% if (currentPage == 1) { %>class="disabled"<% } %>>
<a href="/goods.jsp?currentPage=<%= currentPage - 1 %>" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<% for (int i = 1; i <= totalPage; i++) { %>
<li <% if (i == currentPage) { %>class="active"<% } %>>
<a href="/goods.jsp?currentPage=<%= i %>"><%= i %></a>
</li>
<% } %>
<li <% if (currentPage == totalPage) { %>class="disabled"<% } %>>
<a href="/goods.jsp?currentPage=<%= currentPage + 1 %>" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSP分页显示的实例代码 - Python技术站