JSP分页显示的实例代码

JSP分页是指将大量数据分为多页进行展示,提高用户体验并减少服务器压力。下面将详细讲解如何实现JSP分页显示,以及两个示例说明。

一、分页的基本思路

  1. 在JSP页面中,使用SQL语句查询出所有数据数量;
  2. 计算总页数,每页显示数据数量,以及当前页码;
  3. 使用SQL语句查询出当前页码的数据;
  4. 在JSP页面中循环显示当前页码的数据,并在页面上添加分页控件。

二、实现步骤

1. 数据库准备

假设我们需要对一张名为user的表进行分页显示。表中包含idname两个字段。

2. 在JSP页面中进行查询

在JSP页面中编写SQL查询语句,查询出数据库中数据的总数量,并将其存储到totalCount变量中。

<%
    Connection conn = null;
    PreparedStatement ps = null;
    ResultSet rs = null;

    String sql = "SELECT COUNT(*) FROM user";

    try {
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
        ps = conn.prepareStatement(sql);
        rs = ps.executeQuery();
        if (rs.next()) {
            int totalCount = rs.getInt(1);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        // 关闭数据库连接
    }
%>

3. 分页计算

计算总页数,每页显示数据数量以及当前页码,并将其存储到相应的变量中。这里我们设定每页显示5条数据。

<%
    int pageSize = 5;
    int currentPage = 1;
    int totalCount = 0;
    int totalPage = 0;

    // 上面查询数据库的代码

    if (request.getParameter("currentPage") != null) {
        currentPage = Integer.parseInt(request.getParameter("currentPage"));
    }

    totalPage = (totalCount + pageSize - 1) / pageSize;
%>

4. 查询当前页码数据

根据当前页码和每页显示数据数量,在SQL语句中加上LIMIT限制条件,从数据库中查询出当前页码的数据。

<%
    String sql = "SELECT * FROM user LIMIT ?, ?";
    int start = (currentPage - 1) * pageSize;
    ps = conn.prepareStatement(sql);
    ps.setInt(1, start);
    ps.setInt(2, pageSize);
    rs = ps.executeQuery();

    while (rs.next()) {
        int id = rs.getInt("id");
        String name = rs.getString("name");
        // 将数据展示到页面上
    }
%>

5. 分页控件的实现

在页面上以列表的形式展示数据,并在底部添加分页的控件。通常的分页控件有“上一页”、“下一页”、“首页”、“尾页”和页码数字等。这里以Bootstrap为例实现一个简单的分页控件。

<nav aria-label="Page navigation">
  <ul class="pagination">
    <li <% if (currentPage == 1) { %>class="disabled"<% } %>>
      <a href="/index.jsp?currentPage=<%= currentPage - 1 %>" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
    <% for (int i = 1; i <= totalPage; i++) { %>
    <li <% if (i == currentPage) { %>class="active"<% } %>>
      <a href="/index.jsp?currentPage=<%= i %>"><%= i %></a>
    </li>
    <% } %>
    <li <% if (currentPage == totalPage) { %>class="disabled"<% } %>>
      <a href="/index.jsp?currentPage=<%= currentPage + 1 %>" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
  </ul>
</nav>

三、示例说明

示例1:分页查询学生信息

我们需要将一张名为student的表进行分页展示,其中包含字段idnameagescore。并按照分数从高到低进行排序。

具体实现过程如下:

  1. 在JSP页面中,使用SQL语句查询出所有学生数据数量;
  2. 计算总页数,每页显示10条数据,以及当前页码;
  3. 使用SQL语句查询出当前页码的学生数据,并按照分数从高到低排序;
  4. 在JSP页面中循环显示当前页码的学生数据,并在页面上添加分页控件。

示例代码如下:

<%
    Connection conn = null;
    PreparedStatement ps = null;
    ResultSet rs = null;

    String sql = "SELECT COUNT(*) FROM student";

    try {
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
        ps = conn.prepareStatement(sql);
        rs = ps.executeQuery();
        if (rs.next()) {
            int totalCount = rs.getInt(1);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        // 关闭数据库连接
    }

    int pageSize = 10;
    int currentPage = 1;
    int totalPage = 0;

    if (request.getParameter("currentPage") != null) {
        currentPage = Integer.parseInt(request.getParameter("currentPage"));
    }

    totalPage = (totalCount + pageSize - 1) / pageSize;

    sql = "SELECT * FROM student ORDER BY score DESC LIMIT ?, ?";
    int start = (currentPage - 1) * pageSize;
    ps = conn.prepareStatement(sql);
    ps.setInt(1, start);
    ps.setInt(2, pageSize);
    rs = ps.executeQuery();

    while (rs.next()) {
        int id = rs.getInt("id");
        String name = rs.getString("name");
        int age = rs.getInt("age");
        float score = rs.getFloat("score");
        // 将数据展示到页面上
    }
%>

<nav aria-label="Page navigation">
  <ul class="pagination">
    <li <% if (currentPage == 1) { %>class="disabled"<% } %>>
      <a href="/student.jsp?currentPage=<%= currentPage - 1 %>" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
    <% for (int i = 1; i <= totalPage; i++) { %>
    <li <% if (i == currentPage) { %>class="active"<% } %>>
      <a href="/student.jsp?currentPage=<%= i %>"><%= i %></a>
    </li>
    <% } %>
    <li <% if (currentPage == totalPage) { %>class="disabled"<% } %>>
      <a href="/student.jsp?currentPage=<%= currentPage + 1 %>" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
  </ul>
</nav>

示例2:分页查询商品信息

我们需要将一张名为goods的表进行分页展示,其中包含字段idnamepriceimage。并按照价格从低到高进行排序。

具体实现过程如下:

  1. 在JSP页面中,使用SQL语句查询出所有商品数据数量;
  2. 计算总页数,每页显示20条数据,以及当前页码;
  3. 使用SQL语句查询出当前页码的商品数据,并按照价格从低到高排序;
  4. 在JSP页面中循环显示当前页码的商品数据,并在页面上添加分页控件。

示例代码如下:

<%
    Connection conn = null;
    PreparedStatement ps = null;
    ResultSet rs = null;

    String sql = "SELECT COUNT(*) FROM goods";

    try {
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
        ps = conn.prepareStatement(sql);
        rs = ps.executeQuery();
        if (rs.next()) {
            int totalCount = rs.getInt(1);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        // 关闭数据库连接
    }

    int pageSize = 20;
    int currentPage = 1;
    int totalPage = 0;

    if (request.getParameter("currentPage") != null) {
        currentPage = Integer.parseInt(request.getParameter("currentPage"));
    }

    totalPage = (totalCount + pageSize - 1) / pageSize;

    sql = "SELECT * FROM goods ORDER BY price ASC LIMIT ?, ?";
    int start = (currentPage - 1) * pageSize;
    ps = conn.prepareStatement(sql);
    ps.setInt(1, start);
    ps.setInt(2, pageSize);
    rs = ps.executeQuery();

    while (rs.next()) {
        int id = rs.getInt("id");
        String name = rs.getString("name");
        float price = rs.getFloat("price");
        String image = rs.getString("image");
        // 将数据展示到页面上
    }
%>

<nav aria-label="Page navigation">
  <ul class="pagination">
    <li <% if (currentPage == 1) { %>class="disabled"<% } %>>
      <a href="/goods.jsp?currentPage=<%= currentPage - 1 %>" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
    <% for (int i = 1; i <= totalPage; i++) { %>
    <li <% if (i == currentPage) { %>class="active"<% } %>>
      <a href="/goods.jsp?currentPage=<%= i %>"><%= i %></a>
    </li>
    <% } %>
    <li <% if (currentPage == totalPage) { %>class="disabled"<% } %>>
      <a href="/goods.jsp?currentPage=<%= currentPage + 1 %>" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
  </ul>
</nav>

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

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

相关文章

  • 一文搞懂JavaScript如何实现图片懒加载

    一文搞懂JavaScript如何实现图片懒加载 图片懒加载是一种优化网页性能的技术,可以提升加载速度,改善用户体验。本文将详细讲解如何通过JavaScript实现图片懒加载。 什么是图片懒加载? 图片懒加载是一种延迟加载图片的方法,也称为Lazy Loading。当用户滚动页面,懒加载技术会根据图片距离浏览器窗口的距离以及当前的滚动位置,判断是否需要加载该图…

    css 2023年6月9日
    00
  • 移动端网页解决CSS的active伪类无效的方法

    移动端网页解决CSS的active伪类无效的方法主要是使用JS来实现。 方法一:使用touchstart和touchend事件 当移动端用户点击屏幕时,会先触发touchstart事件,当手指从屏幕上离开时会触发touchend事件。我们可以利用这两个事件来实现CSS的:active伪类的效果。 <button id="testBtn&quo…

    css 2023年6月10日
    00
  • CSS3的Flexible Boxes详细使用教程

    CSS3的Flexible Boxes详细使用教程 CSS3的Flexible Boxes(弹性盒子)是CSS布局的一种新技术,它可以更好地解决页面中的布局问题。通过使用弹性盒子,我们可以更方便地实现响应式设计,减少多余的CSS代码。 弹性盒子的基本概念 弹性盒子由容器和项目组成,容器包括了一定数量的项目。在弹性布局中,我们把容器称为“flex contai…

    css 2023年6月11日
    00
  • 详解CSS 子元素相对于父元素固定定位解决方案

    详解CSS 子元素相对于父元素固定定位解决方案 问题描述 在CSS中,如果想要子元素相对于父元素进行定位,常见的做法是将父元素设置为相对定位(即position: relative;),然后在子元素中使用position: absolute;来进行定位。但是如果子元素的定位是固定的,比如一个弹出框或者侧边导航栏,那么当父元素滚动时,子元素便会随着滚动而移动,…

    css 2023年6月9日
    00
  • jQuery实现浮动层随浏览器滚动条滚动的方法

    下面是详细的“jQuery实现浮动层随浏览器滚动条滚动的方法”的攻略。 1. 使用jQuery实现浮动层随浏览器滚动条滚动的方法 1.1 使用jQuery固定位置方法 使用jQuery的固定位置方法,实现浮动层的位置与浏览器滚动条的位置同步。 代码示例: $(window).scroll(function() { var scrollTop = $(this…

    css 2023年6月10日
    00
  • 微信小程序-可移动菜单的实现过程详解

    微信小程序-可移动菜单的实现过程详解 1. 目录结构 在微信小程序中,我们需要在 app.json 中定义页面路由,所以首先要确认目录结构如下: . ├── app.js ├── app.json ├── app.wxss ├── images │ └── … // 存放图片资源 └── pages ├── index // 首页 │ ├── index…

    css 2023年6月10日
    00
  • 详解CSS中的flex容器与flex属性

    详解CSS中的flex容器与flex属性 在CSS中,我们可以使用flex布局来创建灵活的布局方式。在flex布局中,有两个重要的概念:flex容器和flex项。在本文中,我们将深入探讨flex容器与flex属性,以便更好地理解如何使用flex布局。 什么是flex容器 flex容器是一个用于包含flex项的容器,这个容器将使用flex布局来排列这些项。我们…

    css 2023年6月11日
    00
  • HTML5之SVG 2D入门5—颜色的表示及定义方式

    HTML5中的SVG(Scalable Vector Graphics)可以实现矢量图形的绘制、动画和交互等功能,颜色的表示和定义方式在SVG中也是非常重要的一部分。下面是完整的“HTML5之SVG 2D入门5—颜色的表示及定义方式”攻略,其中包括了颜色的基本概念、在SVG中的颜色使用方法、SVG颜色的类型及定义方式,同时还有两个小型的示例说明。 1. 颜色…

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