JSP的分页

news2025/1/18 9:41:14
  1. 分页在读取数据库里的数据需要用,在以后数据库肯定还会有很多数据,一个页面装不下,所以需要分页功能。数据库查询的分页语句是“SELECT * FROM emp LIMIT 0, 5;”这里0是指起始行,5是查询5行,第二页起始行就是5,每页也是查询5条数据。起始行=(页大小-1)*行数。分页查询还需要知道一共多少页总页数=数据总数%每页条数==0?数据总数/每页条数:数据总数/每页条数+1)。

  1. 代码实现

2.1创建一个emp表多添加几条数据

2.2把需要的架包添加在web下面创建一个lib的文件夹并且添加为库。还得准备工具类没有的找我

(没有的请发私信)

2.3添加emp的实体类

package com.cxyzxc.www.entity;

public class Emp {
    private int eid;
    private String ename;
    private int age;
    private double salary;

    public Emp() {
    }

    public Emp(int eid, String ename, int age, double salary) {
        this.eid = eid;
        this.ename = ename;
        this.age = age;
        this.salary = salary;
    }

    public int getEid() {
        return eid;
    }

    public void setEid(int eid) {
        this.eid = eid;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "eid=" + eid +
                ", ename='" + ename + '\'' +
                ", age=" + age +
                ", salary=" + salary +
                '}';
    }
}

2.4因为需要用到分页所以也要有个Page实体类进行运算

package com.cxyzxc.www.entity;

public class Page {
//页码
   private Integer pageIndex;
//页大小,就是每页多少条数据
   private Integer pageSize;
//总行数就是一共多少条数据
   private Integer totalCounts;
//总页数
   private Integer totalPages;
//起始行
   private Integer startRows;
//调用两参构造方法
   public Page(Integer pageIndex){
       this(pageIndex,8);
   }

    public Page(Integer pageIndex,Integer pageSize){
        this.pageIndex=pageIndex;
        this.pageSize=pageSize;
//起始行
        this.setStartRows((pageIndex-1) * pageSize);

    }

    public Integer getPageIndex() {
        return pageIndex;
    }

