jsp分页显示完整实例

下面就来详细讲解一下“jsp分页显示完整实例”的攻略。

什么是分页显示?

分页显示是指将大量数据分开展示,并通过页面的控件使用户可以翻页操作,进行查看。

为什么需要分页显示?

如果展示的数据量过大,会导致页面加载速度变慢,甚至使页面崩溃。另外,用户在查看数据时,如果没有分页功能,会使得他们无法方便地找到所需数据。

实现分页显示的方法

实现分页显示有多种方法,例如前端实现分页功能,后端实现分页功能等,这里我们主要介绍一种流行的方式——后端实现分页功能。

后端实现分页功能的流程如下:

  1. 从数据库中查询出需要分页展示的数据。

sql
SELECT * FROM table_name LIMIT 0, 10;

这里的LIMIT语句表示从数据库table_name中取出第1条到第10条数据。

  1. 将数据展示在页面上。

  2. 在页面上添加分页控件,使用户可以翻页操作。

  3. 用户操作分页控件后,重新从数据库获取数据,再将数据展示在页面上。

接下来,我们以一个实例来介绍如何使用jsp实现分页功能。

实例1:使用jsp分页显示员工列表

1. 实现分页的后端代码

  • JSP页面

```jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util." %>
<%@ page import="java.sql.
" %>



<span class="wpcom_tag_link"><a href="https://pythonjishu.com/tag/java/" title="Java" target="_blank">Java</a></span>Web Demo


<%@include file="header.jsp" %>
<% int page = request.getParameter("page") == null ? 1 : Integer.parseInt(request.getParameter("page")); int pageSize = 10; int startRow = (page - 1) * pageSize; String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8"; String username = "root"; String password = "123456"; String driver = "com.mysql.cj.jdbc.Driver"; Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { Class.forName(driver); connection = DriverManager.getConnection(url, username, password); String sql = "SELECT * FROM employee LIMIT ?, ?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, startRow); preparedStatement.setInt(2, pageSize); resultSet = preparedStatement.executeQuery(); List> resultList = new ArrayList<>();
while (resultSet.next()) {
Map map = new HashMap<>();
map.put("name", resultSet.getString("name"));
map.put("age", resultSet.getInt("age"));
map.put("salary", resultSet.getDouble("salary"));
resultList.add(map);
}

int rowCount = 0;
sql = "SELECT COUNT(*) FROM employee";
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
rowCount = resultSet.getInt(1);
}

int pageCount = rowCount % pageSize == 0 ? rowCount / pageSize : rowCount / pageSize + 1;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
%>

<% for (Map map : resultList) { %>

<% } %>

姓名 年龄 薪资
<%= map.get("name") %> <%= map.get("age") %> <%= map.get("salary") %>


```

在页面上,我们使用了一个表格展示员工列表,同时,在页面底部添加了一个分页控件。

在JSP页面中,我们通过request.getParameter("page")获取到当前请求的页码,如果没有传入页码,则默认为第一页。

从数据库中获取数据的SQL语句为SELECT * FROM employee LIMIT ?, ?,在SQL语句中我们使用了LIMIT语句,表示从employee表中取出数据的起始行数和行数条数。

在获取到数据后,我们将它封装成一个List>集合对象,再通过循环将数据展示在页面上。

  • 控制器代码

```java
package com.demo.controller;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/employee")
public class EmployeeController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("/employee.jsp").forward(req, resp);
}
}
```

控制器代码非常简单,就是将请求转发到JSP页面上。

2. 实现分页的前端代码

前端代码中,我们主要就是添加了一个分页控件。

前端代码如下:

<ul>
  <li><a href="?page=1">首页</a></li>
  <li><a href="?page=<%= page - 1 < 1 ? 1 : page - 1 %>">上一页</a></li>
  <%
      for (int i = 1; i <= pageCount; i++) {
          if (page == i) {
  %>
              <li><a href="?page=<%= i %>" style="color: red;"><%= i %></a></li>
          <% } else { %>
              <li><a href="?page=<%= i %>"><%= i %></a></li>
          <% } %>
      <% } %>
  <li><a href="?page=<%= page + 1 > pageCount ? pageCount : page + 1 %>">下一页</a></li>
  <li><a href="?page=<%= pageCount %>">末页</a></li>
