当前位置: 首页 > news >正文

SpringMVC的基本使用

@controller标记一个类是控制器类

@RequestMapping 进行路由映射可以是类也可以是方法,路由的/可以不加,但建议加上

1)简单的映射返回一个hello

@RequestMapping("/m1")public String m1() { return "hello";}

2)可以通过方法中的参数获取对应键值对,/*请求的参数如果放在body里会自动的填充到参数对象里,在url就需要@RequestParam来映射.需要注意的是get请求无法接收body里的参数,只能接收url里的(也算是规范程序员的一种方式了).这是错的我给注释掉了*/

@RequestMapping("/m2")public String m2(String name, Integer age){ return "name: " + name + " age: " + age;}

3)需要注意的是当参数类型为基本类型的时候必须要传这个参数,否则会报错

@RequestMapping("/m3")public String m3(String name, int age){ return "name: " + name + " age: " + age;}

4)建议使用类来做参数,修改代码就不用修改参数,只需要去类里添加属性。而且类里要提供对应的Setter方法(我尝试不加setter方法,无法获取到传递的参数,而值提供setter去可以获得)。如果权限是private则还要提供getter方法,不过不是必须的。

@RequestMapping("/m4")public String m4(Person person){ return "name: " + person.name + " age: " + person.age;}

可以使用这个注解让我们在传参的时候key是name而不是username。但注意后面的required默认是true,意思是这个是个必传参数,而改成false后就不是必传参数了。

@RequestMapping("/m5")public String m5(@RequestParam(value = "name",required = false) String username,Integer age) { return "name: " + username + " age: " + age;}

6)我们也可以传一个数组,在传参的时候用,分隔value也可以当做多个键值对来传

@RequestMapping("/m6")public String m6(String[] names) { return Arrays.toString(names) + "len: " + names.length;}

7)传一个集合和数组的传参没什么区别就是在参数前要加一个注解

@RequestMapping("/m7")public List<String> m7(@RequestParam(required = false) List<String> names) { return names;}

8)在body中存放json数据可以通过这个注解来标志一下,我们的键值对就可以写在body里了

@RequestMapping("/m8")public String m8(@RequestBody Person person) { return person.toString();}

9) 可以通过这种方式来获取URL中的信息@PathVariable后面的括号是指定路由中的这个键值对给后面的变量,不加就默认跟着相同的变量名,如果是没有就会报错。

@RequestMapping("/m9/{name}/{age}")public String m9(@PathVariable("age") Integer age,@PathVariable("name") String name) { return name + " " + age;}

10)可以通过@RequestPart注解传一个文件,键值对的形式,键名要与参数对应。

@RequestMapping("/m10")public String m9(@RequestPart MultipartFile file) { return "file" + file.getOriginalFilename();}

11)有两种方式获取cookie,一种是使用servlet的方法,可以获取全部的cookie,一种是用注解获取对应的cookie

@RequestMapping("/getCookie")public String getCookie(HttpServletRequest request) { Cookie[] cookies = request.getCookies(); return cookies[0].getName() + " " + cookies[0].getValue();}@RequestMapping("/getCookie2")public String getCookie2(@CookieValue String name) { return name;}

有三种方法获取session也是servlet和Springmvc的两种

@RequestMapping("/getSession")public String getSession(HttpServletRequest request) { HttpSession session = request.getSession(); String name = (String) session.getAttribute("name"); return name;}@RequestMapping("/getSession2")public String getSession2(@SessionAttribute(required = false) String name) { return name;}@RequestMapping("/getSession3")public String getSession2(HttpSession session) { String name = (String)session.getAttribute("name"); return name;}

13)两种获取header的方法

@RequestMapping("/getHeader")public String getHeader(HttpServletRequest request) { String usa = request.getHeader("User-Agent"); return usa;}@RequestMapping("/getHeader2")public String getHeader2(@RequestHeader("User-Agent") String usa) { return usa;}

14)@RequestBody可以修饰方法和类表面返回的是数据,@RestController和@Controller都只能修饰类前者返回的是数据后者返回的是页面

@RequestMapping("/return")@Controllerpublic class Return { @RequestMapping("/index") public String index() { return "/index.html"; } @ResponseBody @RequestMapping("/index2") public String index2() { return "/index.html"; }}