    public void setPageIndex(Integer pageIndex) {
        this.pageIndex = pageIndex;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public Integer getTotalCounts() {
        return totalCounts;
    }

    public void setTotalCounts(Integer totalCounts) {
        this.totalCounts = totalCounts;
//总页数用三目运算符,总行数模页大小余数为0就是总行数除以页大小,不是就是总行数除以页大小+1
        this.setTotalPages(totalCounts%pageSize==0 ? totalCounts / pageSize : totalCounts / pageSize + 1);
    }

    public Integer getTotalPages() {
        return totalPages;
    }

    public void setTotalPages(Integer totalPages) {
        this.totalPages = totalPages;
    }

    public Integer getStartRows() {
        return startRows;
    }

    public void setStartRows(Integer startRows) {
        this.startRows = startRows;
    }

    @Override
    public String toString() {
        return "Page{" +
                "pageIndex=" + pageIndex +
                ", pageSize=" + pageSize +
                ", totalCounts=" + totalCounts +
                ", totalPages=" + totalPages +
                ", startRows=" + startRows +
                '}';
    }

2.5Dao接口类

package com.cxyzxc.www.dao;

import com.cxyzxc.www.entity.Emp;
import com.cxyzxc.www.entity.Page;

import java.util.List;

public interface EmpDao1 {
//查询所有数据
   public List<Emp> selectAll(Page page);
//查询行数
   public long selectCount();
}

2.6DaoImpl实现类

package com.cxyzxc.www.dao.Impl;

import com.cxyzxc.www.dao.EmpDao1;
import com.cxyzxc.www.entity.Emp;
import com.cxyzxc.www.entity.Page;
import com.cxyzxc.www.utils.Dbutils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.sql.SQLException;
import java.util.List;

public class EmpDaoImpl01 implements EmpDao1 {
    private QueryRunner queryRunner = new QueryRunner();

    @Override
    public List<Emp> selectAll(Page page) {
        List<Emp> emps= null;
        try {
            emps = queryRunner.query(Dbutils.getConnection(),"select * from emp limit ?,?",new BeanListHandler<Emp>(Emp.class),page.getStartRows(),page.getPageSize());
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return emps;

    }

    @Override
    public long selectCount() {
        try {
            return  queryRunner.query(Dbutils.getConnection(), "select count(*) from emp;",new ScalarHandler<>());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }
}

2.7controller

package com.cxyzxc.www.controller;

import com.cxyzxc.www.dao.EmpDao1;
import com.cxyzxc.www.dao.Impl.EmpDaoImpl01;
import com.cxyzxc.www.entity.Emp;
import com.cxyzxc.www.entity.Page;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;

@WebServlet(name = "ServletAll", value = "/ServletAll")
public class ServletAll extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   //获取页大小
 String pageIndex= request.getParameter("pageIndex");
//当页大小为空要赋值给一个1
    if (pageIndex == null) {
        pageIndex="1";
        request.setAttribute("pageIndex",pageIndex);
    }
//将页大小传进去
     Page page = new Page(Integer.valueOf(pageIndex));
        System.out.println(page);
//调用业务类查询行数
        EmpDao1 empDao1= new EmpDaoImpl01();
//总行数
        long count =empDao1.selectCount();
        page.setTotalCounts((int)count);
//查询所有数据,并将page和emp表的数据存储在作用于中并就行转发到jsp中
        List<Emp> emps=empDao1.selectAll(page);
        request.setAttribute("emps",emps);
        request.setAttribute("page",page);
        request.getRequestDispatcher("/showAllEmp.jsp").forward(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
    }
}

2.8showAllEmp.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  <h1>emp所有数据</h1>
<table border="1" cellspacing="0" width="800px">
    <tr>
        <td>员工编码</td>
        <th>员工姓名</th>
        <th>员工年龄</th>
        <th>员工工资</th>
        <th colspan="2">操作</th>
    </tr>
// items="${emps}是获得存储的数据
    <c:forEach var="emp" items="${emps}">
        <tr>
            <td>${emp.eid}</td>
            <td>${emp.ename}</td>
            <td>${emp.age}</td>
            <td>${emp.salary}</td>
            <td colspan="2">
                <a>修改</a>
                <a>删除</a>
            </td>
        </tr>
    </c:forEach>
    <tr>
        <td colspan="6">
//页码等于1时是首页
            <a href="<c:url context='${pageContext.request.contextPath}' value="/ServletAll?pageIndex=1"/> ">首页</a>
<%--            当前页码大于1--%>
            <c:if test="${page.pageIndex>1}">
                <a href="<c:url context='${pageContext.request.contextPath}' value='/ServletAll?pageIndex=${page.pageIndex -1}'/> ">上一页</a>
            </c:if>
//当前页等于1时就不用跳转给个a标签
            <c:if test="${pageIndex==1}">
                <a>上一页</a>
            </c:if>
<%--    page.pageIndex 是指当前页 ,当前页小于总页数就下一页,页码就需要加1     --%>
            <c:if test="${page.pageIndex< page.totalPages}">
                <a href="<c:url context='${pageContext.request.contextPath}' value="/ServletAll?pageIndex=${page.pageIndex +1}"/> ">下一页 </a>
            </c:if>
//当前页等于总页数就只用a标签包着
            <c:if test="${page.pageIndex == page.totalPages}">
                <a>下一页</a>
            </c:if>
//尾页就是跳转到当前页调到总页数
            <a href="<c:url context='${pageContext.request.contextPath}' value="/ServletAll?pageIndex=${page.totalPages}"/> ">尾页</a>
        </td>
    </tr>
</table>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/378607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT 实现右键菜单

有时我们希望在窗口中右键弹出菜单&#xff0c;这里来介绍一下QT中怎么实现. .h 中添加事件相应函数声明和变量定义&#xff1a; private:// 菜单事件void contextMenuEvent(QContextMenuEvent* event) override;void initMenu();private:QMenu* m_pMenu nullptr;在构造函数中…

聊聊如何避免多个jar通过maven打包成一个jar,多个同名配置文件发生覆盖问题

前言 不知道大家在开发的过程中&#xff0c;有没有遇到这种场景&#xff0c;外部的项目想访问内部nexus私仓的jar&#xff0c;因为私仓不对外开放&#xff0c;导致外部的项目没法下载到私仓的jar&#xff0c;导致项目因缺少jar而无法运行。 通常遇到这种场景&#xff0c;常用…

HUN工训中心:开关电路和按键信号抖动

工训中心的牛马实验 1.实验目的&#xff1a; 1) 认识开关电路&#xff0c;掌握按键状态判别、开关电路中逻辑电平测量、逻辑值和逻辑函数电路。 2) 掌握按键信号抖动简单处理方法。 3) 实现按键计数电路。 2.实验资源&#xff1a; HBE硬件基础电路实验箱、示波器、万用表…

Java学习--网络编程

1. 网络编程入门 1.1 网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统…

【GIT】git不同仓库设置不同用户名和邮箱

随着业务的拓展&#xff0c;工作中&#xff0c;我们除了要在公司的git库提交代码&#xff0c;还可能在阿里云效codeup、gitcode等上提交代码。 之前git安装时使用的是全局名称&#xff0c;导致所有的git提交都使用了相同的用户名和邮箱。 查看全局用户名和邮箱 $ git config -…

论文调研——23.2.28

文章目录Diffusion Models: A Comprehensive Survey of Methods and ApplicationsADVERSARIAL TRAINING METHODS FOR SEMI-SUPERVISED TEXT CLASSIFICATIONHuman Emotion Knowledge Representation Emerges in LargeAPI 调优上&#xff1a; Decoder Tuning: Efficient Language…

记录一下atlas200模块无法正常通过别的设备SSH连接192.168.1.2问题笔记粗心者用

atlas200远程登录发现登录不了 串口打印内核信息正常显示&#xff0c;如下几个错误记录分别在windows上和ubuntu上分别做了测试&#xff0c;之前都是 安装完 kex_exchange_identification: read: Connection reset 华为atlas200模块 登录显示这个目前没有解决&#xff0c;应该…

220V转5V非隔离2W电源--超低成本

目录 详情 产品特性和优势 设计电路 MP150芯片资料 详情 MP150 是一款原边调节器&#xff0c;可以在无光耦合器的条件下提供精确的恒压&#xff08;CV&#xff09;调节。MP150 支持降压、升降压、升压和反激拓扑。它内部集成了 500V MOSFET&#xff0c;可简化结构&#xff0…

HUN工训中心:三位数码管扫描显示实验报告

工训中心牛马实验 1.1操作说明及现象描述 根据老师发的安装包下载和安装好Quartus II软件。在电脑安装USB硬件驱动&#xff0c;再与PC接口连接好&#xff0c;可以打开任务管理器查看是否安装好。之后打开Quartus II软件&#xff0c;按照菜单Tool->programmer->add file…

6大类,不同类型单板布线策略

PCB布线策略 一、类型一主要特征如下 严格的长度规则、严格的串扰规则、拓扑规则、差分规则、电源地规则等。 二、关键网络的处理&#xff1a;总线定义Class 要求满足一定的拓扑结构、stub及其长度(时域)约束条件 图-1 平衡菊花链和中间驱动菊花链图 设置虚拟管脚来控制拓扑…

张驰咨询:六西格玛常见问题解答

以下是张驰咨询对一些关于六西格玛常见问题的解答&#xff1a; 1、六西格玛是什么&#xff1f; 六西格玛是一种改善企业质量流程管理的技术&#xff0c;以“零缺陷”的完美商业追求&#xff0c;带动质量大幅提高、成本大幅度降低&#xff0c;最终实现企业财务成效的提升与企业…

SpringCloud系列知识快速复习 -- part 1(SpringCloud基础知识,Docker,RabbitMQ)

SpringCloud知识快速复习SpringCloud基础知识微服务特点SpringCloud常用组件服务拆分和提供者与消费者概念Eureka注册中心原理Ribbon负载均衡原理负载均衡策略饥饿加载Nacos注册中心服务分级存储模型权重配置环境隔离Nacos与Eureka的区别Nacos配置管理拉取配置流程配置热更新配…

大家挤破脑袋都想进的腾讯,你为什么想要辞职?

前几天&#xff0c;我在网上看到一个故事。 故事的主人翁是19届的校招生&#xff0c;目前入职腾讯&#xff0c;工作了一个月。这一个月给他的感受是大量的写测试用例&#xff0c;感觉自己写测试用例的能力熟练了不少&#xff0c;测试技能倒是没有多大的提高&#xff0c;真正需…

一文解决Python所有报错

前言 Python是一种强大的编程语言&#xff0c;但是它也有一些报错&#xff0c;这些报错可能会让你感到困惑。本文将介绍如何解决Python中的常见报错。 首先&#xff0c;让我们来看看Python中最常见的报错&#xff1a;SyntaxError。这种报错表明你的代码中有语法错误&#xff0c…

Javaweb增删改查之【查】

Javaweb增删改查之【查】1.前端页面2.java链接数据库——集成mybatis2.1 建立层2.2 实体层entity2.3 mapper&#xff08;dao层&#xff09;2.4 mybatis配置文件2.5工具层util3.后台功能3.1servlet前几天跟着b站up主学javaweb登录&#xff0c;突然还是觉得这几年学了c是真的挺好…

对象扩展、函数的扩展、Symbol、Iterator 迭代器、Set结构、Map 数据结构——ES6+

目录 一、对象扩展 二、函数的扩展 三、Symbol 四、Iterator 迭代器 五、Set结构 六、Map 数据结构 一、对象扩展 1. 对象简写 对于对象属性&#xff0c;属性名与属性值对应的变量相同时&#xff0c;可简写为属性名 对于对象方法&#xff0c;将 &#xff1a;function…

优化基于axios接口管理的骚操作

优化基于axios接口管理的骚操作&#xff01; 本文针对中大型的后台项目的接口模块优化&#xff0c;在不影响项目正常运行的前提下&#xff0c;增量更新。 强化功能 1.接口文件写法简化&#xff08;接口模块半自动化生成&#xff09; 2.任务调度、Loading调度&#xff08;接口层…

Javaweb复习之HTTPTomcatServelet

1.Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 JavaWeb就是用Java技术来解决相关web互联网领域的技术栈 1.2 JavaWeb技术栈 B/S 架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器 架构模…

仓库管理系统包括哪些方面?

想要弄清楚仓库管理系统包括哪些方面&#xff0c;得先了解仓库管理体系包含哪些方面。 一般来说&#xff0c;仓库管理体系包含以下四大方面&#xff1a; 数据精确度体系&#xff1a;如何通过制定相关政策及操作规范&#xff0c;提升库内数据的准确度。管理体系&#xff1a;构…

React的生命周期详细讲解

什么是生命周期&#xff1f; 所谓的React生命周期&#xff0c;就是指组件从被创建出来&#xff0c;到被使用&#xff0c;最后被销毁的这么一个过程。而在这个过程中&#xff0c;React提供了我们会自动执行的不同的钩子函数&#xff0c;我们称之为生命周期函数。**组件的生命周期…