JavaWeb酒店管理系统(详细版)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:前端案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:JavaWeb酒店管理系统(详细版)
文章目录
- 一、环境版本
- 1、数据库设计(MySQL 5.7):
- 2、后端开发(Java):
- 3、前端开发:
- 4、集成开发工具(Eclipse IDE for Java EE Developers):
- 二、数据库设计
- 1、新建数据库
- 2、建表
- 3、初始化数据
- 4、创建日志记录表
- 5、创建触发器
- 6、添加索引
- 7、存储过程
- 三、Web应用开发
- 1、创建JavaWeb项目
- 2、BaseDao单例模式
- 3、登录功能
- 3.1 登录页面
- 3.2 登录逻辑(使用Servlet处理登录请求)
- 4、展示信息
- 4.1 列表界面(使用JSP展示酒店列表)
- 4.2 列表逻辑(使用Servlet处理登录请求)
- 5、添加功能
- 5.1 添加页面(使用JSP编写)
- 5.2 添加逻辑(使用Servlet处理添加请求)
- 6、修改功能
- 6.1 修改页面(使用JSP编写)
- 6.2 修改逻辑(使用Servlet处理修改请求)
- 7、注释
- 四、示例输入和输出
一、环境版本
1、数据库设计(MySQL 5.7):
- 数据库包括三个表:HotelBrand(酒店品牌表)、HotelStar(酒店星级表)和Hotel(酒店表)。
- HotelBrand表存储酒店品牌信息,HotelStar表存储酒店星级信息,Hotel表存储具体酒店的信息。
- Hotel表中的BrandID和StarID分别作为外键,关联到HotelBrand表和HotelStar表中的对应主键。
2、后端开发(Java):
- 在后端开发中,您需要编写Java类来处理数据库操作,包括连接数据库、查询数据、插入数据等。
- 您可以使用JDBC来连接MySQL数据库,并编写SQL语句来执行数据库操作,如插入新酒店信息、查询特定品牌的酒店等。
3、前端开发:
- 在前端开发中,您可以根据数据库中的数据表结构设计合适的界面,展示酒店品牌、星级和具体酒店信息。
- 可以使用HTML、CSS和JavaScript来构建前端界面,通过后端提供的数据接口来动态展示数据。
4、集成开发工具(Eclipse IDE for Java EE Developers):
- 使用Eclipse IDE来编写和调试Java代码,同时集成Tomcat 9作为Web服务器来运行和测试您的Web应用程序。
- 您可以在Eclipse中创建Java Servlet来处理HTTP请求,并将数据库操作集成到Servlet中,实现与数据库的交互。
二、数据库设计
1、新建数据库
CREATE DATABASE HotelManagement;
2、建表
在数据库设计中,满足三大范式是非常重要的,可以确保数据库结构的合理性和数据的一致性。同时,使用约束可以帮助确保数据的完整性和准确性。下面我将详细阐述如何设计表满足三大范式,并使用主键约束和外键约束:
- 第一范式(1NF):
- 确保每个列都是原子的,不可再分。在建表时,确保每个字段都是不可再分的最小数据单元,不包含重复的数据。
- 例如,在酒店表(Hotel)中,每个字段应该是原子的,如Name字段只存储酒店名称,Price字段只存储价格。
- 第二范式(2NF):
- 确保表中的非主键列完全依赖于主键,而不是部分依赖。如果有部分依赖的情况,需要将其拆分成单独的表。
- 在建表时,将数据分解成多个表,确保每个表中的非主键列都完全依赖于主键。
- 例如,在酒店表(Hotel)中,BrandID和StarID应该完全依赖于HotelID,如果存在部分依赖的情况,需要进行拆分。
- 第三范式(3NF):
- 确保表中的非主键列之间没有传递依赖关系,即不存在传递依赖。如果存在传递依赖,需要进一步拆分表。
- 在建表时,确保每个非主键列都直接依赖于主键,而不是依赖于其他非主键列。
- 例如,在酒店表(Hotel)中,如果存在非主键列之间的传递依赖,需要将其拆分成独立的表以消除这种依赖关系。
- 约束使用:
- 主键约束:在每个表中定义一个主键,用于唯一标识每条记录。主键可以确保表中的每条记录都具有唯一性。
- 外键约束:在表之间建立关联时,使用外键约束来确保参照完整性。外键约束可以确保在一个表中的外键值必须在另一个表的主键中存在。
- 在您的数据库设计中,可以使用主键约束来定义主键字段(如HotelID、BrandID、StarID),并使用外键约束来建立表之间的关联关系(如Hotel表中的BrandID和StarID与HotelBrand表和HotelStar表中的对应主键关联)。
通过满足三大范式和使用主键约束、外键约束,您可以设计出结构合理、数据完整的数据库表,确保数据的一致性和准确性。
酒店表(Hotel)
CREATE TABLE HotelBrand (BrandID INT PRIMARY KEY AUTO_INCREMENT,BrandName VARCHAR(255) NOT NULL
);
酒店星级表(HotelStar)
CREATE TABLE HotelStar (StarID INT PRIMARY KEY,StarLevel INT NOT NULL
);
酒店品牌表(HotelBrand)
CREATE TABLE Hotel (HotelID INT PRIMARY KEY AUTO_INCREMENT,BrandID INT,StarID INT,Name VARCHAR(255) NOT NULL,Price DECIMAL(10, 2),FOREIGN KEY (BrandID) REFERENCES HotelBrand(BrandID),FOREIGN KEY (StarID) REFERENCES HotelStar(StarID)
);
3、初始化数据
批量插入酒店数据
INSERT INTO Hotel (BrandID, StarID, Name, Price) VALUES
(1, 5, '五星级酒店A', 1200.00),
(2, 4, '四星级酒店B', 800.00),
(1, 5, '五星级酒店C', 1500.00),
(3, 3, '三星级酒店D', 500.00),
(2, 4, '四星级酒店E', 750.00);
4、创建日志记录表
CREATE TABLE OperationLog (LogID INT PRIMARY KEY AUTO_INCREMENT,UserID INT,OperationType VARCHAR(50),OperationTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (UserID) REFERENCES Hotel (HotelID)
);
5、创建触发器
DELIMITER //
CREATE TRIGGER AfterHotelUpdate
AFTER UPDATE ON Hotel
FOR EACH ROW
BEGININSERT INTO OperationLog (UserID, OperationType)VALUES (NEW.HotelID, CONCAT('Updated: ', NEW.Name));
END;
//
DELIMITER ;
6、添加索引
CREATE INDEX idx_hotel_name ON Hotel (Name) USING BTREE;
7、存储过程
DELIMITER //
CREATE PROCEDURE AddHotel(IN brandID INT, IN starID INT, IN name VARCHAR(255), IN price DECIMAL(10, 2))
BEGININSERT INTO Hotel (BrandID, StarID, Name, Price) VALUES (brandID, starID, name, price);
END;
//
DELIMITER ;
三、Web应用开发
1、创建JavaWeb项目
在创建JavaWeb项目并导入相关JAR包时,您需要遵循一系列步骤来确保项目的顺利开发和运行。下面我将详细阐述如何创建JavaWeb项目并导入常用的JAR包(如Servlet、JDBC、JSTL等):
- 创建JavaWeb项目:
- 打开Eclipse IDE,选择“File” -> “New” -> “Dynamic Web Project”来创建一个新的JavaWeb项目。
- 输入项目名称和选择合适的目标运行时环境(如Apache Tomcat 9),然后点击“Finish”来创建项目。
- 导入相关JAR包:
- Servlet JAR包:Servlet是用于处理HTTP请求和生成动态内容的Java类。您可以在Apache官网下载Servlet API的JAR包(如servlet-api.jar)。
- 将下载的Servlet JAR包复制到项目的WebContent/WEB-INF/lib目录下。
- JDBC JAR包:JDBC用于连接数据库并执行SQL操作。您可以在MySQL官网下载MySQL Connector/J的JAR包。
- 将下载的JDBC JAR包也复制到项目的WebContent/WEB-INF/lib目录下。
- JSTL JAR包:JSTL(JavaServer Pages Standard Tag Library)是用于在JSP页面中编写更简洁的代码的标签库。您可以在Apache标准标签库的官网下载JSTL的JAR包。
- 同样,将下载的JSTL JAR包复制到项目的WebContent/WEB-INF/lib目录下。
- 配置项目构建路径:
- 在Eclipse中右键单击项目,选择“Properties” -> “Java Build Path” -> “Libraries”选项卡。
- 点击“Add JARs”按钮,选择刚刚导入的JAR包,以将它们添加到项目的构建路径中。
- 编写代码:
- 开发Servlet类来处理HTTP请求和与数据库交互。
- 编写JSP页面来生成动态内容并展示数据。
- 部署和运行项目:
- 将项目部署到Tomcat服务器上,启动Tomcat服务器并访问项目的URL来查看Web应用程序运行情况。
2、BaseDao单例模式
public class BaseDao {private static BaseDao instance;private Connection conn;private BaseDao() {// 初始化数据库连接}public static synchronized BaseDao getInstance() {if (instance == null) {instance = new BaseDao();}return instance;}public Connection getConnection() {return conn;}
}
3、登录功能
3.1 登录页面
<!DOCTYPE html>
<html>
<head><title>登录页面</title>
</head>
<body><h2>用户登录</h2><%-- 显示错误信息 --%><c:if test="${not empty error}"><p style="color: red;">${error}</p></c:if><form action="login" method="post"><label for="username">用户名:</label><input type="text" id="username" name="username" required><br><br><label for="password">密码:</label><input type="password" id="password" name="password" required><br><br><input type="submit" value="登录"></form>
</body>
</html>
在上面的代码中,我添加了一个用于显示错误信息的部分,并使用JSTL标签库来实现。具体优化包括:
- <c:if> 标签用于判断是否存在错误信息,如果存在则显示红色的错误提示。
- ${error} 用于显示具体的错误信息,这个信息是在Servlet中设置的。
- 表单的 action 属性指向了Servlet的URL,确保提交表单时数据发送到正确的地方。
3.2 登录逻辑(使用Servlet处理登录请求)
@WebServlet("/login")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");// 验证用户名和密码if (validateUser(username, password)) {request.getSession().setAttribute("username", username);response.sendRedirect("hotelList.jsp");} else {request.setAttribute("error", "用户名不存在/密码错误");request.getRequestDispatcher("login.jsp").forward(request, response);}}private boolean validateUser(String username, String password) {// 这里添加验证逻辑return true;}
}
4、展示信息
4.1 列表界面(使用JSP展示酒店列表)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>酒店列表</title>
</head>
<body><h2>酒店列表</h2><table border="1"><tr><th>酒店名称</th><th>价格</th><th>星级</th></tr><c:forEach var="hotel" items="${hotels}"><tr><td>${hotel.name}</td><td>${hotel.price}</td><td>${hotel.starLevel}</td></tr></c:forEach></table>
</body>
</html>
在上面的代码中:
- 使用
<c:forEach> 标签
遍历名为 hotels 的列表,该列表包含要展示的酒店信息。 ${hotel.name}、${hotel.price} 和 ${hotel.starLevel}
分别显示每个酒店的名称、价格和星级。- 通过在
Servlet中将酒店信息存储在 hotels 属性
中,并将其传递到该JSP页面,以便在页面上动态展示酒店列表信息。
4.2 列表逻辑(使用Servlet处理登录请求)
@WebServlet("/hotelList")
public class HotelListServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 模拟从数据库中获取酒店列表数据List<Hotel> hotels = getHotelListFromDatabase();// 将酒店列表数据存储在request属性中request.setAttribute("hotels", hotels);// 转发到展示酒店列表的JSP页面RequestDispatcher dispatcher = request.getRequestDispatcher("hotelList.jsp");dispatcher.forward(request, response);}private List<Hotel> getHotelListFromDatabase() {// 模拟从数据库中获取酒店列表数据的逻辑List<Hotel> hotels = new ArrayList<>();hotels.add(new Hotel("Hotel A", 100, "5-star"));hotels.add(new Hotel("Hotel B", 80, "4-star"));hotels.add(new Hotel("Hotel C", 120, "5-star"));return hotels;}
}
5、添加功能
5.1 添加页面(使用JSP编写)
<!DOCTYPE html>
<html>
<head><title>添加酒店信息</title>
</head>
<body><h2>添加酒店信息</h2><form action="addHotel" method="post"><label for="name">酒店名称:</label><input type="text" id="name" name="name" required><br><br><label for="price">价格:</label><input type="text" id="price" name="price" required><br><br><label for="starLevel">星级:</label><input type="text" id="starLevel" name="starLevel" required><br><br><input type="submit" value="添加"></form>
</body>
</html>
5.2 添加逻辑(使用Servlet处理添加请求)
@WebServlet("/addHotel")
public class AddHotelServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("name");int price = Integer.parseInt(request.getParameter("price"));String starLevel = request.getParameter("starLevel");// 在实际应用中,这里可以将酒店信息保存到数据库中// 重定向到酒店列表页面response.sendRedirect("hotelList");}
}
在上面的代码中:
- addHotel.jsp 页面包含一个表单,用户可以输入酒店名称、价格和星级信息。
- AddHotelServlet Servlet 接收表单提交的数据,将酒店信息保存到数据库(在实际应用中),然后重定向到展示酒店列表的页面。
6、修改功能
6.1 修改页面(使用JSP编写)
<!DOCTYPE html>
<html>
<head><title>修改酒店信息</title>
</head>
<body><h2>修改酒店信息</h2><form action="editHotel" method="post"><label for="name">酒店名称:</label><input type="text" id="name" name="name" value="${hotel.name}" required><br><br><label for="price">价格:</label><input type="text" id="price" name="price" value="${hotel.price}" required><br><br><label for="starLevel">星级:</label><input type="text" id="starLevel" name="starLevel" value="${hotel.starLevel}" required><br><br><input type="hidden" name="hotelId" value="${hotel.id}"><input type="submit" value="修改"></form>
</body>
</html>
6.2 修改逻辑(使用Servlet处理修改请求)
@WebServlet("/editHotel")
public class EditHotelServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {int hotelId = Integer.parseInt(request.getParameter("hotelId"));String name = request.getParameter("name");int price = Integer.parseInt(request.getParameter("price"));String starLevel = request.getParameter("starLevel");// 在实际应用中,根据hotelId更新数据库中对应的酒店信息// 重定向到酒店列表页面response.sendRedirect("hotelList");}
}
在上面的代码中:
- editHotel.jsp 页面包含一个表单,显示当前酒店信息并允许用户修改。
- EditHotelServlet Servlet 接收表单提交的数据,根据酒店ID更新数据库中对应的酒店信息,然后重定向到展示酒店列表的页面。
7、注释
在类和方法以及重要代码中添加注释。
当为Java类和方法添加注释时,通常遵循以下几个原则:
- 在类的顶部添加类级注释,描述类的作用、功能和重要信息。
- 在方法的前面添加方法级注释,描述方法的作用、参数、返回值和可能的异常。
- 在重要的代码块或逻辑部分添加行级注释,解释代码的目的和实现细节。
以下是一个示例,展示如何为类和方法添加注释:
@WebServlet("/editHotel")
public class EditHotelServlet extends HttpServlet {/*** 处理POST请求,用于修改酒店信息* @param request HTTP请求对象* @param response HTTP响应对象* @throws ServletException Servlet异常* @throws IOException IO异常*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获取表单提交的数据int hotelId = Integer.parseInt(request.getParameter("hotelId"));String name = request.getParameter("name");int price = Integer.parseInt(request.getParameter("price"));String starLevel = request.getParameter("starLevel");// 在实际应用中,根据hotelId更新数据库中对应的酒店信息// 重定向到酒店列表页面response.sendRedirect("hotelList");}
}
在上面的代码中,我们为 EditHotelServlet 类添加了类级注释,描述了类的作用。同时,在 doPost() 方法前添加了方法级注释,描述了方法的作用和参数。在代码中也添加了行级注释,解释了关键代码块的作用。
四、示例输入和输出
示例输入:
- 用户名:example_user
- 密码:example_password
示例输出:
- 如果输入的用户名和密码与系统中的匹配:
- 登录成功,跳转到酒店列表页面。
- 如果输入的用户名或密码不匹配:
- 登录失败,显示错误信息,例如:“用户名不存在/密码错误”。
码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。
相关文章:

JavaWeb酒店管理系统(详细版)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

C++ | 定长内存池 | 对象池
文章目录 C | 定长内存池 | 对象池一、内存池的引入二、代码中的内存池实现 - ObjectPool类(一)整体结构(二)内存分配 - New函数(三)内存回收 - Delete函数 三、内存池在TreeNode示例中的性能测试演示四、脱…...

python画图|自制渐变柱状图
在前述学习过程中,我们已经通过官网学习了如何绘制渐变的柱状图及其背景。 掌握一门技能的最佳检验方式就是通过实战,因此,本文尝试做一些渐变设计。 前述学习记录可查看链接: Python画图|渐变背景-CSDN博客 【1】柱状图渐变 …...

基于RPA+BERT的文档辅助“悦读”系统 | OPENAIGC开发者大赛高校组AI创作力奖
在第二届拯救者杯OPENAIGC开发者大赛中,涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到,我们特意开设了优秀作品报道专栏,旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者,希望能带给…...

K8S部署流程
一、war打包镜像(survey,analytics,trac系统) 代码打包成war准备tomcat的server.xml文件,修改connector中8080端口为项目的端口 修改前: <Connector port"8080" protocol"HTTP/1.1"connectionTimeout"20000"redirect…...

DevExpress WinForms中文教程:Data Grid - 如何添加或删除行?
本教程介绍DevExpress WinForm的Data Grid控件UI元素和API,它们使您和最终用户能够添加或删除数据行。您将首选学习如何启用内置的数据导航器,然后学习如何使用Microsoft Outlook启发的New Item行添加新记录。最后教程将向您展示基本的API,它…...

u盘格式化后数据能恢复吗?2024年Top4恢复神器来帮忙
在这个电脑和手机满天飞的时代,U盘是我们用来存东西和传文件的得力助手,特别重要。但是,有时候U盘可能会不小心被格式化了,里面的重要文件就不见了。那么,U盘格式化后的数据还能恢复吗?当然可以。今天会告诉…...
深度学习·Argparse
Argparse 命令行选项、参数和子命令解析器 ArgumentParser 命令行传参数->解析参数->获得对应参数 初始化:parser argparse.ArgumentParser(descriptionxxx)添加命令行参数: parser.add_argument("--training_filepath", typestr, he…...

制造企业为何需要PLM系统?PLM系统解决方案对制造业重要性分析
制造企业为何需要PLM系统?PLM系统解决方案对制造业重要性分析 新华社9月23日消息,据全国组织机构统一社会信用代码数据服务中心统计,我国制造业企业总量突破600万家。数据显示,2024年1至8月,我国制造业企业数量呈现稳…...

http协议中的header详细讲解
http协议中的header详细讲解 HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同,用于客户端和服务器之间的通信。 请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端。 HTTP 协议规定,请求从客户端发出…...
探索后量子安全:基于格加密技术的未来密码学展望
在信息技术日新月异的今天,量子计算作为下一代计算技术的代表,正逐步从理论走向实践。量子计算的出现对现有的加密体系构成了严重威胁,尤其是基于大数分解和离散对数难题的传统密码学(如RSA和Diffie-Hellman协议)。为了…...
WPF之UI进阶--完整了解wpf的控件和布局容器及应用
前面三篇有关WPF的基础介绍,分别介绍了wpf与winform的异同,wpf的事件生成和使用以及数据绑定。但我们还缺乏一副好的“皮囊”,所以从这篇开始我们来开始学习wpf的UI相关的内容,首当其冲的就是布局容器。 其实我们知道,…...

unity一键注释日志和反注释日志
开发背景:游戏中日志也是很大的开销,虽然有些日志不打印但是毕竟有字符串的开销,甚至有字符串拼接的开销,有些还有装箱和拆箱的开销,比如Debug.Log(1) 这种 因此需要注释掉,当然还需要提供反注释的功能&am…...

VBA数据库解决方案第十五讲:Recordset集合中单个数据的精确处理
《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…...

甄选范文“论软件需求管理”,软考高级论文,系统架构设计师论文
论文真题 软件需求管理是一个对系统需求变更了解和控制的过程。需求管理过程与需求开发过程相互关联,初始需求导出的同时就要形成需求管理规划,一旦启动了软件开发过程,需求管理活动就紧密相伴。 需求管理过程中主要包含变更控制、版本控制、需求跟踪和需求状态跟踪等4项活…...

Android Studio Dolphin 中Gradle下载慢的解决方法
我用的版本Android Studio Dolphin | 2021.3.1 Patch 1 1.Gradle自身的版本下载慢 解决办法:修改gradle\wrapper\gradle-wrapper.properties中的distributionUrl 将https\://services.gradle.org/distributions为https\://mirrors.cloud.tencent.com/gradle dis…...

Excel实现省-市-区/县级联
数据准备 准备省份-城市映射数据,如下: 新建sheet页,命名为:省-市数据源,然后准备数据,如下所示: 准备城市-区|县映射数据,如下: 新建sheet页,命名为&#x…...
【优化代码结构】函数的参数归一化
某些封装的函数,其参数具有多样性,会导致函数中会增加非常多的分支,比如下面这个 format 函数有如下几种参数方式,其中 formatter 会有很多种情况 date:日期对象formatter: ‘date’:格式化日期…...
CSS中height设置100vh和100%的区别
文章目录 CSS中height设置100vh和100%的区别一、引言二、高度设置的区别1、100%1.1、父元素高度固定1.2、父元素高度未定义 2、100vh2.1、视口高度2.2、不受父元素限制 三、总结 CSS中height设置100vh和100%的区别 一、引言 在前端开发中,我们经常需要设置元素的高…...

红米k60至尊版工程固件 MTK芯片 资源预览 刷写说明 与nv损坏修复去除电阻图示
红米k60至尊版机型代码为:corot。 搭载了联发科天玑9200+处理器。此固件mtk引导为MT6985。博文将简单说明此固件的一些特点与刷写注意事项。对于NV损坏的机型。展示修改校验电阻的图示。方便改写参数等 通过博文了解 1💝💝💝-----此机型工程固件的资源刷写注意事项 2…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...