15)当返回的是对象(除了String)的时候会转换成Json格式

@ResponseBody@RequestMapping("/ReturnJson")public Person ReturnJson() { Person person = new Person(); person.age = 18; person.name = "zhansgan"; return person;}

16)设置响应的状态码

@ResponseBody@RequestMapping("/setStatus")public String setStatus(HttpServletResponse response) { response.setStatus(401); return "ss";}

设置响应的状态码

@ResponseBody@RequestMapping("/myHeader")public String myHeader(HttpServletResponse response) { response.setHeader("myHeader","myHeader"); return "ss";}

@RequestParam

把参数设置为必传参数,也可以设置不传参数的时候的默认值

这样设置就是非必传

这样设置前端传来的参数名就得是id

相关文章:

SpringMVC的基本使用

controller标记一个类是控制器类 RequestMapping 进行路由映射可以是类也可以是方法&#xff0c;路由的/可以不加&#xff0c;但建议加上 1&#xff09;简单的映射返回一个hello RequestMapping("/m1")public String m1() { return "hello";} 2&#x…...

【漫话机器学习系列】103.学习曲线(Learning Curve)

学习曲线&#xff08;Learning Curve&#xff09;详解 1. 什么是学习曲线&#xff1f; 学习曲线&#xff08;Learning Curve&#xff09;是机器学习和深度学习领域中用于评估模型性能随训练过程变化的图示。它通常用于分析模型的学习能力、是否存在过拟合或欠拟合等问题。 从…...

ubuntu-24.04.1-desktop 中安装 QT6.7

ubuntu-24.04.1-desktop 中安装 QT6.7 1 环境准备1.1 安装 GCC 和必要的开发包:1.2 Xshell 连接 Ubuntu2 安装 Qt 和 Qt Creator:2.1 下载在线安装器2.2 在虚拟机中为文件添加可执行权限2.3 配置镜像地址运行安装器2.4 错误:libxcb-xinerama.so.0: cannot open shared objec…...

MQTT实现智能家居------2、写MQTT程序的思路

举个最简单的例子&#xff1a; 手机------服务器-------家具 我们这里只看手机和家具的客户端&#xff1a; 手机&#xff1a;1&#xff09;需要连接服务器 2&#xff09;需要发布指令给服务器到家里的家具 3&#xff09;接受来自于家里家具的异常状况 4&#xff09;保持心…...

【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调【完整教程】

文章目录 1.背景2.微调方式2.1 关键环境版本信息2.2 步骤2.2.1 下载llama-factory2.2.2 准备数据集2.2.3 微调模式2.2.3.1 zero-1微调2.2.3.2 zero-2微调2.2.3.3 zero-3微调2.2.3.4 单卡Lora微调 2.2.4 实验2.2.4.1 实验1&#xff1a;多GPU微调-zero12.2.4.2 实验2&#xff1a;…...

DeepSeek 从入门到精通:全面掌握 DeepSeek 的核心功能与应用

引言 DeepSeek 是一款功能强大的工具&#xff08;或平台/框架&#xff0c;具体根据实际定义&#xff09;&#xff0c;广泛应用于数据分析、人工智能、自动化任务等领域。无论你是初学者还是资深开发者&#xff0c;掌握 DeepSeek 的核心功能和应用场景都将为你的工作和学习带来…...

“国补”带火手机换新,出售旧手机应如何保护个人信息安全

在“国补”政策的推动下,手机换新热潮正席卷而来。“国补”以其诱人的补贴力度,成功激发了消费者更换手机的热情。无论是渴望体验最新技术的科技爱好者,还是对旧手机性能不满的普通用户,都纷纷投身到这场手机换新的浪潮之中。 随着大量消费者参与手机换新,二手手机市场迎来…...

驱动开发系列39 - Linux Graphics 3D 绘制流程(二)- 设置渲染管线

一:概述 Intel 的 Iris 驱动是 Mesa 中的 Gallium 驱动,主要用于 Intel Gen8+ GPU(Broadwell 及更新架构)。它负责与 i915 内核 DRM 驱动交互,并通过 Vulkan(ANV)、OpenGL(Iris Gallium)、或 OpenCL(Clover)来提供 3D 加速。在 Iris 驱动中,GPU Pipeline 设置 涉及…...

