下面是详细讲解“简单实现jsp分页”的完整攻略。
1. 简介
在进行网站开发时,经常会遇到需要在页面中展示大量数据的情况,这时候为了提高用户体验,我们一般会选择使用分页的形式进行展示。本文将会讲解如何进行简单的jsp分页实现。
2. 实现步骤
2.1 实现分页类
首先,我们需要实现一个用于分页的类。这个类需要包含以下几个属性和方法:
-
属性:
-
totalRecord:总记录数
- pageSize:每页显示的记录数
- pageNumber:当前页数
-
totalPages:总页数
-
方法:
-
getTotalRecord():获取总记录数
- setTotalRecord(int totalRecord):设置总记录数
- getPageSize():获取每页显示的记录数
- setPageSize(int pageSize):设置每页显示的记录数
- getPageNumber():获取当前页数
- setPageNumber(int pageNumber):设置当前页数
- getTotalPages():获取总页数
- setTotalPages(int totalPages):设置总页数
- isFirstPage():是否为第一页
- isLastPage():是否为最后一页
- getStartIndex():获取当前页面起始索引
- getEndIndex():获取当前页面结束索引
下面是一个示例代码:
public class PageBean<T> {
private int totalRecord;
private int pageSize;
private int pageNumber;
private int totalPages;
private List<T> dataList;
// 构造器和getter/setter省略...
public boolean isFirstPage() {
return pageNumber == 1;
}
public boolean isLastPage() {
return pageNumber == totalPages;
}
public int getStartIndex() {
return (pageNumber - 1) * pageSize;
}
public int getEndIndex() {
int endIndex = pageNumber * pageSize;
return endIndex > totalRecord ? totalRecord : endIndex;
}
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
this.totalPages = (totalRecord % pageSize == 0) ? (totalRecord / pageSize)
: (totalRecord / pageSize + 1);
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public List<T> getDataList() {
return dataList;
}
public void setDataList(List<T> dataList) {
this.dataList = dataList;
}
}
2.2 实现分页方法
接下来,我们需要在后台代码中实现分页方法。在数据库中,我们一般使用limit关键字来实现分页,因此我们需要计算分页的起始索引和结束索引,然后在sql语句中使用limit进行查询。
在实现分页方法之前,我们需要先完成如下几个步骤:
- 连接数据库
- 导入mysql-connector-java.jar包
- 编写数据库配置文件db.properties
在这里,我们使用一个名为User的实体类来作为示例,用户数据存储在MySQL数据库中。
下面是一个示例代码:
public class UserDao {
private Connection connection;
private PreparedStatement preparedStatement;
private ResultSet resultSet;
// 数据库连接参数读取
static {
try {
InputStream inputStream = UserDao.class.getClassLoader().getResourceAsStream("db.properties");
Properties properties = new Properties();
properties.load(inputStream);
Class.forName(properties.getProperty("driverClassName"));
System.out.println("驱动加载成功!");
} catch (Exception e) {
System.out.println("驱动加载失败!");
}
}
// 连接数据库
public void getConnection() throws SQLException {
String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false";
String username = "root";
String password = "123456";
connection = DriverManager.getConnection(url, username, password);
System.out.println("数据库连接成功!");
}
// 关闭数据库连接
public void closeConnection() throws SQLException {
if (connection != null) {
connection.close();
}
}
// 查询数据列表
public List<User> getUserList(int startIndex, int pageSize) throws SQLException {
List<User> userList = new ArrayList<>();
String sql = "SELECT * FROM user limit ?, ?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, startIndex);
preparedStatement.setInt(2, pageSize);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
userList.add(user);
}
return userList;
}
// 查询数据总数
public int getTotalRecord() throws SQLException {
String sql = "SELECT COUNT(*) FROM user";
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
return resultSet.getInt(1);
} else {
return 0;
}
}
}
2.3 实现jsp页面
最后,我们需要在jsp页面中展示分页数据。在jsp页面中,我们需要完成如下几个步骤:
- 引入分页类和数据库操作类UserDao
- 获取当前页数和每页显示的记录数
- 获取总记录数和总页数
- 根据当前页数和每页显示的记录数查询数据列表
- 使用分页类展示分页数据
下面是一个示例代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="com.example.bean.*" %>
<%@ page import="com.example.dao.*" %>
<%
UserDao userDao = new UserDao();
userDao.getConnection(); // 连接数据库
int pageSize = 10; // 每页显示的记录数
int pageNumber = request.getParameter("pageNumber") == null ? 1 : Integer.parseInt(request.getParameter("pageNumber")); // 当前页数
int totalRecord = userDao.getTotalRecord(); // 总记录数
PageBean<User> pageBean = new PageBean<>();
pageBean.setPageSize(pageSize);
pageBean.setPageNumber(pageNumber);
pageBean.setTotalRecord(totalRecord); // 设置总记录数,自动计算总页数
List<User> userList = userDao.getUserList(pageBean.getStartIndex(), pageSize); // 获取数据列表
pageBean.setDataList(userList);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>分页示例</title>
</head>
<body>
<table>
<tr>
<th>ID</th>
<th>用户名</th>
<th>密码</th>
</tr>
<c:forEach var="user" items="${pageBean.dataList}">
<tr>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.password}</td>
</tr>
</c:forEach>
</table>
<c:choose>
<c:when test="${pageBean.totalPages > 1}">
<ul>
<li><a href="?pageNumber=1">首页</a></li>
<c:if test="${pageBean.pageNumber > 1}">
<li><a href="?pageNumber=${pageBean.pageNumber - 1}">上一页</a></li>
</c:if>
<c:forEach var="pageNum" begin="1" end="${pageBean.totalPages}">
<li>
<c:choose>
<c:when test="${pageNum == pageBean.pageNumber}">
<strong>${pageNum}</strong>
</c:when>
<c:otherwise>
<a href="?pageNumber=${pageNum}">${pageNum}</a>
</c:otherwise>
</c:choose>
</li>
</c:forEach>
<c:if test="${pageBean.pageNumber < pageBean.totalPages}">
<li><a href="?pageNumber=${pageBean.pageNumber + 1}">下一页</a></li>
</c:if>
<li><a href="?pageNumber=${pageBean.totalPages}">尾页</a></li>
</ul>
</c:when>
</c:choose>
</body>
</html>
<%
userDao.closeConnection(); // 关闭数据库连接
%>
3. 示例说明
3.1 示例一
实现一个用于展示用户列表的jsp页面,每页显示10条记录,数据从MySQL数据库中读取。
首先,在前面的步骤中,我们已经完成了分页类和数据库操作类的编写。下面我们需要创建一个名为user.jsp的jsp页面,用于展示用户列表。
在user.jsp页面中,我们使用了JSTL标签
用户访问user.jsp页面时,我们默认显示第一页的数据,并通过URL中的参数pageNumber来控制当前页数。
3.2 示例二
实现一个用于展示日志列表的jsp页面,每页显示20条记录,数据从Oracle数据库中读取。
除了数据库类型和每页显示记录数之外,和示例一类似,我们只需要将UserDao中的连接数据库和读取参数的代码修改为Oracle数据库,并在jsp页面中修改每页显示记录数即可。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:简单实现jsp分页 - Python技术站