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 2023年5月11日
    00
  • servlet实现文件上传与下载功能

    实现文件上传和下载功能是Web开发中比较常见的需求,其中使用Servlet技术是一种比较常用的方式。下面我将从Servlet的角度详细讲解如何实现文件上传和下载功能。 文件上传 1. 创建 HTML 表单 我们需要在 HTML 表单中添加 <input> 标签,然后设置 type 属性为 file,即可实现文件上传功能。 <form act…

    Java 2023年6月15日
    00
  • 简单讲解java中throws与throw的区别

    简单讲解java中throws与throw的区别 在Java中,throw和throws关键字经常用到,尤其在异常处理方面。虽然它们的名称相似,但它们却有着截然不同的作用。下面,我们将用清晰易懂的方式详细讲解这两个关键字的区别。 throw throw关键字用于抛出一个异常,用来通知调用方法的代码,指明了出现了问题,并且在遇到无法处理的异常时将它传递给调用者…

    Java 2023年5月25日
    00
  • struts2入门介绍及代码实例

    Struts2 入门介绍及代码实例 什么是 Struts2? ​Struts2 是一个基于 Java 网络应用框架,使用 MVC 设计模式,将应用程序分成模型、视图和控制器(model-view-controller,MVC)三部分,它由 Apache 软件基金会主导开发,是 Struts1 的升级版, 通过 Struts2 可以极大地简化 Web 应用的开…

    Java 2023年5月20日
    00
  • java控制台打印本月的日历

    下面我来详细讲解一下如何使用Java控制台打印本月的日历。 1. 获取当前系统日期 在Java中,可以通过 java.util.Calendar 类获取当前系统日期。该类默认获取的日期是当前系统日期,可以使用以下代码进行获取: Calendar cal = Calendar.getInstance(); 2. 获取本月天数并确定第一天 通过 Calendar…

    Java 2023年5月20日
    00
  • SpringBoot入门教程详解

    Spring Boot是一个非常流行的Java Web框架,它可以帮助开发者快速地构建Web应用程序。在本攻略中,我们将详细介绍如何使用Spring Boot,并提供两个示例来说明其用法。 以下是两个示例,介绍如何使用Spring Boot: 示例一:使用Spring Boot构建一个简单的Web应用程序 首先,我们需要在pom.xml文件中添加以下依赖: …

    Java 2023年5月15日
    00
  • Java配置DBeaver的详细步骤

    以下是Java配置DBeaver的详细步骤: 步骤一:下载并安装DBeaver 1.前往DBeaver官网,下载对应操作系统的安装包。例如:Windows系统下载dbeaver-ce-x.y.z-x64-setup.exe。 2.双击exe文件,按照向导提示安装DBeaver。 步骤二:安装MySQL驱动 1.前往MySQL官网,下载对应版本的MySQL C…

    Java 2023年6月1日
    00
  • JAVA基础-GUI

    JAVA基础-GUI攻略 1. GUI概述 GUI即图形用户界面(Graphical User Interface),是用户与操作系统的交互界面。在Java中,使用Java Swing和JavaFX等框架来编写GUI应用程序。 Swing是一套Java原生的GUI控件,可以在几乎所有的Java平台上运行。JavaFX是Java平台的一个富客户端平台,提供了可…

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