Windows使用docker部署fastgpt出现的一些问题

文章目录 Windows使用docker部署FastGPT出现的一些问题1.docker部署pg一直重启的问题2.重启MongoDB之后一直出现“Waiting for MongoDB to start...”3.oneapi启动不了failed to get gpt-3.5-turbo token encoder Windows使用docker部署FastGPT出现的一些问题 1.docker部署pg一…...

六十天前端强化训练之第一天HTML5语义化标签深度解析与博客搭建实战

欢迎来到编程星辰海的博客讲解 目录 一、语义化标签的核心价值 1.1 什么是语义化&#xff1f; 1.2 核心优势 二、语义标签详解与使用场景 2.1 布局容器标签 2.2 内容组织标签 三、博客结构搭建实战 3.1 完整HTML结构 3.2 核心结构解析 3.3 实现效果说明 四、学习要点…...

Oracle中补全时间的处理

在实际数据处理的过程中&#xff0c;存在日期不连续的问题&#xff0c;可能会导致数据传到前后端出现异常&#xff0c;为了避免这种问题&#xff0c;通常会从数据端进行日期不全的处理&#xff1a; 以下为补全年份的案例&#xff1a; with x as (select 开始年份 &#xff08;…...

PHP课程预约小程序源码

&#x1f4f1; 课程预约小程序&#xff1a;为您专属定制的便捷预约新体验 在这个快节奏的时代&#xff0c;我们深知每一位瑜伽爱好者、普拉提追随者以及培训机构管理者对高效、便捷服务的迫切需求。因此&#xff0c;我们匠心独运&#xff0c;推出了一款基于PHPUniApp框架开发的…...

(200): error: #29: expected an expression error: #40: expected an identifier

这是因为你乱加define导致你的define与变量名重复就会出现&#xff0c;他找不到错误只会抱着两个错...

一文讲解Redis中的常用命令

①、操作字符串的命令有&#xff1a; SET key value&#xff1a;设置键 key 的值为 value。GET key&#xff1a;获取键 key 的值。DEL key&#xff1a;删除键 key。INCR key&#xff1a;将键 key 存储的数值增一。DECR key&#xff1a;将键 key 存储的数值减一。 ②、操作列表…...

智能交通系统(Intelligent Transportation Systems):智慧城市中的交通革新

智能交通系统&#xff08;Intelligent Transportation Systems, ITS&#xff09;是利用先进的信息技术、通信技术、传感技术、计算机技术以及自动化技术等&#xff0c;来提升交通系统效率和安全性的一种交通管理方式。ITS通过收集和分析交通数据&#xff0c;智能化地调度、控制…...

Node.js 登录鉴权

目录 Session express-session 配置 express-session 函数 ts 要配置声明文件 express-session.d.ts express-session 使用 express-session 带角色 Token 什么是 JWT token jsonwebtoken 使用 jsonwebtoken 带角色 Session express 使用 express-session 管理会话&…...

EPSON L3118彩色喷墨打印机灯全闪故障维修一例

一台EPSON L3118彩色喷墨打印机&#xff0c;故障时开机灯全闪烁&#xff0c;一般来说这种故障问题都不太大&#xff0c;要么就是打印机内部卡纸了&#xff0c;要么就是传感器故障&#xff0c;一般情况下卡纸的问题比较多… …&#xff1b; 但是遇到一用户又菜又爱玩&#xff0c…...

在 Mac ARM 架构的 macOS 系统上启用 F1 键作为 Snipaste 的截屏快捷键

在 Mac ARM 架构的 macOS 系统上启用 F1 键作为 Snipaste 的截屏快捷键&#xff0c;主要涉及到两个方面&#xff1a;确保 F1 键作为标准功能键工作 和 在 Snipaste 中设置 F1 为快捷键。 因为 Mac 默认情况下&#xff0c;F1-F12 键通常用作控制屏幕亮度、音量等系统功能的快捷键…...

基于AT89C51单片机的教室智能照明控制系统

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/90419908?spm1001.2014.3001.5501 C16 部分参考设计如下&#xff1a; 摘 要 本项目的智能教室灯光控制系统通过合理的软硬件设计&#xff0c;有效地提升了教室…...

JavaSE学习笔记25-反射(reflection)

