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日

相关文章

  • 详解java线程的开始、暂停、继续

    当涉及到多任务处理时,线程是Java中非常重要的机制。但是,在开始了解Java线程如何开始、暂停、继续之前,我们需要先了解线程的基础知识。 什么是Java线程? Java线程是程序执行中的最小单元,与进程不同,线程是在一个进程中执行的代码片段,每个进程可以有多个线程,而每个线程都可以并行执行不同的任务。Java中的线程可以有效地帮助程序在执行中避免阻塞,从而…

    Java 2023年5月18日
    00
  • JDBC环境设置(中文详解)

    JDBC环境设置(中文详解) 什么是JDBC? Java Database Connectivity(Java数据库连接)简称JDBC,是Java语言中用于规范客户端程序如何访问数据库的应用程序接口,提供了访问和操作数据库的标准方法。 JDBC允许Java程序与多种关系型数据库进行连接和交互,包括MySQL、Oracle、PostgreSQL等。 JDBC环…

    Java 2023年5月20日
    00
  • java实现抖音代码舞源码

    Java实现抖音代码舞源码的攻略,可分为以下步骤: 1. 获取抖音视频 首先需要获取抖音视频,可以通过解析抖音分享链接来获取。可以使用Java中的网络爬虫技术,发送GET请求获取页面源代码,然后通过正则表达式或Jsoup等HTML解析器解析页面元素,获取视频链接。 以下是一个示例代码段,通过Jsoup获取某个抖音分享链接页面中的视频链接。 import or…

    Java 2023年5月19日
    00
  • Java实现KFC点餐系统过程解析

    Java实现KFC点餐系统过程解析 KFC点餐系统是一种常见的餐饮行业管理系统,它通常具备点餐、下单、处理订单、计算账单、管理运营等多项功能。Java作为一门跨平台的编程语言,它的面向对象特性和易学程度,使其被广泛应用于KFC点餐系统的开发中。 1. 确定需求功能 在开发KFC点餐系统前,首先需要明确该点餐系统要实现哪些功能。比如,该点餐系统需要实现菜单浏览…

    Java 2023年5月30日
    00
  • MooTools 1.2介绍

    MooTools 1.2介绍 什么是MooTools MooTools是一个JavaScript框架,它旨在提供一组易于使用的功能,以帮助开发人员轻松地开发现代Web应用程序。 MooTools的特点是易于扩展,因此可用于实现各种功能。 MooTools的基本特性 以下是MooTools的一些主要特性: 选择器:MooTools使用了类似于CSS选择器的语法…

    Java 2023年6月15日
    00
  • Spring Security全新版本使用方式

    下面是“Spring Security全新版本使用方式”的完整攻略。 一、什么是Spring Security? Spring Security是一个开源的安全框架,为Spring应用提供了一组安全服务,用于Web应用程序和服务保护。它提供了身份验证和授权,防止攻击,保护数据等一系列安全功能。因此Spring Security成为了Java领域中常用的安全框…

    Java 2023年6月3日
    00
  • 如何使用Java字节码操纵库?

    Java字节码操纵库是一个用于读写、操纵Java字节码的工具库,常用于动态生成和修改字节码,实现AOP、代码增强等功能。本文将详细讲解Java字节码操纵库的使用攻略,包括环境配置、库的选择、常用API使用示例等。 环境配置 在开始使用Java字节码操纵库之前,我们需要确保系统已安装JDK,建议使用JDK 8及以上版本。然后,我们需要下载并导入所选的字节码操纵…

    Java 2023年5月11日
    00
  • Java中字符数组和字符串与StringBuilder和字符串转换的讲解

    下面我将为您详细讲解Java中字符数组和字符串与StringBuilder和字符串转换的完整攻略。 1. 字符数组和字符串 1.1 字符数组 在Java中,字符数组是由char类型的元素构成的一种数据结构,可以通过以下代码创建: char[] charArray = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’}; 1.2 字符串 字符串是由一系列字符组…

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