java web手写实现分页功能

yizhihongxing

下面是“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如何读取Excel数据

    读取Excel数据是Java开发中常见的任务。下面是完整的攻略: 1. 导入依赖 要读取Excel数据,需要导入Apache POI依赖。可以在pom.xml文件中添加以下依赖项: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi&lt…

    Java 2023年5月20日
    00
  • SpringBoot如何在运行时动态添加数据源

    让我们来详细讲解一下Spring Boot如何在运行时动态添加数据源。 1. 引入依赖 在开始之前,我们需要引入Spring Boot的依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-sta…

    Java 2023年6月3日
    00
  • JavaScript自定义分页样式

    下面是关于“JavaScript自定义分页样式”的完整攻略: 分页样式选取 在实现自定义分页样式之前,首先需要确定自己想实现什么样的分页样式。一般来说,分页样式可分为两种,一种是原生样式,即浏览器默认的纯文字链接分页样式;另一种则是自定义分页样式,样式多样,可以把分页效果变得更加美观,可以选择自己喜欢的样式,而且自定义分页样式除了可以实现更好的用户体验外,同…

    Java 2023年6月16日
    00
  • bootstrap table 多选框分页保留示例代码

    如果想要在bootstrap table中加入多选框并且保留在分页时的选定状态,可以按照以下步骤进行操作: 首先要在table的html代码中加入一个input元素作为多选框,示例代码如下: “` 姓名 性别 年龄 城市 张三 男 28 北京 李四 女 25 上海 王五 男 30 广州 “` 其中,第一个th元素中的input元素作为全选多选框,后面的每…

    Java 2023年6月16日
    00
  • 使用JDBC在MySQL数据库中如何快速批量插入数据

    使用JDBC在MySQL数据库中进行批量插入数据可以大大提高数据插入的效率。以下是详细步骤: 1.导入MySQL JDBC驱动 首先需要在Java项目中导入MySQL JDBC驱动包,这里以MySQL 8为例,可以从以下链接中下载:https://dev.mysql.com/downloads/connector/j/ 2.创建JDBC连接 使用JDBC连接…

    Java 2023年6月16日
    00
  • Java IO异常如何处理详析

    Java IO异常如何处理详析 在Java中进行IO操作时,由于文件读取、写入等操作都会受到外界干扰,因此会存在各种可能的异常情况。因此,在进行IO操作时需要注意异常处理,本文将对Java IO异常如何处理进行详细说明。 异常捕获的方式 Java中捕获异常可以使用try-catch语句,从而使程序在出现异常时有所响应,从而保证程序不会崩溃。 try { //…

    Java 2023年5月26日
    00
  • SpringBoot项目调优及垃圾回收器的比较详解

    首先需要了解SpringBoot项目调优和垃圾回收的基础知识。SpringBoot是一个快速开发的Java框架,它内嵌了Tomcat,可以快速构建一个Web应用程序。但是,在项目进行过程中,由于资源的限制,或者业务量的增加,我们可能会遇到许多性能问题。在这个时候就需要对SpringBoot项目进行调优,以提升系统性能和稳定性。而垃圾回收器的选择也是保证系统效…

    Java 2023年5月19日
    00
  • 初识Spring Boot框架之Spring Boot的自动配置

    让我来为你详细讲解“初识SpringBoot框架之SpringBoot的自动配置”的完整攻略。 什么是SpringBoot自动配置 SpringBoot自动配置是SpringBoot框架的一大特性,其目的是让开发者更便捷地进行项目开发和配置。SpringBoot根据项目中所依赖的组件(例如:数据源、web),自动为整个项目进行一些常见的配置,而无需开发者手动…

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