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日

相关文章

  • 分享几个WebSite网站防黑经验

    当今WebSite网站防黑成为了一个非常重要的话题,因为黑客攻击不断增多,如果不及时采取一些安全防范措施,那么就有可能会造成严重的后果,比如用户信息泄露、系统瘫痪、服务不可用等。下面为大家分享几个WebSite网站防黑经验,希望对大家有所帮助。 防御措施1:保持WebSite网站系统更新 在WebSite网站防黑的过程中,系统更新非常重要,因为黑客们对各种漏…

    Java 2023年6月15日
    00
  • Java 函数式编程要点总结

    Java 函数式编程要点总结攻略 简介 函数式编程(Functional Programming)是一种编程范式,它将计算机运算看作数学函数的计算,避免了常规编程语言的状态改变、共享状态、可变数据等问题,从而强制要求开发者写出更加简洁、可复用、易维护的代码。 Java是一种面向对象的编程语言,但自从Java 8引入了Lambda表达式以及函数式编程的相关AP…

    Java 2023年5月20日
    00
  • Java编程接口调用的作用及代码分享

    下面我将详细讲解“Java编程接口调用的作用及代码分享”的完整攻略。 Java编程接口调用的作用 Java编程接口(API)是Java标准库中的一组类和接口,用于提供基本的程序操作功能。Java API包含了很多常用的类,比如String、Math和ArrayList等,可以帮助程序员快速进行开发。 Java编程接口调用的作用是在程序中调用Java API提…

    Java 2023年5月23日
    00
  • Java实现打字游戏

    Java实现打字游戏攻略 概述 在这篇攻略中,我们将学习如何使用Java语言实现一个基本的打字游戏。在游戏开始时,程序会随机选择一个字符串(可以是一个单词或一个句子),然后玩家必须输入这个字符串。如果他们输入正确,游戏将结束,否则他们将需要重新输入。我们将利用Java的输入/输出流和字符串处理来完成这个任务。 实现步骤 步骤一:生成随机字符串 首先,我们需要…

    Java 2023年5月19日
    00
  • JavaBean四个作用域范围的详解

    JavaBean四个作用域范围的详解 JavaBean是指一种符合特定规范的Java类,通常被设计用于传递数据,其中,JavaBean的四个作用域范围是指该JavaBean所处的生命周期不同阶段中,可以被访问的范围。JavaBean的四个作用域范围分别是:request、session、application和pageContext。下面将对这四个作用域分别…

    Java 2023年6月15日
    00
  • Spring Security账户与密码验证实现过程

    下面我来详细讲解“Spring Security账户与密码验证实现过程”的完整攻略。 1. 配置Spring Security 首先,我们需要在项目中配置Spring Security。在Spring Boot项目中,可以通过在pom.xml文件中添加依赖,并在application.properties文件中添加配置字段的方式来完成配置。 在pom.xml…

    Java 2023年6月3日
    00
  • 快速排序的原理及java代码实现

    下面我来详细讲解一下“快速排序的原理及Java代码实现”的完整攻略。 1. 快速排序的原理 快速排序是一种常见的排序算法,其基本思想是:选择一个基准元素,将待排序序列分成两个子序列,使得左边的子序列元素都小于等于基准元素,右边的子序列元素都大于等于基准元素,然后递归地对子序列进行排序,直到整个序列有序。 具体的实现过程如下: 从待排序序列中选择一个基准元素,…

    Java 2023年5月19日
    00
  • hibernate 常用方法介绍

    Hibernate 常用方法介绍 Hibernate 是一个流行的 ORM 工具,它可以大大简化数据库操作过程。本文将介绍一些 Hibernate 的常用方法。 配置 Hibernate 在使用 Hibernate 之前,我们需要进行配置。以下是配置 Hibernate 的基本步骤: 添加项目依赖,包括 Hibernate 核心库、连接池和数据库驱动等。 创…

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