java web手写实现分页功能

下面是“Java Web手写实现分页功能”的详细攻略:

1. 前置知识

在手写实现分页功能之前,需要掌握以下知识:

  • JDBC,用于操作数据库
  • Servlet,用于接收请求和响应数据
  • JSP,用于在页面上呈现数据
  • HTML/CSS,用于美化页面

2. 实现思路

  • 根据用户请求的当前页数和每页显示记录数,计算出查询的起始位置和结束位置
  • 使用JDBC从数据库中查询数据,并根据起始位置和结束位置进行分页
  • 将查询到的数据传递给JSP页面,使用JSTL标签库和EL表达式在页面上呈现数据
  • 在页面上添加分页按钮和链接,方便用户进行翻页操作

3. 实现步骤

3.1 编写JDBC和DAO层代码

在DAO层中使用JDBC从数据库中查询数据,并计算出分页相关的参数,比如总记录数、总页数、起始位置和结束位置等,然后将查询到的数据以及分页相关参数封装到一个PageBean对象中,最后返回给Servlet。

示例代码:

public class UserDaoImpl implements UserDao {

    @Override
    public PageBean<User> findByPage(int currentPage, int pageSize) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            PageBean<User> pageBean = new PageBean<>();
            List<User> userList = new ArrayList<>();

            // 获取数据库连接
            conn = JdbcUtils.getConnection();

            // 查询总记录数
            String countSql = "select count(*) from user";
            ps = conn.prepareStatement(countSql);
            rs = ps.executeQuery();
            rs.next();
            int totalCount = rs.getInt(1);
            pageBean.setTotalCount(totalCount);

            // 计算总页数
            int totalPage = (totalCount + pageSize - 1) / pageSize;
            pageBean.setTotalPage(totalPage);

            // 计算起始位置和结束位置
            int start = (currentPage - 1) * pageSize;
            int end = currentPage * pageSize;

            // 查询分页数据
            String dataSql = "select * from user limit ?, ?";
            ps = conn.prepareStatement(dataSql);
            ps.setInt(1, start);
            ps.setInt(2, pageSize);
            rs = ps.executeQuery();
            while(rs.next()) {
                User user = new User();
                user.setId(rs.getString("id"));
                user.setName(rs.getString("name"));
                user.setAge(rs.getInt("age"));
                userList.add(user);
            }
            pageBean.setData(userList);

            // 设置当前页码和每页显示记录数
            pageBean.setCurrentPage(currentPage);
            pageBean.setPageSize(pageSize);

            return pageBean;
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            JdbcUtils.release(conn, ps, rs);
        }
    }
}

3.2 编写Servlet层代码

在Servlet中接收用户请求参数(当前页数和每页显示记录数),调用DAO层的方法进行查询,并将查询结果封装成PageBean对象传递给JSP页面。

示例代码:

public class UserServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        int currentPage = Integer.parseInt(req.getParameter("currentPage"));
        int pageSize = Integer.parseInt(req.getParameter("pageSize"));

        UserDao userDao = new UserDaoImpl();
        PageBean<User> pageBean = userDao.findByPage(currentPage, pageSize);

        req.setAttribute("pageBean", pageBean);
        req.getRequestDispatcher("/user_list.jsp").forward(req, resp);
    }

}

3.3 编写JSP页面代码

在JSP页面中通过JSTL标签库和EL表达式将查询到的数据呈现在页面上,并添加分页按钮和链接来方便用户进行翻页操作。

示例代码:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>用户列表</title>
</head>
<body>
    <table border="1" align="center">
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>年龄</th>
        </tr>
        <c:forEach var="user" items="${pageBean.data}">
            <tr>
                <td>${user.id}</td>
                <td>${user.name}</td>
                <td>${user.age}</td>
            </tr>
        </c:forEach>
    </table>
    <div align="center">
        <c:if test="${pageBean.currentPage > 1}">
            <a href="${pageContext.request.contextPath}/userServlet?currentPage=${pageBean.currentPage-1}&pageSize=${pageBean.pageSize}">上一页</a>
        </c:if>
        <c:forEach begin="1" end="${pageBean.totalPage}" var="i">
            <c:if test="${pageBean.currentPage == i}">
                ${i }
            </c:if>
            <c:if test="${pageBean.currentPage != i}">
                <a href="${pageContext.request.contextPath}/userServlet?currentPage=${i}&pageSize=${pageBean.pageSize}">${i }</a>
            </c:if>
        </c:forEach>
        <c:if test="${pageBean.currentPage < pageBean.totalPage}">
            <a href="${pageContext.request.contextPath}/userServlet?currentPage=${pageBean.currentPage+1}&pageSize=${pageBean.pageSize}">下一页</a>
        </c:if>
    </div>