</ul>

在分页控件中,我们使用了一个for循环,循环次数为pageCount,表示总页数。在循环中,我们判断当前循环的页码是否等于当前所显示的页码,如果相等就为该页码添加style="color: red;"属性,表示当前页;否则就展示为普通的超链接。

示例2:JSP实现使用自定义标签分页显示

除了在页面中写代码实现分页功能外,还可以使用JSP自定义标签来实现分页显示。

1. 实现分页的后端代码

  • JSP页面

```jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="custom" uri="/taglib/page" %>



JavaWeb Demo


<%@include file="header.jsp" %>
<% int page = request.getParameter("page") == null ? 1 : Integer.parseInt(request.getParameter("page")); int pageSize = 10; int startRow = (page - 1) * pageSize; String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8"; String username = "root"; String password = "123456"; String driver = "com.mysql.cj.jdbc.Driver"; Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { Class.forName(driver); connection = DriverManager.getConnection(url, username, password); String sql = "SELECT * FROM employee LIMIT ?, ?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, startRow); preparedStatement.setInt(2, pageSize); resultSet = preparedStatement.executeQuery(); List> resultList = new ArrayList<>();
while (resultSet.next()) {
Map map = new HashMap<>();
map.put("name", resultSet.getString("name"));
map.put("age", resultSet.getInt("age"));
map.put("salary", resultSet.getDouble("salary"));
resultList.add(map);
}

int rowCount = 0;
sql = "SELECT COUNT(*) FROM employee";
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
rowCount = resultSet.getInt(1);
}

int pageCount = rowCount % pageSize == 0 ? rowCount / pageSize : rowCount / pageSize + 1;

request.setAttribute("pageCount", pageCount);
request.setAttribute("page", page);
request.setAttribute("resultList", resultList);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
%>

<% for (Map map : resultList) { %>

<% } %>

姓名 年龄 薪资
<%= map.get("name") %> <%= map.get("age") %> <%= map.get("salary") %>



```

在JSP页面中,我们引用了一个自定义标签custom:page,这个标签的具体实现可以在后面的代码中看到。

在获取到数据后,我们将它封装成一个List>集合对象,同样使用循环将数据展示在页面上。

  • 控制器代码同示例1。

2. 实现分页的标签代码

  • 标签处理类

```java
package com.demo.taglib;

import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;

public class PageTag extends SimpleTagSupport {
// 每页记录数
private int pageSize;
// 总页数
private int pageCount;
// 当前页
private int currentPage;

  public void setPageSize(int pageSize) {
      this.pageSize = pageSize;
  }

  public void setPageCount(int pageCount) {
      this.pageCount = pageCount;
  }

  public void setCurrentPage(int currentPage) {
      this.currentPage = currentPage;
  }

  @Override
  public void doTag() throws IOException {
      JspWriter out = getJspContext().getOut();
      out.print("<div>");
      out.print("<ul>");

      if (currentPage == 1) {
          out.print("<li><a href=\"javascript:void(0);\" style=\"color: gray;\">上一页</a></li>");
      } else {
          out.print("<li><a href=\"?page=" + (currentPage - 1) + "\">上一页</a></li>");
      }

      for (int i = 1; i <= pageCount; i++) {
          if (currentPage == i) {
              out.print("<li><a href=\"javascript:void(0);\" style=\"color: red;\">" + i + "</a></li>");
          } else {
              out.print("<li><a href=\"?page=" + i + "\">" + i + "</a></li>");
          }
      }

      if (currentPage == pageCount) {
          out.print("<li><a href=\"javascript:void(0);\" style=\"color: gray;\">下一页</a></li>");
      } else {
          out.print("<li><a href=\"?page=" + (currentPage + 1) + "\">下一页</a></li>");
      }

      out.print("</ul>");
      out.print("</div>");
  }

}
```

自定义标签custom:page的代码实现在这里。

在标签中,我们获取到页面传来的pageSizepageCountcurrentPage,根据这些参数生成HTML分页控件,并将其打印在页面上。

  • 标签库描述文件

```xml


1.0
/taglib/page

  <tag>
      <name>page</name>
      <tag-class>com.demo.taglib.PageTag</tag-class>
      <body-content>empty</body-content>
      <attribute>
          <name>pageSize</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
      </attribute>
      <attribute>
          <name>pageCount</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
      </attribute>
      <attribute>
          <name>currentPage</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
      </attribute>
  </tag>


```

