简单实现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日

相关文章

  • 浅谈web服务器项目中静态请求和动态请求处理

    浅谈Web服务器项目中静态请求和动态请求处理 在Web服务器项目中,我们需要处理浏览器发送的请求,并根据请求的内容返回不同的响应内容。其中,请求分为静态请求和动态请求两种类型,下面将详细介绍这两种请求的处理方式。 静态请求处理 静态请求是指访问的资源在服务器中是静态的,不会改变的请求。在处理静态请求时,服务器直接将所请求的文件返回给浏览器即可。对于静态请求,…

    Java 2023年6月15日
    00
  • Java 定时器的多种实现方式

    Java 定时器的多种实现方式 前言 在 Java 开发中,我们经常需要编写定时任务,如定时备份、定时发送消息等。这些任务需要在指定时间点或时间间隔内执行。而实现这些定时任务的方法有多种,本文将一一介绍这些方式,包括 Java 内置定时器、定时线程池、Quartz 框架以及 Spring 自带的定时任务。 Java 内置定时器 Java 内置了一个 Time…

    Java 2023年5月18日
    00
  • Java实现冒泡排序算法

    当需要对一个数组(或者列表)进行排序时,冒泡排序是最基本的一种排序算法之一。下面详细讲解Java实现冒泡排序算法的完整攻略。 定义 “冒泡排序”指的是通过不断地比较相邻的元素,并交换不合适的元素位置,从而逐步将无序的元素移动到正确的位置。它的过程像气泡不断从水中升起,因此得名“冒泡排序”。 实现 下面是Java实现冒泡排序的示例代码: public stat…

    Java 2023年5月19日
    00
  • SpringBoot2.x配置HTTPS访问的过程

    下面是“SpringBoot2.x配置HTTPS访问的过程”的完整攻略。 1. 生成证书 首先需要生成一对密钥(证书和私钥),可以使用 keytool 工具来生成。在终端中执行以下命令: keytool -genkeypair -alias mycertalias -keyalg RSA -keysize 2048 -storetype PKCS12 -ke…

    Java 2023年5月19日
    00
  • Java中的try-catch语句如何使用?

    当Java程序运行时发生异常,程序将会自动停止运行并抛出异常信息。为了避免程序因为异常而终止,可以使用Java中的try-catch语句来捕获异常并处理。 一、语法格式 try-catch语句的语法格式如下: try { // 可能会抛出异常的代码块 } catch (ExceptionType e) { // 捕获并处理异常的代码块 } try:被检测的代…

    Java 2023年4月27日
    00
  • Java ArrayList深入源码层分析

    Java ArrayList深入源码层分析 简介 ArrayList 是 Java 中集合框架中最基础、最常用的一种数据结构,它基于数组实现,可以动态扩容,支持添加、删除、查找等操作。本文将对 ArrayList 的源码进行深入分析,讲解其内部实现原理。 类的继承关系 ArrayList 类位于 java.util 包下,继承于 AbstractList 类…

    Java 2023年5月26日
    00
  • Java中类的定义与实例化详解

    Java中的类是面向对象编程的基础,类不仅定义了对象的属性和方法,还可以作为对象的模板来创建具体的实例。 类的定义 Java中,可以通过关键字class来定义一个类,类的定义通常包含以下几个方面: 访问修饰符,可以是public、private、protected或默认不写; 关键字class; 类的名字; 类的属性,包括属性名和属性类型; 类的方法,包括方…

    Java 2023年5月26日
    00
  • Log4j 配置日志打印时区的实现方法

    下面是具体的攻略: 1. 前言 Log4j 是一个非常优秀的 Java 日志组件,其可以方便的对 Java 应用的运行时状态进行记录和追踪。在对日志进行格式化输出时,Log4j 默认使用的是本地的时间,而不是 UTC 时间。这就导致在跨时区的场景下,输出的时间可能会出现时间误差的问题。因此,在 Log4j 中配置时区信息是非常必要的。 2. 实现方法 2.1…

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