springboot+Vue实现分页

news/2025/1/19 8:45:39/

文章目录


今天开发的有一个场景就是需要从远程ssh服务器上加载一个文件展示到前端,但是一次性拉过来有几万条数据,一下载加载整个文件会导致前端非常非常的卡,于是要使用分页解决,我之前看过的有mybatis的分页查询解决方案,哪个是封装好的,但是我的场景是查询文件实现分页展示,因此需要写一个个性化的分页逻辑。

一、后端

后端使用的是springboot,用的是java连接远程服务器读取文件然后返回一个list列表。

用到了依赖

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version>
</dependency>

大致的逻辑就是说后端先通过你自己的方式获取到文件,有一个page,pagesize这两个参数控制要读取的内容从哪到哪。返回这一小段即可。前端每次点击上一页,下一页,页面大小实际上就是控制这两个参数进行数据读取。

public List<SyslogMessage> readRemoteFilePaged(int page, int pageSize) throws JSchException, SftpException, IOException {JSch jsch = new JSch();Session session = jsch.getSession(user, host, port);session.setPassword(password);session.setConfig("StrictHostKeyChecking", "no"); // 注意:生产环境中应该使用更安全的方式处理host keysession.connect();ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");channelSftp.connect();// 计算跳过的行数int skipLines = (page - 1) * pageSize;int currentLine = 0;List<SyslogMessage> loglist = new ArrayList<>();InputStream inputStream = channelSftp.get(remoteFilePath);try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {String line;while ((line = reader.readLine()) != null) {// 跳过指定数量的行if (currentLine < skipLines) {currentLine++;continue;}// 读取指定数量的行if (loglist.size() < pageSize) {loglist.add(new SyslogMessage(line));} else {break; // 达到每页大小,退出循环}}}channelSftp.disconnect();session.disconnect();return loglist;}

二、前端

前端使用的是Vue,主要就是用到了element中的el-pagination组件,使用handleSizeChange和handleCurrentChange控制页面大小以及当前页数。每次切换时都是用axios用这两个参数像后端请求数据,很方便,注意url要用` `而不是单引号

<template><div><div class="pagination-container">  <h1 class="server-log-title">133服务器sys日志</h1>  </div>  <el-table :data="syslog" style="width: 100%" :row-class-name="tableRowClassName"><el-table-columnprop="log"label="日志"width="auto"></el-table-column>   </el-table><div class="pagination-container"><el-pagination@size-change="handleSizeChange"@current-change="handleCurrentChange":page-sizes="[50, 100, 150, 200]":page-size="pageSize"layout="total, sizes, prev, pager, next, jumper":total="1000000"></el-pagination></div></div>
</template><script>
import axios from 'axios'
export default {data() {return {name: 'Ecust',syslog: [],currentPage:10,pageSize:50,totalLogCount:0}},methods:{tableRowClassName({row, rowIndex}) {if (row.log && row.log.includes('高资源')) {console.log()return 'warning-row';} else{return 'success-row';}},async fetchLogs(){try {let url=`http://localhost:5678/syslog/page?page=${this.currentPage}&pageSize=${this.pageSize}`await axios.get(url).then((response)=>{this.syslog = response.data// console.log(response)})} catch (error) {console.log('Error:', error)}},handleSizeChange(val) {  this.pageSize = val  this.currentPage = 1 // 当每页条数改变时,重置页码为第一页  this.fetchLogs()  },  handleCurrentChange(val) {  this.currentPage = val  this.fetchLogs()  }  },created() {this.fetchLogs()}
}
</script><style>
.el-table .warning-row {background: oldlace;}.el-table .success-row {background: #f0f9eb;}
</style><style scoped>.pagination-container {  display: flex;  justify-content: center; /* 水平居中 */  align-items: center; /* 垂直居中,如果需要的话 */  height: 100px; /* 或者其他你需要的高度 */  }.pagination-container2 {  display: flex;  justify-content: center; /* 水平居中 */  align-items: center; /* 垂直居中 */  height: 100vh; /* 使用视口高度来垂直居中,或者根据需要调整 */  margin: 0; /* 移除默认的外边距 */  padding: 20px; /* 添加一些内边距 */  background-color: #f5f5f5; /* 添加背景色 */  
}  .server-log-title {  font-family: 'Arial', sans-serif; /* 使用一个常见的无衬线字体 */  color: #333; /* 字体颜色 */  font-size: 2em; /* 字体大小 */  text-align: center; /* 文本居中 */  margin: 0; /* 移除默认的外边距 */  padding: 0; /* 移除默认的内边距 */  letter-spacing: 1px; /* 字母间距 */  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1); /* 文本阴影,增加立体感 */  
} 
</style>

http://www.ppmy.cn/news/1441843.html

相关文章

【信号处理】基于CNN自编码器的心电信号异常检测识别(tensorflow)

关于 本项目主要实现卷积自编码器对于异常心电ECG信号的检测和识别&#xff0c;属于无监督学习中的生理信号检测的典型方法之一。 工具 方法实现 读取心电信号 normal_df pd.read_csv("/heartbeat/ptbdb_normal.csv").iloc[:, :-1] anomaly_df pd.read_csv(&quo…

Spring Boot 的文件配置

SpringBoot的配置文件,有三种格式 1.properties 2.yaml 3.yml(yaml的简写) 这里主要介绍1和3格式的。 在项目中,同时存在properties和yml配置文件, properties的优先级更高 同时存在时,两个文件都生效 如果两个文件中,都包含同一个配置,以properties为主。 properties的配置…

Python爬虫--Ajax异步抓取腾讯视频评论

在某些网站 &#xff0c;当我们滑下去的时候才会显示出后面的内容 就像淘宝一样&#xff0c;滑下去才逐渐显示其他商品 这个就是采用 Ajax 做的 然后我们现在就是要编写这样的爬虫。 规律分析&#xff1a; 这个时候就要用到我们的 Fiddler 了 我们需要分析加载评论的规律 …

PotatoPie 4.0 实验教程(21) —— FPGA实现摄像头图像二值化(RGB2Gray2Bin)

PotatoPie 4.0开发板教程目录&#xff08;2024/04/21&#xff09; 为什么要进行图像的二值化&#xff1f; 当我们处理图像时&#xff0c;常常需要将其转换为二值图像。这是因为在很多应用中&#xff0c;我们只对图像中的某些特定部分感兴趣&#xff0c;而不需要考虑所有像素的…

引入线程的贪吃蛇风骚走位

1.在main函数中分别引入线程t1 和线程 t2 一个线程用来刷新界面&#xff0c;一个线程用来改变方向 2.刷新界面函数&#xff0c;无限次刷新 3. 也是无限循环while(1) 定义key 从键盘获取输入方向&#xff0c;赋值给dir; 4.在初始化函数中确定蛇向有行走为方向 5.从改变方向的函数…

计算机网络复习(第一章概述)

一、基本概念 1、计算机网络&#xff1a;由若干节点和连接这些结点的链路组成&#xff08;交换机连接&#xff09; 2、互连网&#xff1a;路由器连接的多个计算机网络 3、ISP&#xff1a;互联网服务提供商&#xff0c;ISP高级路由器连接全部组成互联网 4、互联网必须使用TC…

图像的矩(MATLAB源码)

颜色矩(Color Moment)是一种用来描述图像颜色分布的统计特征。它可以用来衡量图像中不同颜色之间的关系,以及颜色分布的特征。常见的颜色矩包括一阶矩(Mean)、二阶矩(Variance)、三阶矩(Skewness)和四阶矩(Kurtosis)等。 颜色矩能够提供关于图像颜色分布的信息,例…

FRPC+PHP+MYSQL+APACHE2=个人网站

应用背景有公网需求,但是又不想去买又贵又低配置的服务器,然后方案就应运而生 frp/README_zh.md at dev fatedier/frp (github.com) 在这里, FRPC作为内网穿透服务, PHPMYSQLAPACHE2,作为网站搭建,具体细节不细讲, 但是在我的/var/www/html下面 linaroHinlink:/var/www/h…