第五期:深入理解 Spring Web MVC [特殊字符]( 前后端交互的综合性练习)
✨ 前言:从理解到实战,彻底掌握 Spring MVC 前后端交互
当我们学习了 Spring MVC 中的各种注解、参数绑定、请求方式、编码处理以及 Cookie/Session 操作之后,下一步就是 —— 动手实践!
理论再多,不如亲自敲一次代码。
为了帮助你真正掌握这些知识点,本期我们特别准备了 4 个实战练习案例,从最简单的 GET 请求查询,到复杂的 JSON 请求、表单提交、Cookie/Session 管理、响应处理,全方位模拟实际开发中最常见的场景。
通过这些实战练习,你将:
-
学会使用
@RequestParam
、@PathVariable
、@RequestBody
等注解完成数据传参; -
体验 Cookie 与 Session 在用户状态保持中的应用;
-
掌握返回 JSON、HTML 片段、静态页面等多种响应形式;
-
深入理解前端 AJAX 与 Spring MVC 后端的数据交互过程;
-
遇到乱码怎么办?特殊字符如何传参?我们也准备了答案!
每一个练习都配有 功能说明 + 技术点目标 + 后端实现 + AJAX 示例,从基础到进阶,适合你一步步打通 Spring MVC 的任督二脉 💪
📚 准备好了吗?接下来,让我们一起动手做项目,走出「会看不会写」的学习阶段!
实战项目:
1 加法计算器
1.1 事前准备(项目创建):
创建项目·选择Maven项目 点击下一步
添加Maven依赖
3 导入我们准备的前端代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body>
<form action="calc/sum" method="post"><h1>计算器</h1>数字1:<input name="num1" type="text"><br>数字2:<input name="num2" type="text"><br><input type="submit" value=" 点击相加 ">
</form>
</body></html>
1.2 约定前后端交互接⼝
概念介绍
约定"前后端交互接⼝"是进⾏Web开发中的关键环节.
接⼝⼜叫API(ApplicationProgrammingInterface),我们⼀般讲到接⼝或者API,指的都是同⼀个东西.
是指应⽤程序对外提供的服务的描述,⽤于交换信息和执⾏任务(与JavaSE阶段学习的[类和接⼝]中的接⼝是两回事).
简单来说,就是允许客⼾端给服务器发送哪些HTTP请求,并且每种请求预期获取什么样的HTTP响应.
这是个特别关键的问题,尤其是做 Web 开发时必须理解的核心概念之一。我们来讲得既清楚又实战一点 👇
❓ 那么为什么要“约定”前后端交互接口?
前后端分离后,前端只管展示,后端只管数据与逻辑。为了能顺利“合作”,必须明确沟通规范——也就是所谓的“接口约定”。
🎯 简单理解:接口就像“合同”
你可以把前后端接口当作一份“合作协议”或“API合同”,它包括:
内容 | 作用 |
---|---|
请求路径 | 前端知道请求哪个地址 |
请求方式 | GET / POST / PUT / DELETE 等 |
参数名称与类型 | 后端告诉前端需要哪些参数,类型是什么 |
返回数据格式 | 返回的是 JSON?里面有哪些字段? |
状态码规范 | 成功/失败怎么判断?出错时返回什么信息? |
💥 如果没有接口约定,会怎样?
-
前端可能传了参数,但后端收不到;
-
后端返回了数据,但前端不知道字段名;
-
请求方法搞错,POST 写成了 GET;
-
返回的格式乱七八糟,前端根本无法解析;
-
后端改了接口,前端完全不知道,直接“炸裂”💥
✅ 规范接口有哪些常见方式?
-
接口文档(推荐)
使用 Postman、YApi、Swagger、Apifox 等工具记录 API 信息。 -
RESTful 风格(建议遵守)
URL 语义清晰,比如:-
/users
→ 获取所有用户 -
/users/{id}
→ 获取某个用户 -
/users POST
→ 新增用户
-
-
定义返回格式(如统一 JSON):
{"code": 200,"message": "success","data": { ... } }
🧠 总结一句话:
前后端接口约定的本质,是让前端和后端团队像两个“契约者”,有序合作、互不踩雷。
所以在项⽬开发前,根据需求先约定好前后端交互接⼝,双⽅按照接⼝⽂档进⾏开发.
接⼝⽂档通常由服务提供⽅来写,交由服务使⽤⽅确认,也就是客⼾端.
接⼝⽂档⼀旦写好,尽量不要轻易改变.
如若需要改变,必须要通知另⼀⽅知晓.
1.3 接⼝定义
请求参数:
1.4 开发代码
由此根据以上接口,我们可以写出:
package com.example.demo;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/calc")
public class computer {@RequestMapping("/sum")public String sum(Integer num1,Integer num2) {Integer sum = num1 + num2;return "</h1>相加的结果 sum = " + sum + "</h1>" ;
}
}
1..5 结果展示:
在两个输入框内输入数字:
点击相加:
由此我们的第一个简单的项目已经完成了,有没有感觉到非常的简单呢?我们要开始加大难度了👇
2 ⽤⼾登录
需求:⽤⼾输⼊账号和密码,后端进⾏校验密码是否正确
1. 如果不正确,前端进⾏⽤⼾告知
2. 如果正确,跳转到⾸⻚.⾸⻚显⽰当前登录⽤⼾
3. 后续再访问⾸⻚,可以获取到登录⽤⼾信息
2.1 事前准备 :
前端代码:login
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>登录页面</title>
</head><body>
<h1>用户登录</h1>
用户名:<input name="userName" type="text" id="userName"><br>
密码:<input name="password" type="password" id="password"><br>
<input type="button" value="登录" onclick="login()"><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>function login(){}</script>
</body></html>
index:
<!doctype html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>用户登录首页</title>
</head><body>
登录人: <span id="loginUser"></span><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script></script>
</body></html>
2.2 约定前后端交互接⼝
需求分析 对于后端开发⼈员⽽⾔,不涉及前端⻚⾯的展⽰,只需要提供两个功能
1. 登录⻚⾯:通过账号和密码,校验输⼊的账号密码是否正确,并告知前端
2. ⾸⻚:告知前端当前登录⽤⼾.如果当前已有⽤⼾登录,返回登录的账号,如果没有,返回空
2.3 接⼝定义
请求参数:
响应数据:
Content-Type: text/html
响应内容:
true //账号密码验证成功
false//账号密码验证失败
查询登录⽤⼾接⼝
请求参数:
⽆
响应数据:
2.4 开发代码
package com.example.demo;import jakarta.servlet.http.HttpSession;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/user")
@RestController
public class userlogin {@RequestMapping("/login")//判断传递的两个参数是否为空,如果为空就返回false//不为空就将输入名字的参数传递在session中以便在前端中中获取public Boolean login(String username, String password, HttpSession session) {if(!StringUtils.hasLength(username)||!StringUtils.hasLength(password)) {return false;}//校验账号密码是否正确//理论上应该从数据库中获取账号密码, 校验是否正确, 但当前还没讲数据库的操作, 先把// 账号密码固定写死if(!"zhangsan".equals(username)|| !"admin".equals(password)) {return false;}//密码验证成功, 把⽤⼾名存储在Session中session.setAttribute("username", username);return true;}@RequestMapping("/getLoginUser")public String getLoginUser(HttpSession session) {//从Session中获取⽤⼾登录信息String username = (String) session.getAttribute("username");//如果⽤⼾已经登录, 则直接返回⽤⼾登录 if(StringUtils.hasLength(username)) {return username;}return"";}
}
2.5 调整前端⻚⾯代码
2.5.1调整登录⻚⾯login.html
对于前端⽽⾔,当点击登录按钮时,需要把⽤⼾输⼊的信息传递到后端进⾏校验,后端校验成功,则跳转 到⾸⻚:index.html,后端校验失败,则直接弹窗
function login(){$.ajax({type :"post",url:"/user/login",data:{"userName":$("#userName").val(),"password":$("#password").val()},success:function (result){if(result){location.href = "/index.html"} else {alert("账号或密码有错误");}}});}
⻚⾯跳转的三种⽅式:
1. window.location.href="book_list.html";
2. window.location.assign("book_list.html");
3. window.location.replace("book_list.html");
以上写法,通常把"window."省略,⽐如window.location.href = "book_list.html"; 写成location.href = "book_list.html";
三者区别参考:location.assign()、location.href、location.replace(url)的不同-阿里云开发者社区
2.5.2 调整⾸⻚代码
⾸⻚代码⽐较简单,只显⽰当前登录⽤⼾即可.
当前登录⽤⼾需要从后端获取,并显⽰到前端
$.ajax({type: "get",url: "/user/getLoginUser",success: function (result) {$("#loginUser").text(result);}});
2.6 运⾏测试
多次刷新http://127.0.0.1:8080/index.html 发现依然可以获取到登录⽤⼾ 如果重启服务器,则登录⼈显⽰:空
Session存在内存中,如果不做任何处理,默认服务器重启,Session数据就丢失了
相关文章:
第五期:深入理解 Spring Web MVC [特殊字符]( 前后端交互的综合性练习)
✨ 前言:从理解到实战,彻底掌握 Spring MVC 前后端交互 当我们学习了 Spring MVC 中的各种注解、参数绑定、请求方式、编码处理以及 Cookie/Session 操作之后,下一步就是 —— 动手实践! 理论再多,不如亲自敲一次代码…...
ansible可视化自动化平台-semaphore
1、简介 Semaphore UI 是一个开源的CI/CD工具,专注于简化和自动化软件交付流程,可轻松管理和运行 Ansible playbook,提供了一个直观的 Web 用户界面(UI),帮助DevOps团队轻松管理任务、部署和流水线。 官网…...
手撕LLM(二):从源码出发,探索LoRA加载、推理全流程
接上回接着说,前面我们通过分析源码,了解了大模型推理的详细流程,包括提示词从输入,到对话模版包装,到tokenID转换,到Embedding词向量转换;通过大模型推理,再将大模型输出进行最后一…...
数据库连接JDBC
概述 ✅概念 JDBC(JavaDataBaseConnectivityjava数据库连接)是⼀种⽤于执⾏SQL语句的JavaAPI,可以为多种关系型数据库提供 统⼀访问,它是由⼀组⽤Java语⾔编写的类和接⼝组成的。 本质 其实就是java官⽅提供的⼀套规范(接⼝)。⽤于帮助开发⼈员快速实现…...
VectorBT:使用PyTorch+Transformer训练和回测股票模型 进阶五
VectorBT:使用PyTorchTransformer训练和回测股票模型 进阶五 本方案基于PyTorch框架与Transformer模型,结合VectorBT回测引擎构建多股票量化交易系统,采用滑动窗口技术构建时序特征,通过自注意力机制捕捉市场规律预测收益率&#…...
DP Alt Mode 与 USB 的关系
DP Alt Mode 与 USB 的关系 1. 物理接口的统一:USB-C 是“万能插座” [USB-C接口物理结构] |-----------------------------------------------| | USB 3.0数据引脚 | DP Alt Mode视频引脚 | 电源引脚 | |-------------------------------------…...
C#“与AI的奇妙结合”
原文:C# 使用通义灵码 - AI 助力 Visual Studio 开发_w3cschool (注意:本文章中并不存在任何广告,也不存在任何盈利内容) C# 使用通义灵码 C# 作为一种功能强大且灵活多变的编程语言,被广泛应用于各个领…...
企业ITR流程设计与执行详细介绍【附全文阅读】
该方案聚焦企业 ITR 流程,适用于企业的服务管理人员、流程优化负责人、技术支持团队以及中高层管理者等。 ITR 流程的重要性:企业服务面临客户不满、管理者焦虑、服务人员无奈等挑战,缺乏完善的 ITR 流程会影响品牌形象、客户满意度和产品竞争力。ITR 流程能够保障客户满意,…...
Ubuntu 无密码热点(Soft AP)完整配置方案
适用于 Jetson、嵌入式 Linux、RDK 平台。目标:配置一个无密码热点(Soft AP),供手机等设备直接连接。实现开机自动启动热点,也支持后续一键切换回 WiFi 客户端模式。 平台:Yahboom RDK X3(Jetso…...
【力扣hot100题】(063)搜索二维矩阵
看到这题我就想到之前被我当作这题做的【力扣hot100题】(020)搜索二维矩阵Ⅱ 其实是完全不一样的两题,个人觉得这道题更简单也更考验基础,那道题思路更难想到但代码更好写。 两个二分查找结束,要注意的是第一个二分查…...
瑞萨RA4M2使用心得-KEIL5的第一次编译
目录 前言 环境: 开发板:RA-Eco-RA4M2-100PIN-V1.0 IDE:keil5.35 一、软件的下载 编辑瑞萨的芯片,除了keil5 外还需要一个软件:RASC 路径:Releases renesas/fsp (github.com) 向下找到: …...
玄机-apache日志分析
靶场任务 1、提交当天访问次数最多的IP,即黑客IP: 查看apache日志 apache访问日志的位置是:/var/log/apache2/access.log.1 匹配正则算法 首先先cat看看 发现地址都在第一行,直接匹配计算输出 cat access.log.1 |grep -Eo &…...
[C++]洛谷B2119 删除单词后缀
题目与解析 题干题目描述输入格式输出格式样例样例输入样例输出 答案解析食用提示AC代码AC代码详细解析头文件部分主程序8~12行代码 12行以后的代码 题干 题目描述 给定一个单词,如果该单词以 er、ly 或者 ing 后缀结尾,则删除该后缀(题目保…...
Ubuntu远程连接Mysql数据库(图文详解)
Ubuntu远程连接Mysql数据库 1、版本2、检查有没有Mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.3 查看Mysql运行状态 3、卸载Mysql4、安装4.1 更新4.2 开始安装4.3 安装完后查看状态 5、登录5.1、使用5.2、查看数据库权限5.3 更新权限5.4 再次查看数据库权限5.5 添加新用…...
回归预测 | Matlab实现NRBO-Transformer-GRU多变量回归预测
回归预测 | Matlab实现NRBO-Transformer-GRU多变量回归预测 目录 回归预测 | Matlab实现NRBO-Transformer-GRU多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【JCR一区级】Matlab实现NRBO-Transformer-GRU多变量回归预测,牛顿-拉夫逊算法优…...
leetcode122-买卖股票的最佳时机II
leetcode 122 思路 方法一的核心思想是简单的贪心策略。我们每天都看当前价格和下一个价格的差值。如果下一个价格高于当前价格(即diff > 0),那么就认为当天可以买入并在第二天卖出,赚取利润。因此,方法一把所有…...
from PIL import Image 安装失败
正确安装 Pillow (PIL) # 通过 Conda 安装 conda install pillow -c conda-forge# 或通过 Pip 安装 pip install pillow验证安装 在 Python 中测试是否成功: from PIL import Image print(Image.__version__) # 应输出类似 "9.5.0" 的版本号常见问题说…...
DPFunc蛋白质功能预测模型复现报告
模型简介 模型的具体介绍见蛋白质功能预测论文阅读记录2025(DPFunc、ProtCLIP)_protein functions-CSDN博客 复现流程 仓库:CSUBioGroup/DPFunc 时间:2025.4.5 环境配置 python 3.9.21 & CUDA 11.6 Pytorch: 1.12.0 DG…...
在 Ubuntu24.04 LTS 上 Docker Compose 部署基于 Dify 重构二开的开源项目 Dify-Plus
一、安装环境信息说明 硬件资源(GB 和 GiB 的主要区别在于它们的换算基数不同,GB 使用十进制,GiB 使用二进制,导致相同数值下 GiB 表示的容量略大于 GB;换算关系:1 GiB ≈ 1.07374 GB ;1 GB ≈ …...
双系统ubuntu20.04不能外接显示器的解决办法
一,更换驱动 首先确定是不是英伟达显卡驱动,如果不是的话,设置里找到附加驱动,更改为NVIdia类型的驱动,更改完成之后重启 这里大部分电脑都可以了,如果不行 二、更改启动方式 重启之后进入BIOS设置&…...
高并发内存池:原理、设计与多线程性能优化实践
高并发内存池是一种专门为多线程环境设计的内存管理机制,其核心目标是通过优化内存分配和释放过程,解决传统内存分配器(如malloc/free)在高并发场景下的性能瓶颈,显著提升多线程程序的内存访问效率。 目录 一、核心设计…...
03.31-04.06 论文速递 聚焦具身智能、复杂场景渲染、电影级对话生成等五大前沿领域
🌟 论文速递 | 2025.03.31-04.06 📢 聚焦具身智能、复杂场景渲染、电影级对话生成等前沿领域 1️⃣ 具身智能体:从脑启发到安全协作系统 论文标题: Advances and Challenges in Foundation Agents: From Brain-Inspired Intellige…...
Django和Celery实现的异步任务案例
推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 先决条件步骤1:安装依赖项步骤2:配置Celery2.1 创建`celery.py`2.2 更新 `__init__.py`步骤3:配置Django设置步骤4:定义Celery任务…...
DAY 38 leetcode 15--哈希表.三数之和
题号15 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 未去重版本 整体思路:先排序再双指针遍…...
Java项目之基于ssm的个性化旅游攻略定制系统(源码+文档)
项目简介 个性化旅游攻略定制系统实现了以下功能: 个性化旅游攻略定制系统能够实现对用户上传信息,旅游路线信息,景点项目信息,景点信息,标签分类信息等信息的管理。 💕💕作者:落落…...
链表和数组的效率
访问元素 • 数组:通过索引直接访问元素,时间复杂度为O(1),速度很快。例如arr[5]可以立即访问到数组arr中索引为5的元素。 • 链表:需要从链表头开始逐个遍历节点,直到找到目标元素,平均时间复杂度为O(n)…...
经典回溯问题———组合的输出
题目如下 思路 代码如下...
WPS宏开发手册——附录
目录 系列文章7、附录 系列文章 使用、工程、模块介绍 JSA语法 JSA语法练习题 Excel常用Api Excel实战 常见问题 附录 7、附录 颜色序列:在excel中设置颜色,只能设置颜色序号,不能直接设置rgb颜色 1、黑色 (Black)…...
【leetcode100】买卖股票的最佳时机
1、题目描述 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你…...
uniapp小程序登录失效后操作失灵问题
一开始我在请求返回失效验证时做了登录失效处理然后用uni.switchTab跳转主页的逻辑,结果发现在一天后重新打开小程序或者其他登录挤掉登录验证时有概率导致整个页面失灵无法操作。 经过排查发现,在小程序跳转新页面的时候如果遇到**(过快还是过多&#…...
找树左下角的值(DFS 深度优先搜索)| LeetCode 513
✨ 题目描述 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 提示: 二叉树中至少有一个节点。 📄 示例 示例 1 输入: root [2,1,3] 输出: 1示例 2 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7ǵ…...
【力扣hot100题】(060)分割回文串
每次需要判断回文串,这点比之前几题回溯题目复杂一些。 还有我怎么又多写了循环…… class Solution { public:vector<vector<string>> result;string s;bool palindromic(string s){for(int i0;i<s.size()/2;i) if(s[i]!s[s.size()-1-i]) return …...
中国钧瓷收藏市场现状和风险警示
一、数据权威性与综合维度 本榜单由钧瓷联合体、钧瓷频道及钧瓷数据库三方协同制作,通过10项规则综合评估匠人影响力,涵盖知名度、用户评价、平台指数等多元维度,避免单一指标(如拍卖价格)的片面性。榜单每月更新&…...
forms实现任务文档功能
说明: forms实现任务文档功能 效果图: step1:C:\Users\wangrusheng\RiderProjects\WinFormsApp26\WinFormsApp26\Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.IO; u…...
字符串的replace、replaceAll、split()方法
参考 字符串的replace、replaceAll、split()方法_字符串replace-CSDN博客...
Kotlin语言进阶:协程、Flow、Channel详解(二)
Kotlin语言进阶:协程、Flow、Channel详解(二) 一、Flow基础 1.1 什么是Flow Flow是Kotlin提供的用于处理异步数据流的解决方案,它建立在协程之上,具有以下特点: 冷流特性:只有在收集时才会开始发射数据背压处理:自动处理生产者和消费者速度不匹配的问题组合操作:提…...
VBA知识学习
文章目录 打开开发工具编写第一个VBA使用VBA调试器 VBA语法 打开开发工具 文件->选项->自定义功能区->开发工具 编写第一个VBA 点击开发工具 ->点击Visual Basic 选择sheet1->右键->插入->模块 Sub 第一个VBA程序()MsgBox "Hello World!&quo…...
JAVA EE_多线程-初阶(二)
1.线程安全 1.1.观察线程不安全 实例: package thread; public class text18 {//定义一个成员变量count,初始值为0private static int count0;public static void main(String[] args) throws InterruptedException {Thread t1new Thread(()->{for(int i0;i&l…...
【Linux】进程预备知识——冯诺依曼、操作系统
目录: 一、冯诺依曼体系结构 (一)什么是冯诺依曼 (二)为什么需要冯诺依曼 (三)冯诺依曼如何操作 二、操作系统概念 (一)对下硬件管理 (二)…...
Java入门首周精要:从基础语法到面向对象核心解析
文章目录 Java入门首周精要:从基础语法到面向对象核心解析1.Java类名与文件名的一致性规则2.Java和C语言中char类型的区别3.Java中的注释4.Java中的‘’‘’运算符5.Java的输入输出6.方法(重载&重写)方法的重载方法的重写 7.面向对象&…...
嵌入式AI开源生态指南:从框架到应用的全面解析
嵌入式AI开源生态指南:从框架到应用的全面解析 引言 随着人工智能技术的迅速发展,将AI能力部署到边缘设备上的需求日益增长。嵌入式AI通过在资源受限的微控制器上运行机器学习模型,实现了无需云连接的本地智能处理,大幅降低了延…...
MCP server的stdio和SSE分别是什么?
文章目录 一、Stdio:本地进程间通信的核心二、SSE:远程通信与实时推送的利器三、Stdio vs SSE:关键差异对比四、如何选择?场景驱动的决策指南五、实战建议与避坑指南实际操作结语在AI应用开发中,MCP(Model Context Protocol)协议正成为连接大模型与外部资源的核心桥梁。…...
哈希表(闭散列)的实现
目录 概念及定义 闭散列的介绍 闭散列底层实现 哈希表的定义 哈希表的构造 哈希表扩容 哈希表插入 哈希表删除 哈希表查找 概念及定义 哈希表,也成为散列表,在C中unordered_set和unordered_map的底层实现依靠的都是哈希表。 map和set的底层是红…...
Shiro学习(六):Shiro整合CAS实现单点登录
一、单点登录介绍 单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。 SSO的定义是在多个[应用],用户只需要登录一次就可以访问所有相互信任的应用系统。 一般这种单点登录的实现方案&…...
HAProxy-ACL实战篇
HAProxy-ACL实战篇 IP说明172.25.254.101客户端172.25.254.102haproxy服务器172.25.254.103web1172.25.254.104web2 ACL示例-域名匹配 # 172.25.254.102 [rootRocky ~]# cat /etc/haproxy/conf.d/test.cfg frontend magedu_http_portbind 172.25.254.102:80mode httpbalanc…...
以下是针对该 Ansible 任务的格式检查和优化建议
以下是针对该 Ansible 任务的格式检查和优化建议: 目录 一、格式检查原始代码问题分析修正后的标准格式 二、推荐增强功能1. 添加可执行权限2. 显式指定 Shell 解释器3. 添加错误处理 三、完整 Playbook 示例四、验证脚本兼容性五、常见错误总结 一、格式检查 原始…...
C++语言的测试覆盖率
C语言的测试覆盖率分析与实践 引言 在软件开发过程中,测试覆盖率是一项重要的质量指标,它帮助开发者评估代码的测试效果,确保软件的可靠性与稳定性。尤其在C语言的开发中,由于其复杂的特性和丰富的功能,测试覆盖率的…...
如何使用 DrissionPage 进行网页自动化和爬取
在这个技术博客中,我们将向大家展示如何使用 DrissionPage 进行网页自动化操作与数据爬取。DrissionPage 是一个基于 Playwright 的 Python 自动化工具,它允许我们轻松地控制浏览器进行网页爬取、测试以及自动化操作。与其他工具(如 Selenium…...
设计模式 Day 3:抽象工厂模式(Abstract Factory Pattern)详解
经过前两天的学习,我们已经掌握了单例模式与工厂方法模式,理解了如何控制实例个数与如何通过子类封装对象的创建逻辑。 今天,我们将进一步深入“工厂”体系,学习抽象工厂模式(Abstract Factory Pattern)&a…...
TensorRT 有什么特殊之处
一、TensorRT的定义与核心功能 TensorRT是NVIDIA推出的高性能深度学习推理优化器和运行时库,专注于将训练好的模型在GPU上实现低延迟、高吞吐量的部署。其主要功能包括: 模型优化:通过算子融合(合并网络层)、消除冗余…...