</body>
</html>

以上就是手写实现分页功能的完整攻略和示例代码了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java web手写实现分页功能 - Python技术站

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

相关文章

  • 什么是类加载器委托机制?

    以下是关于类加载器委托机制的完整使用攻略: 什么是类加载器委托机制? 类加载器委托机制是Java虚拟机(JVM)用来加载类的一种机制。当J需要加载一个类时,它会先委托给父类加载器进行加载,如果父类加载器无法加载该类,则会委托给子类加载进行加载。这个过程会一直持续到顶层的父类加载器,如果顶层的父类加载器无法加载该类,则会抛ClassNotFoundExcept…

    Java 2023年5月12日
    00
  • 教你如何轻松学会Java快慢指针法

    教你如何轻松学会Java快慢指针法 概述 快慢指针法又叫双指针法,它是一种简单的算法,其核心思想依靠两个指针,一个快指针,一个慢指针来解决问题。在Java中的应用非常广泛,在链表、数组、字符串、树等数据结构中均能见到它的身影。它的时间复杂度通常是O(n),能极大的提高算法效率。 原理 快慢指针法的核心是两个指针,一个快指针,一个慢指针,它们的运动速度一般不同…

    Java 2023年5月26日
    00
  • java如何利用poi解析doc和docx中的数据

    当需要从 Word 文档中提取数据的时候,我们可以使用 Apache POI 来读取 “.doc” 和 “.docx” 文件。下面是如何利用 POI 解析 Word 文档中数据的攻略: 1. 添加 POI 依赖 在项目中添加以下依赖: <dependency> <groupId>org.apache.poi</groupId&g…

    Java 2023年5月20日
    00
  • Spark学习笔记Spark Streaming的使用

    Spark学习笔记Spark Streaming的使用 什么是Spark Streaming? Spark Streaming是Apache Spark的组成部分之一,是一个流处理引擎,可用于处理实时数据流。它可以从各种源头(如Kafka、Flume、Twitter、Socket等)获取数据,并以可扩展的、高容错的方式对数据进行处理和分析。 Spark St…

    Java 2023年5月20日
    00
  • 教你一步到位部署运行MyBatis3源码(保姆级)

    教你一步到位部署运行MyBatis3源码(保姆级) 前言 MyBatis 是一个开源的免费的 Java 持久层框架,它利用简单的 XML 或注解代码来配置和映射数据库操作。 在实际的开发中,我们经常会直接使用 MyBatis 这个框架来进行数据库的操作,但有时候会需要修改或者扩展 MyBatis3 的源码来满足自己的需求,那么这时候就需要我们先将 MyBat…

    Java 2023年5月20日
    00
  • 解决request.getParameter取值后的if判断为NULL的问题

    当我们使用request.getParameter方法来获取HTTP Request请求参数时,如果该参数不存在,那么该方法将返回null。在编写Java Web应用程序时,我们通常要对请求参数进行判断,以确保不会因为未找到请求参数而导致程序出错。但是,有时在用if语句判断是否为null时,可能会出现NullPointerException的问题。 为了解决…

    Java 2023年6月15日
    00
  • 简单探索 Java 中的惰性计算

    简单探索 Java 中的惰性计算 什么是惰性计算? 在Java中,常见的计算形式是立刻计算,在需要的时候将计算结果返回。但是在惰性计算中,计算过程会被延迟到真正需要的时候才计算,这种方式称为惰性计算。 为什么使用惰性计算? 使用惰性计算可以提高程序的效率,因为只有在真正需要计算结果的时候才会进行计算。同时,有些计算是非常耗时的,当程序中存在大量的不必要的计算…

    Java 2023年5月26日
    00
  • 通过Java实现添加或删除PDF中的附件

    这里介绍通过Java实现添加或删除PDF中的附件的完整攻略: 1. 添加附件 1.1 引入相关库 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache…

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