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判断字符串是否含有乱码实例代码

    当检测到非ASCII码字符时,Java中的字符串会采用UTF-16编码。这意味着,如果字符串中存在其他编码类型的非ASCII码字符,那么这些字符就会被认为是乱码。因此,判断一个字符串是否含有乱码需要进行以下操作: 将字符串转化为字节类型; 利用字符编码类型,将字节数组转化为字符串。 以下是一个Java判断字符串是否含有乱码的示例代码: import java…

    Java 2023年5月27日
    00
  • Java 实战范例之校园二手市场系统的实现

    Java 实战范例之校园二手市场系统的实现 项目简介 本项目是一款基于Java的校园二手市场系统。该系统具有商品发布、购买、评论、搜索、推荐等功能,旨在为用户提供一个安全、高效、便捷的交易平台。 项目架构 服务器 本项目采用SpringBoot作为Web应用的框架,使用MySQL作为后端数据库,Spring Security负责安全认证、用户名密码加密等功能…

    Java 2023年5月24日
    00
  • java定义二维数组的几种写法(小结)

    下面是关于Java定义二维数组的几种写法的完整攻略。 概述 二维数组是Java编程中常用的数据结构,它可以看作是一维数组的集合,即数组中的每个元素都是一维数组。在Java中,我们可以使用多种方式来定义和初始化二维数组。 定义二维数组的几种写法 声明并分配空间 我们可以通过声明二维数组的方式来决定它所包含的元素数量,然后在代码中分配所需的空间。 int[][]…

    Java 2023年5月26日
    00
  • 将java项目打包成exe可执行文件的完整步骤

    将Java项目打包成exe可执行文件的步骤如下: 准备工作: 安装好Java开发环境(JDK) 打包工具 jpackage 构建可执行jar包: 在Java项目中,使用 maven 或 gradle 等构建工具,构建可执行的 jar 包 如果没有使用构建工具,可以使用以下命令构建可执行 jar 包: jar cvfe MyApp.jar com.exampl…

    Java 2023年5月19日
    00
  • Java中SimpleDateFormat日期格式转换详解及代码示例

    下面就详细讲解一下“Java中SimpleDateFormat日期格式转换详解及代码示例”的攻略。 1. 什么是SimpleDateFormat SimpleDateFormat是Java中一个非常实用的日期格式化类,它能够将日期按照指定的格式进行转换,并且还支持将字符串转换成日期。SimpleDateFormat类的格式化符号遵循类似于Unix系统下的日期…

    Java 2023年5月20日
    00
  • 深入浅出理解Java泛型的使用

    深入浅出理解Java泛型的使用 什么是Java泛型? Java泛型是Java SE 5(J2SE 5.0)版本引入的一项新特性,它可以用于在编译时检测和强制类型检查程序的类型安全性,并提供了在编译时检查类型的优势。 泛型可以被看作是Java的抽象类型,它可以在运行时接受不同类型的参数,提高了代码的复用性和可读性。泛型主要包含以下内容: 类型参数(Type P…

    Java 2023年5月26日
    00
  • Spring Boot中使用JDBC Templet的方法教程

    下面是Spring Boot中使用JDBC Template的方法教程。 简介 JDBC Template是Spring框架提供的一种用于简化JDBC操作的工具,它封装了许多常见的JDBC操作,使得开发人员能够通过简单的代码实现JDBC数据访问。本教程将介绍在Spring Boot项目中如何使用JDBC Template进行数据访问。 步骤 以下是使用JDB…

    Java 2023年5月20日
    00
  • Win2003服务器安全加固设置--进一步提高服务器安全性

    Win2003服务器安全加固设置–进一步提高服务器安全性 一、基础设置 1.更新安全补丁 定期更新最新的安全补丁,主要包括操作系统、IIS、SQL Server、Exchange等软件,确保系统处于最新的安全状态。 2.修改默认密码 默认密码较易被破解,需要及时修改,建议使用8位以上组合密码,包括大小写字母、数字和符号。 3.关闭不必要服务和端口 关闭不必…

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