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

相关文章

  • java和Spring中观察者模式的应用详解

    我来详细讲解一下“java和Spring中观察者模式的应用详解”的完整攻略。 什么是观察者模式? 观察者模式(Observer Pattern)是一种行为型设计模式,也叫做发布-订阅模式(Publish/Subscribe),用于定义对象之间的一种一对多的依赖关系。当一个对象的状态改变时,所有依赖于它的对象都会收到通知并自动更新。观察者模式的核心思想就是解耦…

    Java 2023年5月20日
    00
  • 详解SpringBoot中的统一功能处理的实现

    我会从以下几个方面讲解“详解SpringBoot中的统一功能处理的实现”: 1.什么是SpringBoot中的统一功能处理2.实现统一功能处理的方式3.示例1:统一异常处理4.示例2:统一日志处理 1.什么是SpringBoot中的统一功能处理 在SpringBoot应用中,我们常常需要实现一些特定的功能,如统一异常处理、统一日志处理等。为了避免在每个Con…

    Java 2023年5月15日
    00
  • JavaWeb实现学生信息管理系统(1)

    JavaWeb实现学生信息管理系统需要以下步骤: 1. 环境搭建 首先需要搭建好JavaWeb开发环境,包括JDK和IDE等工具,以及Tomcat服务器。可以参考相关教程进行安装配置。 2. 创建项目 在IDE中创建一个新的JavaWeb项目,并创建所需的数据库表。可以使用MySQL等关系型数据库进行创建,具体表结构可以根据实际需求进行设计。 3. 编写Ja…

    Java 2023年5月20日
    00
  • 基于JSP实现一个简单计算器的方法

    基于JSP实现一个简单计算器的方法 1. 准备工作 确定需要实现的计算器功能,例如加减乘除四则运算、开方、取余等功能。 创建基于Maven的Web项目,添加所需的依赖。 “`xml javax.servlet jstl 1.2 taglibs standard 1.1.2 “` 在项目的src/main/webapp目录下创建转发器(Dispatcher…

    Java 2023年6月15日
    00
  • Java ArrayList实现班级信息管理系统

    下面我来详细讲解一下“Java ArrayList实现班级信息管理系统”的完整攻略,包括以下内容: 1. 环境准备 首先需要安装Java开发环境,建议使用JDK 8或更高版本。可以到Oracle官网下载安装。 2. 创建班级类 创建一个班级类,可以定义班级名称、班主任姓名、学生列表等属性和方法。一个简单的班级类的示例代码如下: public class Cl…

    Java 2023年5月24日
    00
  • JS+JSP通过img标签调用实现静态页面访问次数统计的方法

    使用JS+JSP通过img标签调用实现静态页面访问次数统计的方法,大致分为以下几个步骤: 创建一个动态生成图片的JSP程序,该程序用来统计访问次数并返回一张透明的1×1像素的PNG图片。 <%@ page language="java" contentType="image/png; charset=UTF-8"…

    Java 2023年6月15日
    00
  • Java Controller实现参数验证与统一异常处理流程详细讲解

    Java Controller实现参数验证与统一异常处理流程详细讲解 参数验证 当我们在编写Java Web应用的Controller时,经常需要验证请求参数的合法性,例如是否为空、是否符合指定格式、是否在合理范围内等。Spring框架提供了一种方便的方式来进行参数验证,即使用JSR-303标准提供的注解来标识验证规则。我们可以使用javax.validat…

    Java 2023年5月27日
    00
  • 判断Session的过期时间 采用JavaScript实时显示剩余多少秒

    判断Session的过期时间,一般可以采用服务器端的方法或客户端的方法,本文主要介绍采用JavaScript实时显示剩余多少秒的客户端实现方法。 准备工作 在实现过程中,需要获取Session的过期时间和当前时间,所以需要在服务器端将Session的过期时间存入到前端,可以将过期时间存入到一个隐藏域中。 代码示例: <input type="…

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