这里是标签库描述文件,定义了自定义标签的名称,实现类和相关属性。我们通过JSP页面中声明的URI来引用标签库中的自定义标签。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsp分页显示完整实例 - Python技术站

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

相关文章

  • IDEA2022创建Maven Web项目教程(图文)

    让我为您详细讲解“IDEA2022创建Maven Web项目教程(图文)”的完整攻略: 1. 准备工作 在开始创建 Maven Web 项目前,您需要先准备好以下环境与工具: IntelliJ IDEA 2022 JDK 8或以上版本 Maven 3.6.0 或以上版本 2. 创建 Maven Web 项目 启动 IntelliJ IDEA,并选择菜单栏中的…

    Java 2023年5月19日
    00
  • Java中String的JdbcTemplate连接SQLServer数据库的方法

    下面是详细讲解如何使用JdbcTemplate连接SQLServer数据库的方法的完整攻略: 第一步:导入JDBC驱动 要使用JdbcTemplate连接SQLServer数据库,需要先导入JDBC驱动。在Maven项目中,可以在pom.xml文件中加入以下依赖: <dependency> <groupId>com.microsoft…

    Java 2023年5月20日
    00
  • 浅谈Java中File文件的创建以及读写

    浅谈Java中File文件的创建以及读写 在Java中,我们可以使用File类同时实现文件的创建和读写操作。下面将详细介绍File类的相关操作。 创建File文件 我们可以通过File类创建文件,具体代码如下: import java.io.*; public class CreateFile { public static void main(String…

    Java 2023年5月20日
    00
  • 详解Java如何实现加密或者解密PDF文档

    让我来详细讲解Java如何实现加密或者解密PDF文档的完整攻略。 一、PDF加密或解密的基本原理 在讲解如何实现PDF加密或解密之前,先来了解一下PDF加密或解密的基本原理。 PDF加密是通过对PDF文档进行加密处理,在文档中添加一些限制来保护PDF文档的安全性。PDF加密主要包括以下方式: 对PDF文档全文进行加密,需要输入密码才能查看; 对PDF文档的部…

    Java 2023年5月26日
    00
  • 详解windows 10中Tomcat安装和部署的教程

    详解Windows 10中Tomcat安装和部署的教程 本教程将演示如何在Windows 10操作系统中安装和部署Tomcat服务器,以便在本地计算机上开发和测试Java Web应用程序。 步骤1:下载Tomcat安装包 在Apache Tomcat官网中下载tomcat安装包。选择所需的版本和适用于您计算机的操作系统,下载文件并保存到计算机中。 步骤2:安…

    Java 2023年5月19日
    00
  • jQuery 导航自动跟随滚动的实现代码

    jQuery 导航自动跟随滚动是一种常见的页面交互效果,它可以使页面导航栏在用户滚动页面时自动跟随滚动并保持固定位置。下面是实现这个效果的详细攻略: 1.添加导航栏 首先,在 HTML 文件中添加一个导航栏,通常是一个 ul 列表,其中包含若干个 li 子项。 <nav> <ul> <li><a href=&quot…

    Java 2023年6月15日
    00
  • 深入理解java三种工厂模式

    深入理解Java三种工厂模式 工厂设计模式概述 工厂设计模式是一种常见的创建型设计模式,它提供了一个创建对象的接口,但是允许子类决定实例化哪个类。工厂模式可以将对象的实例化过程从客户代码中分离出来,从而实现了松耦合,提高了代码的可维护性和可扩展性。 Java中有三种工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式。接下来我们将逐一解析这三种模式。 简单工厂…

    Java 2023年5月20日
    00
  • 散列算法与散列码(实例讲解)

    当我们需要在计算机中存储大量数据时,通常需要使用散列算法来处理数据。简单来说,散列算法就是将一个任意长度的输入,通过计算得到一个固定长度的输出,这个固定长度的输出就是散列码。 散列算法常用的应用场景包括密码存储和数据校验等。 常用散列算法 目前最常用的散列算法包括MD5、SHA-1、SHA-256等。这些算法的优点在于对于相同的输入,输出结果总是一样的。但是…

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