简单实现jsp分页

下面是详细讲解“简单实现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进行查询。

在实现分页方法之前,我们需要先完成如下几个步骤:

  1. 连接数据库
  2. 导入mysql-connector-java.jar包
  3. 编写数据库配置文件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页面中,我们需要完成如下几个步骤:

  1. 引入分页类和数据库操作类UserDao
  2. 获取当前页数和每页显示的记录数
  3. 获取总记录数和总页数
  4. 根据当前页数和每页显示的记录数查询数据列表
  5. 使用分页类展示分页数据

下面是一个示例代码:

<%@ 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标签来遍历数据列表,并使用JSTL标签/来生成分页链接。

用户访问user.jsp页面时,我们默认显示第一页的数据,并通过URL中的参数pageNumber来控制当前页数。

3.2 示例二

实现一个用于展示日志列表的jsp页面,每页显示20条记录,数据从Oracle数据库中读取。

除了数据库类型和每页显示记录数之外,和示例一类似,我们只需要将UserDao中的连接数据库和读取参数的代码修改为Oracle数据库,并在jsp页面中修改每页显示记录数即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:简单实现jsp分页 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • jsp中实现带滚动条的table表格实例代码

    下面我将为你详细讲解jsp中实现带滚动条的table表格的完整攻略。 1.使用div包裹table实现 第一种方法是使用div包裹table实现,步骤如下: 1.1 编写HTML结构 在jsp页面中,先编写HTML结构: <div id="table-wrapper"> <div id="table-scrol…

    Java 2023年6月15日
    00
  • Java进阶之FileUpload完成上传的实例

    Java进阶之FileUpload完成上传的实例 File Upload(文件上传)是Web应用程序中常用的功能之一,可以让用户将自己的文件上传到服务器。本文将介绍如何使用Java来实现文件上传功能。 实现流程 1.创建表单 首先,在前端编写一个表单,用来选择要上传的文件: <form action="upload" method=…

    Java 2023年6月2日
    00
  • 手动编译并运行Java项目实现过程解析

    手动编译并运行Java项目的过程可以分为以下步骤: 1. 编写Java代码 首先,我们需要编写Java代码。可以使用任何文本编辑器编写Java代码,只需要将代码保存为.java文件即可。例如,我们可以创建一个名为HelloWorld.java的文件,并将以下代码复制到其中: public class HelloWorld { public static vo…

    Java 2023年5月19日
    00
  • springboot整合mybatisplus的方法详解

    下面我将介绍Spring Boot整合Mybatis-Plus的详细方法,包括项目环境搭建、依赖引入、配置文件设置、代码实现等内容。 环境搭建 在进行整合前首先需要搭建好Spring Boot项目的开发环境,可以使用IDE工具,如IntelliJ IDEA、Eclipse等,也可以通过Spring Initializr快速生成一个Spring Boot项目的…

    Java 2023年5月20日
    00
  • 使用Ajax实现简单的带百分比进度条实例

    使用Ajax实现简单的带百分比进度条实例 在Web开发中,经常会遇到需要上传大文件或发送复杂请求的情况,此时通常会借助Ajax实现异步上传或异步请求,提高用户体验。而在这个过程中,我们通常会通过进度条来展示任务的进度情况。在本篇文章中,我们将介绍如何使用Ajax实现简单的带百分比进度条实例。 实现步骤 以下是实现带百分比进度条的基本步骤: 创建一个进度条元素…

    Java 2023年6月15日
    00
  • 详解Java的MyBatis框架中的事务处理

    详解Java的MyBatis框架中的事务处理 什么是MyBatis MyBatis是一个优秀的持久层框架,它对jdbc的操作进行了封装,使我们能够以xml或注解的方式来实现对数据库的CRUD操作,同时它也提供了对事务的支持。 什么是事务 事务是一组操作单元,这些单元要么全部成功执行,要么全部回滚执行。通常情况下,一个事务涉及到一系列对数据的读/写操作,并且这…

    Java 2023年5月20日
    00
  • Java 精炼解读时间复杂度与空间复杂度

    Java 精炼解读时间复杂度与空间复杂度攻略 什么是时间复杂度与空间复杂度 时间复杂度和空间复杂度是算法分析的两个重要参数。它们用于衡量算法的运行效率和空间消耗。 时间复杂度:衡量算法运行时间的增长率,通常用大O计数法表示。比如O(1)、O(n)、O(n^2)等等。 空间复杂度:衡量算法所需的内存空间大小的增长率,也是用大O计数法表示。和时间复杂度类似,也可…

    Java 2023年5月19日
    00
  • 详解json在SpringBoot中的格式转换

    下面详细讲解“详解json在SpringBoot中的格式转换”的完整攻略。 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,通常用于前后端数据交互。它基于JavaScript语言中的对象字面量表示法,而且易于读写和解析生成,被广泛应用于Web开发中。 JSON实际上就是一个字符串,它使用键值对的方式…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部