JSP+Servlet实现列表分页功能
分享一种最简单的JSP+Servlet实现分页的方式!
旧:无分页功能的查询列表功能,仅供参考!
Servlet
try {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;List<Dept> arrayList = null;conn = DBUtil.getConncetion();ps = conn.prepareStatement("select DEPTNO,DNAME,LOC from dept");rs = ps.executeQuery();//遍历结果集while (rs.next()) {String DEPTNO = rs.getString("DEPTNO");String DNAME = rs.getString("DNAME");String LOC = rs.getString("LOC");//将以上零散的数据封装成java对象Dept dept = new Dept();dept.setDEPTNO(DEPTNO);dept.setDNAME(DNAME);dept.setLOC(LOC);//将部门对象放在集合中arrayList.add(dept);}//将集合放在请求域中request.setAttribute("deptList", arrayList);//转发request.getRequestDispatcher("/list.jsp").forward(request, response);} catch (Exception e) {e.printStackTrace();response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "数据库查询失败");}
JSP页面
<table border="1px" align="center" width="50%"><tr><th>序号</th><th>部门编号</th><th>部门名称</th><th>操作</th></tr><c:forEach items="${deptList}" var="dept" varStatus="deptus"><tr><%--deptus属性里有个count用以计数--%><th>${deptus.count}</th><th>${dept.DEPTNO}</th><th>${dept.DNAME}</th><th><a href="javascript:void(0)" onclick="del(${dept.DEPTNO})" class="a-upload"style="font-size: 10px">删除</a><%--f仅起到标记的作用--%><a href="${pageContext.request.contextPath}/dept/detail?f=edit&DEPTNO=${dept.DEPTNO}"class="a-upload" style="font-size: 10px">修改</a><a href="${pageContext.request.contextPath}/dept/detail?f=detail&DEPTNO=${dept.DEPTNO}"class="a-upload" style="font-size: 10px">详情</a></th></tr></c:forEach>
</table>
新:有分页功能的查询列表功能
Servlet
int page = 1; // 默认第一页int pageSize = 5; // 每页显示 5 条记录if (request.getParameter("page") != null) {page = Integer.parseInt(request.getParameter("page"));}try {DeptDao deptDao = new DeptDao();//实际sql:select * from dept limit ? offset ?List<Dept> deptList = deptDao.page(page, pageSize);//实际sql: select count(*) from deptint total = deptDao.getTotal();int totalPages = (int) Math.ceil((double) total / pageSize);//将集合放在请求域中request.setAttribute("deptList", deptList);request.setAttribute("currentPage", page);request.setAttribute("totalPages", totalPages);//转发request.getRequestDispatcher("/list.jsp").forward(request, response);} catch (Exception e) {e.printStackTrace();response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "数据库查询失败");}}
List<Dept> deptList = deptDao.page(page, pageSize);
public List<Dept> page(int page, int pageSize) {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;List<Dept> deptList = new ArrayList<>();try {conn = DBUtil.getConncetion();ps = conn.prepareStatement("select * from dept limit ? offset ?");ps.setInt(1, pageSize);ps.setInt(2, (page - 1) * pageSize);rs = ps.executeQuery();while (rs.next()) {Dept dept = new Dept();dept.setDEPTNO(rs.getString("DEPTNO"));dept.setLOC(rs.getString("LOC"));dept.setPEOPLE(rs.getString("PEOPLE"));dept.setDNAME(rs.getString("DNAME"));deptList.add(dept);}} catch (Exception e) {e.printStackTrace();} finally {DBUtil.close(conn, ps, rs);}return deptList;}
int total = deptDao.getTotal();
public int getTotal() {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {conn = DBUtil.getConncetion();ps = conn.prepareStatement("select count(*) from dept");rs = ps.executeQuery();if (rs.next()) {return rs.getInt(1);}} catch (SQLException e) {e.printStackTrace();} finally {DBUtil.close(conn, ps, rs);}return 0;}
JSP页面
<%--分页的样式,选加!--%>
<style>.pagination {text-align: center;margin-top: 20px;}.pagination a {margin: 0 5px;text-decoration: none;color: blue;}.pagination a.disabled {color: gray;pointer-events: none;}
</style>
<table border="1px" align="center" width="50%"><tr><th>序号</th><th>部门编号</th><th>部门名称</th><th>操作</th></tr><c:forEach items="${deptList}" var="dept" varStatus="deptus"><tr><%--deptus属性里有个count用以计数--%><th>${deptus.count}</th><th>${dept.DEPTNO}</th><th>${dept.DNAME}</th><th><a href="javascript:void(0)" onclick="del(${dept.DEPTNO})" class="a-upload"style="font-size: 10px">删除</a><%--f仅起到标记的作用--%><a href="${pageContext.request.contextPath}/dept/detail?f=edit&DEPTNO=${dept.DEPTNO}"class="a-upload" style="font-size: 10px">修改</a><a href="${pageContext.request.contextPath}/dept/detail?f=detail&DEPTNO=${dept.DEPTNO}"class="a-upload" style="font-size: 10px">详情</a></th></tr></c:forEach>
</table>
<!-- 分页 -->
<div class="pagination"><%int currentPage = (int) request.getAttribute("currentPage");int totalPages = (int) request.getAttribute("totalPages");if (currentPage > 1) {%><a href="${pageContext.request.contextPath}/dept/list?page=<%= currentPage - 1 %>">上一页</a><%} else {%><a class="disabled">上一页</a><%}if (currentPage < totalPages) {%><a href="${pageContext.request.contextPath}/dept/list?page=<%= currentPage + 1 %>">下一页</a><%} else {%><a class="disabled">下一页</a><%}%><p>当前页:<%= currentPage %> / 共 <%= totalPages %> 页</p>
</div>
相关文章:
JSP+Servlet实现列表分页功能
分享一种最简单的JSPServlet实现分页的方式! 旧:无分页功能的查询列表功能,仅供参考! Servlet try {Connection conn null;PreparedStatement ps null;ResultSet rs null;List<Dept> arrayList null;conn DBUtil.get…...
操作系统存储器相关习题
1 为什么要配置层次式存储器? 设置多个存储器可以使存储器两端的硬件能并行工作; 采用多级存储系统特别是Cache技术,是减轻存储器带宽对系统性能影响的最佳结构方案; 在微处理机内部设置各种缓冲存储器,减轻对存储器存取的压力。…...
QUICK 调试camera-xml解析
本文主要介绍如何在QUICK QCS6490使能相机模组。QCS6490的相机基于CameraX的框架,只需通过配置XML文件,设置相机模组的相关参数,就可以点亮相机。本文主要介绍Camera Sensor Module XML和Camera Sensor XML配置的解析,这中间需要c…...
【linux】shell脚本编写基础
shell 脚本关键字: 1、变量定义:前后不能空格 输入: zhao"Joe" echo ${zhao} echo "I am ${zhao}" 输出: yuxin I am Joe2、echo 输出 输入: echo "123" 输出: 1233、readonly 定义变…...
STM32 外设简介
STM32 外设简介 STM32 是由意法半导体 (STMicroelectronics) 开发的一系列基于 ARM Cortex 内核的微控制器,广泛应用于嵌入式系统中。STM32 系列的一个重要特点是其丰富而强大的外设模块,支持多种接口和功能,能满足工业控制、物联网、消费电…...
Django-Vue3-Admin - 现代化的前后端分离权限管理系统
项目介绍 Django-Vue3-Admin是一个基于RBAC(Role-Based Access Control)模型的综合性基础开发平台,专注于权限控制,支持列级别的细粒度权限管理。该项目采用前后端分离架构,技术栈包括: 后端: Django Django REST …...
Cesium K-means自动聚合点的原理
Cesium K-means自动聚合点的原理 Cesium 是一个开源的 JavaScript 库,用于在 Web 环境中创建 3D 地球和地图应用。它能够处理地理空间数据,并允许开发者对大规模的地理数据进行可视化展示。在一些应用中,尤其是当处理大量地理坐标点时&#…...
Vue 项目中如何解决组件之间的循环依赖
前言 在大型 Vue 项目中,组件之间的关系可能会变得非常复杂,甚至会出现循环依赖的问题。循环依赖是指两个或多个模块互相依赖,形成一个闭环。这类问题会导致项目无法正常编译或运行,甚至可能引发意想不到的错误。本文将通过通俗易…...
交通流量预测:基于交通流量数据建立模型
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
Hot100 - 搜索二维矩阵II
Hot100 - 搜索二维矩阵II 最佳思路: 利用矩阵的特性,针对搜索操作可以从右上角或者左下角开始。通过判断当前位置的元素与目标值的关系,逐步缩小搜索范围,从而达到较高的效率。 从右上角开始:假设矩阵是升序排列的&a…...
uart_pl011.c驱动API的zephyr测试
API概述 本次测试针对uart的uart_poll_in和uart_poll_outAPI进行测试, uart_poll_in static int pl011_poll_in(const struct device *dev, unsigned char *c)这是一个轮询方式的接收函数: 功能:检查 UART 是否有新数据到达,如…...
RPA:电商订单处理自动化
哈喽,大家好,我是若木,最近闲暇时间较多,于是便跟着教程做了一个及RPA,谈到这个,可能很多人并不是很了解,但是实际上,这玩意却遍布文末生活的边边角角。话不多说,我直接上…...
小程序 - 个人简历
为了让招聘人员快速地认识自己,可以做一个“个人简历”微信小程序, 展示自己的个人信息。 下面将对“个人简历”微信小程序进行详细讲解。 目录 个人简历 创建图片目录 页面开发 index.wxml index.wxss 功能实现截图 总结 个人简历 创建图片目录…...
MySQL自启动失败(MySQL不能开机自启)解决方案_MySQL开机自启疑难杂症解决,适用Win11/Win10
问题描述(MySQL 开机自启失败) 本文解决方法,在 windows10 、 windows11 系统中均可使用。 win11 安装 MySQL 后,不能开机自启。 在服务中,手动启动服务后,可正常使用,一点异常都没有。 或者…...
储存水..
问题描述: 给定m个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子下雨之后能储存多少水. 思路解析: 思考一下,什么样的位置能盛水?只有在当前柱子的左边和右边都比它高的情况下才能储存住水,而储水量和左侧最高柱及右侧最高柱有关.具体来说就是和左右两侧最矮的…...
Cmake 常用操作总结
CMakeLists.txt结构 总结该文件的主要结构 cmake_minimum_required(VERSION <version>) 指定CMake的最低版本,一般都是根据项目需要设定 cmake_minimum_required(VERSION 3.10) project(<name>) 定义项目的名称,放在CMake的开头 project(…...
Kylin Server V10 下 RocketMQ 主备自动切换模式部署
一、NameServer简介 NameServer 是一个注册中心,提供服务注册和服务发现的功能。NameServer 可以集群部署,集群中每个节点都是对等的关系,节点之间互不通信。 服务注册 Broker 启动的时候会向所有的 NameServer 节点进行注册,注意这里是向集群中所有的 NameServer 节点注册…...
DevOps工程技术价值流:GitLab源码管理与提交流水线实践
在当今快速迭代的软件开发环境中,DevOps(开发运维一体化)已经成为提升软件交付效率和质量的关键。而GitLab,作为一个全面的开源DevOps平台,不仅提供了强大的版本控制功能,还集成了持续集成/持续交付(CI/CD)…...
Vue 3 中实现页面特定功能控制
在开发 Vue 应用时,我们经常会遇到需要在特定页面启用或禁用某些功能的情况。本文将以 A父.vue 页面为例,探讨如何在点击汇总菜单时仅在该页面生效,而在其他页面不生效的问题。 1. 利用 Vue 3 的 provide 和 inject 实现状态传递 Vue 3 提供…...
VLC 播放的音视频数据处理流水线搭建
VLC 用 input_thread_t 对象直接或间接管理音视频播放有关的各种资源,包括 Access,Demux,Decode,Output,Filter 等,这个类型定义 (位于 vlc-3.0.16/include/vlc_input.h) 如下: struct input_thread_t {VLC_COMMON_MEMBERS };input_thread_t 是个抽象类型,VLC 中这个类…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