反射 在Java中&#xff0c;反射&#xff08;Reflection&#xff09; 是一种强大的机制&#xff0c;允许程序在运行时检查和操作类、方法、字段等信息。通过反射&#xff0c;可以动态地创建对象、调用方法、访问字段&#xff0c;甚至修改私有成员。反射的核心类是 java.lang.re…...

ctf网络安全题库 ctf网络安全大赛答案

此题解仅为部分题解&#xff0c;包括&#xff1a; 【RE】&#xff1a;①Reverse_Checkin ②SimplePE ③EzGame 【Web】①f12 ②ezrunner 【Crypto】①MD5 ②password ③看我回旋踢 ④摩丝 【Misc】①爆爆爆爆 ②凯撒大帝的三个秘密 ③你才是职业选手 一、 Re ① Reverse Chec…...

旋转位置编码(ROPE)详解:从Transformer到现代前沿

旋转位置编码&#xff08;ROPE&#xff09;详解&#xff1a;从Transformer到现代前沿 标签&#xff1a;NLP, Transformer, 位置编码, ROPE, 深度学习, 机器学习 摘要&#xff1a;本文详细介绍了旋转位置编码&#xff08;ROPE&#xff09;在Transformer模型中的应用&#xff0…...

ROS2机器人开发--服务通信与参数通信

服务通信与参数通信 在 ROS 2 中&#xff0c;服务&#xff08;Services&#xff09;通信和参数&#xff08;Parameters&#xff09;通信是两种重要的通信机制。服务是基于请求和响应的双向通信机制。参数用于管理节点的设置&#xff0c;并且参数通信是基于服务通信实现的。 1 …...

安全运维,等保测试常见解决问题。

1. 未配置口令复杂度策略。 # 配置密码安全策略 # vi /etc/pam.d/system-auth # local_users_only 只允许本机用户。 # retry 3 最多重复尝试3次。 # minlen12 最小长度为12个字符。 # dcredit-1 至少需要1个数字字符。 # ucredit-1 至少需要1个大…...

【数据标准】数据标准化是数据治理的基础

导读&#xff1a;数据标准化是数据治理的基石&#xff0c;它通过统一数据格式、编码、命名与语义等&#xff0c;全方位提升数据质量&#xff0c;确保准确性、完整性与一致性&#xff0c;从源头上杜绝错误与冲突。这不仅打破部门及系统间的数据壁垒&#xff0c;极大促进数据共享…...

Java 18~20 新特性

文章目录 一、Java 18 新特性1.1、UTF-8 作为默认字符集&#xff08;JEP 400&#xff09;1.2、简易 Web 服务器&#xff08;JEP 408&#xff09;1.3、代码片段标签 snippet&#xff08;JEP 413&#xff09;1.4、使用方法句柄重新实现反射核心&#xff08;JEP 416&#xff09;1.…...

程序员学商务英语之At the Hotel

Dialogue-3 Room service-Cleaning the Room客房服务-打扫房间 A: Who will do the dishes after dinner tonight? 今晚饭后谁来洗碗&#xff1f; B: It’s your turn. 轮到你了。 Go do the room right now. clean the room去打扫房间。Doing the laundry is the last thi…...

探秘路由表:网络世界的导航地图

一、引言 在当今数字化时代&#xff0c;网络已经成为我们生活中不可或缺的一部分。无论是浏览网页、观看视频&#xff0c;还是进行在线办公、游戏娱乐&#xff0c;我们都在与网络进行着频繁的交互。而在这背后&#xff0c;网络中的数据传输就如同现实生活中的快递配送&#xf…...

UniApp SelectorQuery 讲解

一、SelectorQuery简介 在UniApp中&#xff0c;SelectorQuery是一个非常强大的工具&#xff0c;它允许开发者查询节点信息。通过这个API&#xff0c;我们可以获取到页面元素的尺寸、位置、滚动条位置等信息。这在处理动态布局、动画效果或是用户交互时尤为重要。 二、基本使用…...

三数之和:经典问题的多种优化策略

三数之和&#xff1a;经典问题的多种优化策略 大家好&#xff0c;我是Echo_Wish。今天我们来聊一个经典的算法问题——三数之和&#xff08;3Sum&#xff09;。它是许多面试和算法竞赛中常见的问题之一&#xff0c;也常常考察我们对算法优化的理解和技巧。我们不仅要解决问题&…...

