JSP的分页

news/2024/4/26 12:43:56/文章来源:https://blog.csdn.net/qq_46534049/article/details/129268971
  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;}@Overridepublic 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就是总行数除以页大小,不是就是总行数除以页大小+1this.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;}@Overridepublic 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();@Overridepublic 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;}@Overridepublic 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 {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取页大小String pageIndex= request.getParameter("pageIndex");
//当页大小为空要赋值给一个1if (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);}@Overrideprotected 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.luyixian.cn/news_show_75560.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过python技术获取甲流分布数据

近期&#xff0c;多地学校出现因甲流导致的班级停课&#xff0c;儿科甲流患者就诊量呈数倍增长。此轮甲流为何如此严重&#xff1f;感染甲流之后会出现哪些症状&#xff1f; 经过专家的介绍甲流之所以这么严重有这些原因导致的。一、疫情完全放开后很多孩子不戴口罩了&#x…

Odoo | Webserivce | 5分钟学会【JSONRPC】接口开发 - 换USERID(进阶)

文章目录JSONRPC - 换取USERID简述换取USERID1. 代码示例2. 换取结果JSONRPC - 换取USERID 简述 从Odoo JSONRPC 接口入门篇&#xff0c;可以发现我们直接传入了USERID&#xff0c;这只是为了方便快速测试。 其实按照常规流程&#xff0c;应该通过【用户名USERNAME】和【用户…

【办公类-19-02】Python批量制作word文本框的名字小标签,用A4word打印(植物角、家长会、值日生)

背景需求&#xff1a; 2月28日去小班带班&#xff0c;看到班主任制作了一些小手印花束作为家长会的家长座位提示&#xff0c;上面贴着“”圆形白色的幼儿名字贴”。 我立刻想起了制作的过程——在word中插入文本框&#xff0c;然后复制无数个文本框&#xff0c;摆好位置&#…

MyBatis学习笔记(八) —— 字段名和属性不一致的情况下,如何处理映射关系

EmpMapper.java /** * 根据id查询员工信息 * param empId * return */ Emp getEmpByEmpId(Param("empId") Integer empId);EmpMapper.xml <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//D…

day22_IO

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、缓冲流 三、字符流 四、缓冲字符流 五、匿名内部类 零、 复习昨日 File: 通过路径代表一个文件或目录 方法: 创建型,查找类,判断类,其他 IO …

如何创建出实用的员工手册?

员工手册主要是企业内部的人事制度管理规范&#xff0c;包含企业规章制度和企业文化&#xff0c;同时还起到了展示企业形象、传播企业文化的作用。它既覆盖了企业人力资源管理的各个方面规章制度的主要内容&#xff0c;又因适应企业独特个性的经营发展需要而弥补了规章制度制定…

VIF_Benchmark: All infrare and visible image fusion method in one framework

VIF_Benchmark Github 地址: https://github.com/Linfeng-Tang/VIF_Benchmark 完整Project下载地址&#xff1a;https://download.csdn.net/download/fovever_/87514164 我们把所有主流的基于深度学习的红外和可见光图像融合方法都集成在了这个框架中。 这些方法包括&#xff1…

数据结构六大排序

1.插入排序 1.插入排序 思路&#xff1a; 从第一个元素开始认为是有序的&#xff0c;去一个元素tem从有序序列从后往前扫描&#xff0c;如果该元素大于tem&#xff0c;将该元素一刀下一位&#xff0c;循环步骤3知道找到有序序列中小于等于的元素将tem插入到该元素后&#xff0…

如何防止DNS污染?

对于DNS污染&#xff0c;一般除了使用代理服务器和VPN之类的软件之外&#xff0c;并没有什么其它办法。但是利用我们对DNS污染的了解&#xff0c;还是可以做到不用代理服务器和VPN之类的软件就能解决DNS污染的问题&#xff0c;从而在不使用代理服务器或VPN的情况下访问原本访问…

设计模式系列 - 代理模式及动态代理详解

定义 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下&#xff0c;一个对象不适合或者不能直接引用另一个对象&#xff0c;而代理对象可以在客户端和目标对象之间起到中介的作用。 结构 抽象角色&#xff1a;通过接口或抽象类声明真实角色实现的业务方法。 代…

C++ STL:容器 Container

文章目录1、序列容器1.1、容器共性1.2、vectorvector 结构* vector 扩容原理* vector 迭代器失效1.3、dequedeque 结构deque 迭代器deque 模拟连续空间1.4、listlist 特殊操作list 结构list 迭代器2、关联式容器2.1、容器共性2.2、容器特性3、无序关联式容器3.1、容器共性3.2、…

电子科技大学 高级计算机系统结构 考试回忆

首先题量不算小&#xff0c;因此没有太多时间把题都记出来&#xff0c;但是叙述一下题的类型希望能帮到以后选了这门课大家&#xff0c;在网上确实没有搜到这门课有关考试的任何资料&#xff0c;所以我也没啥参考全凭记忆和老师的PPT结合。复习的时候老师给了大纲&#xff0c;就…

【k8s】Kubernetes的学习(1.k8s概念和架构)

目录 1.首先要知道&#xff0c;Kubernetes为什么简称为k8s? 2.Kubernetes概述 2.1 kubernetes基本介绍 2.2 kubernetes的特性 2.3 kubernetes集群架构组件 2.3.1 Master (主控节点) 2.3.2 node (工作节点) 2.4 k8s核心概念 2.4.1 Pod 2.4.2 controller 2.4.3 Se…

Python自动发周报给老板,到点赶紧跑

嗨害大家好鸭&#xff01;我是小熊猫~ 作为一个社畜人 …勤勤恳恳的打工人&#xff01;&#xff01;&#xff01; 几乎每周都要写周报 没办法只能用点小技术 用python写个小工具 让它来给老板发周报哈哈哈 更多python摸鱼小技巧、基础知识:点击此处跳转文末名片获取 目标细…

收下这份十万商家称赞的开店攻略,带你发家致富!

理想与现实之间的距离&#xff0c;大概就是开店吧&#xff01;总觉得自己投点钱&#xff0c;一两年回本&#xff0c;后面每月轻松赚几万、几十万&#xff1b;结果却发现房租太贵、人工太贵、自己什么都不懂&#xff0c;然后随波逐流的没有特色。其实&#xff0c;细心的朋友会发…

【VUE】二 vue指令

目录 一、插值表达式 二、v-bind指令(对标签中的属性进行操作) 三、v-model指令&#xff08;input、select、textarea等。【双向绑定】&#xff09; 四、v-for循环指令 五、v-on(事件指令) 六、v-if条件判断 七、v-show&#xff08;条件显示或隐藏&#xff09; 八、案例…

王道计算机网络课代表 - 考研计算机 第五章 传输层 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 计算机网络 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “传输层” 章节知识点总结的十分全面&#xff0c;涵括了《计算机网络》课程里的全…

MySQL 学习笔记(借鉴黑马程序员MySQL)

MySQL视频课链接 MySQL概述 数据库相关概念 数据库是存储数据的仓库&#xff0c;数据是有组织的进行存储&#xff08;DataBase&#xff09; 数据库管理系统是操纵和管理数据库的大型软件&#xff08;DataBase Management System&#xff09; SQL是操作关系型数据库的编程语…

_Linux (HTTP协议)

文章目录1. 认识URL2. urlencode和urldecode3. HTTP协议格式3-1. HTTP请求3-1. HTTP响应4. HTTP的方法5. HTTP的状态码6. TTP常见Header7. 最简单的HTTP服务器虽然我们说, 应用层协议是我们程序猿自己定的但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我…

Android问题笔记 - 打开Android Studio先弹出项目选择框

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断…