Flash-00

下载网站&#xff1a;Flash CC 2015中文版下载-Adobe Flash CC 2015(动画制作软件)免费下载-当快软件园 1-什么是Flash&#xff1f; Flash是一款多媒体设计软件&#xff0c;二维交互式动画设计工具&#xff0c;常用于矢量动画制作 2-Flash的应用领域&#xff1f; 动画制作&a…...

FTP 实验(ENSP模拟器实现)

FTP 概述 FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;是一种用于在网络上进行文件传输的标准协议。它允许用户在两台计算机之间上传和下载文件。 1、FTP采用客户端-服务器模型&#xff0c;客户端通过FTP客户端软件&#xff0c;连接到FTP服务…...

DeepSeek在初创企业、教育和数字营销领域应用思考

如今&#xff0c;像 DeepSeek 这样的人工智能工具正在改变企业的运营方式&#xff0c;优化流程并显著提高生产力。通过重复任务的自动化、大量数据的分析以及内容创建效率的提高&#xff0c;组织正在寻找新的竞争和卓越方式。本文介绍了 DeepSeek 如何用于提高三个关键领域的生…...

ubuntu新系统使用指南

1. 更新源 2. 配置rime 输入法 sudo apt install ibus-rimeibus-setup #打开配置界面添加雾凇拼音 cd ~/Documents/Tool/input_source/plumgit clone --depth 1 https://github.com/rime/plum plum #没有梯子就劝退cd plum/bash rime-install iDvel/rime-ice:others/recipe…...

HaProxy配置详解

一、haproxy基础配置 官方文档&#xff1a;HAProxy version 2.2.22 - Configuration Manual HAProxy 的配置文件haproxy.cfg由两大部分组成&#xff0c;分别是global和proxies部分。 global&#xff1a;全局配置段 进程及安全配置相关的参数性能调整相关参数Debug参数 pro…...

PCL 基于FPFH特征的SAC-IA算法

文章目录 一、简介二、PCL中的相关类型二、实现代码三、实现效果参考资料一、简介 该算法的大致过程如下所示: 通过这种随机采样并使用FPFH描述子进行匹配的方式,可以快速找到一个较好的转换矩阵,从而实现两个物体的初始配准。 二、PCL中的相关类型 类型为:pcl::SampleCons…...

Git操作整体流程

文章目录 1.Git创建个人仓库2、Git全局配置3、Git本地管理4. Git本地管理常用命令汇总5、使用Git命令将项目提交到远程码云管理6.使用IDEA进行管理7、Idea里面的终端8、关于提交总结 1.Git创建个人仓库 打开https://gitee.com/&#xff0c;登录个人账号&#xff0c;右上角加号…...

独立开发者之PLG 和 SLG 是什么

什么是 PLG 和 SLG PLG&#xff08;产品驱动增长&#xff09;是一种策略&#xff0c;通过产品本身吸引用户并推动客户获取、保留和扩展。例如&#xff0c;提供免费试用或免费模式&#xff0c;让用户直接体验产品价值&#xff0c;如 Slack 和 Dropbox 那样。SLG&#xff08;销售…...

Python 基本语法的详细解释

目录 &#xff08;1&#xff09;注释 &#xff08;2&#xff09;缩进 &#xff08;3&#xff09;变量和数据类型 变量定义 数据类型 &#xff08;4&#xff09;输入和输出 输出&#xff1a;print() 函数 输入&#xff1a;input() 函数 &#xff08;1&#xff09;注释 注…...

腾讯SQL面试题变体实现:最长连续天数与允许1天中断的进阶解法

腾讯SQL面试题变体实现:最长连续天数与允许1天中断的进阶解法 作者:某七年数据开发工程师 | 2025年02月23日 关键词:滑动窗口、容错机制、连续区间优化 一、变体题型需求分析 在原题如何找出连续5天涨幅超过5%的股票基础上,需实现两个扩展场景: 最长连续天数:输出每只股…...

KubeKey一键安装部署k8s集群和KubeSphere详细教程

目录 一、KubeKey简介 二、k8s集群KubeSphere安装 集群规划 硬件要求 Kubernetes支持版本 操作系统要求 SSH免密登录 配置集群时钟 所有节点安装依赖 安装docker DNS要求 存储要求 下载 KubeKey 验证KubeKey 配置集群文件 安装集群 验证命令 登录页面 一、Ku…...

w803|联盛德|WM IoT SDK2.X测试|pinout|(2):w803开发板简介

概述 W803-Pico是一款基于联盛德W803芯片为主控的开发板&#xff0c;支持IEEE802.11 b/g/n Wi-Fi&#xff0c;以及BT/BLE4.2协议蓝牙。芯片内置高性能32位处理器&#xff0c;主频高达240MHz。内置2MB Flash以及288KB RAM。硬件采用DIP封装&#xff0c;PCB板载天线&#xff0c;…...

BGP分解实验·19——BGP选路原则之起源

当用不同的方式为BGP注入路由时&#xff0c;起源代码将标识路由的来源。 &#xff08;在BGP表中&#xff0c;Network为“i”&#xff0c;重分布是“&#xff1f;”&#xff09; 实验拓扑如下&#xff1a; R2上将来自IGP的路由10.3.3.3/32用network指令注入BGP;在R4上将来自I…...

使用ESP-IDF来驱动INMP441全向麦克风

之前的文章我们讲过了I2S。 I2S是什么通信协议&#xff1f;它如何传输音频数据&#xff1f;它和I2C是什么关系&#xff1f;_i2c接口和i2s-CSDN博客文章浏览阅读836次&#xff0c;点赞12次&#xff0c;收藏14次。这个可以参考ADC来理解&#xff0c;我们的ADC也是有左对齐和右对…...

C/C++跳动的爱心

系列文章 序号直达链接1C/C李峋同款跳动的爱心2C/C跳动的爱心3C/C经典爱心4C/C满屏飘字5C/C大雪纷飞6C/C炫酷烟花7C/C黑客帝国同款字母雨8C/C樱花树9C/C奥特曼10C/C精美圣诞树11C/C俄罗斯方块小游戏12C/C贪吃蛇小游戏13C/C孤单又灿烂的神14C/C闪烁的爱心15C/C哆啦A梦16C/C简单…...

blender笔记2

一、物体贴地 物体->变换->对齐物体 ->对齐弹窗(对齐模式&#xff1a;反方&#xff0c;相对于&#xff1a;场景原点&#xff0c;对齐&#xff1a;z)。 之后可以设置原点->原点--3d游标 二、面上有阴影 在编辑模式下操作过后&#xff0c;物体面有阴影。 数据-&g…...

关于在mac中配置Java系统环境变量

引言 在 macOS 上开发 Java 或 Flutter 应用时&#xff0c;正确配置环境变量是至关重要的。环境变量不仅能让系统找到开发工具的位置&#xff0c;还能简化命令行操作。本文将手把手教你从零开始安装 Java SDK&#xff0c;并详细配置环境变量&#xff0c;涵盖常见问题解决和优化…...

透彻理解:方差、协方差、相关系数、协方差矩阵及其应用

最近看了几篇跨领域特征对齐方面的经典文献&#xff0c;学者们搞了很多花样&#xff0c;如有的提出一阶统计特征对齐&#xff0c;有的提出二阶统计特征对齐&#xff0c;有的学者提出高阶统计特征对齐。 通俗而言&#xff0c;就是在统计特征层面对跨域特征进行对齐&#xff0c;…...

【SPIE出版,见刊快速,EI检索稳定,浙江水利水电学院主办】2025年物理学与量子计算国际学术会议(ICPQC 2025)

2025年物理学与量子计算国际学术会议&#xff08;ICPQC 2025&#xff09;将于2025年4月18-20日在中国杭州举行。本次会议旨在汇聚全球的研究人员、学者和业界专家&#xff0c;共同探讨物理学与量子计算领域的最新进展与前沿挑战。随着量子技术的快速发展&#xff0c;其在信息处…...

jmeter后端监视器的妙用和实现方法

JMeter 的后端监视器&#xff08;Backend Listener&#xff09;是一个强大的工具&#xff0c;可用于收集、存储和分析测试过程中的性能指标。它允许将测试数据发送到外部系统&#xff08;如 InfluxDB、Graphite 等&#xff09;&#xff0c;并借助这些系统的可视化工具&#xff…...