JavaWeb基础(计网 socket 数据库 JDBC lombok Mybatis JUnit Maven)
本文用于检验学习效果,忘记知识就去文末的链接复习
1. 网络基础
1.1 计网基础
区分设备:IP地址
区分网络:网络地址
网络互联:路由器
主机上进程间通信:端口
http是常用的协议,基于TCP协议
TCP VS UDP
- TCP
- 有连接(握手,建立连接)
- UDP
- 无连接(不建立连接),快(数据丢失不会重传)
1.2 Socket技术
Socket有什么用?
- 可实现 两台计算机上进程 之间的通信(通过网络)
复习
- Java创建Socket对象和Server对象
- Socket通信过程(协议,域名,端口)
- 用Socket传输数据(字节,字符)
- Socket传输文件(字节)
- Socket访问浏览器(接收数据是一堆字符,有格式)
2. 数据库基础
什么是数据库?
- 数据的有序集合。数据放在数据表中,便于管理数据。
常见数据库
- MySQL
- Microsoft SQL Server
- Oracle
常见数据库管理软件
- Navicat
- DataGrip
常见配置
- 字符集(支持中文):utf8mb4(utf8只有3字节,有时会出问题)
- 排序规则:utf8mb4_general-ci
2.1 安装一个数据库
一般用MySQL学习
- 本地安装(下载安装包,在本地安装)
- 服务器安装(在服务器上安装MySQL,宝塔面板等,可通过公网IP访问)
- 在线购买(在阿里云,腾讯云上购买云数据库产品)
2.2 数据模型
- 实体-联系模型(Entity-Relationship Model)(E-R MODEL)
- ER图(E-R Diagram)
实体
- 属性
联系
- 1:1
- n:1
- n:m
2.3数据库的规范化
键
- 主键
- 外键
范式(具体定义看书)
(逐层递进,减少数据库间的冗余信息和依赖关系)
- 第一范式(1NF):每一列都不可拆分
- 如:“信息”这个列太模糊,可继续细分
- 第二范式(2NF):表中必须有主键,其他属性完全依赖主键
- 如:“学号”作为主键
- 第三范式(3NF):所有属性不传递依赖于主键
- 处理:分表,消除传递依赖
- BCNF: 每个表只存储一种信息,没有任何冗余信息
2.4 SQL语句
增查改删CRUD(Create/Retrive/Update/Delete)
SQL数据类型
char(n):可存储固定长度为n的字符串
varchar(n):可存储任意数量字符串
存储数字
- smallint
- int
- bigint
- float
- double
存储时间
- date:日期
- time:时间
- year:年份
- datetime:日期+时间
2.4.1 数据库定义语言(Data Definition Language,DDL)
--创建数据库
CREATE DATABASE 数据库名
--删除数据库
DROP DATABASE 数据库名
--创建表
CREATE TABLE
--修改表
ALTER TABLE
--删除表
DROP TABLE
创建数据库study
CREATE DATABASE study;
删除数据库study
DROP DATABASE study;
创建一张表
CREATE TABLE students ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT
);
查询数据
查看USER表中的tHost,tUSer列
SELECT tHost,tUSer FROM USER;
修改数据
alter
如果你有一个名为 students 的表,并且你想在这个表中添加一个名为 age 的整数列,你可以使用以下命令:
ALTER TABLE students
ADD age INT;
CONSTRAINT
列级约束条件
- 主键Primary Key
- 外键Foreign Key
- 唯一unique
- 检查check
- 默认default
- 非空/空not null/null
表级约束条件
- 主键Primary Key
- 外键Foreign Key
- 唯一unique
- 检查check
2.4.2 数据操纵语言(Data Manipulation Language,DML)
--插入数据
INSERT INTO
--修改数据
UPDATE 表名 SET 列名=值,... WHERE 条件
--删除数据
DELETE FROM 表名
DELETE FROM 表名 WHERE 条件
2.4.3 数据库查询语言(Data Query Language,DQL)
-- 指定查询某一列数据
SELECT 列名[,列名] FROM 表名
-- 会以别名显示此列
SELECT 列名 别名 FROM 表名
-- 查询所有的列数据
SELECT * FROM 表名
-- 只查询不重复的值
SELECT DISTINCT 列名 FROM 表名
--添加where字句来限定查询目标
SELECT * FROM 表名 WHERE 条件
--将查询结果排序SELECT * FROM 表名 WHERE 条件 ORDER BY 列名 ASC|DESC
常用查询条件(WHERE中使用)
- =,>,<,>=,<=,!=
- 是否在集合中:
in
,not in
- 模糊匹配:
like
,not like
- 多重连接:
and
,or
,not
排序(默认升序)
- ASC:升序
- DESC:降序
聚集函数
count([distinct]*)
统计所有的行数(distinct表示去重)count([distinct]列名)
统计某列的值总和sum([distinct]列名)
求一列的和(注意必须是数字类型的)avg([distinct]列名)
求一列的平均值(注意必须是数字类型)max([distinct]列名)
求一列的最大值min([distinct]列名)
求一列的最小值
分组/分页查询
- 分组:
GROUP BY
- 分页:
HAVING
- 限制数量:
LIMIT
--分组
SELECT sum(*) FROM 表名 WHERE 条件 GROUP BY 列名
--分页
SELECT sum(*) FROM 表名 WHERE 条件 GROUP BY 列名 HAVING 约束条件
--限制查询的数量,只取前n个结果
SELECT * FROM 表名 LIMIT 数量
多表查询
--默认笛卡尔积
SELECT * FROM 表1, 表2
SELECT * FROM 表1, 表2 WHERE 条件
--自身连接,要起别名
SELECT * FROM 表名 别名1, 表名 别名2
连接
- 外连接
- 内连接
inner join
:交集 - 左连接
left join
:左边都要有,右边缺失值为空 - 右连接
right join
嵌套查询
将一个查询的结果作为另一个查询的条件
SELECT * FROM 表名 WHERE 列名 = (SELECT 列名 FROM 表名 WHERE 条件)
2.4.4 数据库控制语言(Database Control Language,DCL)
--创建用户
CREATE USER 用户名 identified by 密码;
--登录
login -u 用户名 -p
--授权(授权后才可看数据库)
grant all|权限1,权限2...(列1,...) on 数据库.表 to 用户 [with grant option]--创建视图
CREATE VIEW 视图名称(列名) as 子查询语句 [WITH CHECK OPTION];
--删除视图
drop view apptest-- 创建索引
CREATE INDEX 索引名称 ON 表名 (列名)
-- 查看表中的索引
show INDEX FROM student
--删除索引
drop index 索引名称 on 表名--创建触发器
CREATE TRIGGER 触发器名称 [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON 表名/视图名 FOR EACH ROW DELETE FROM student WHERE student.sno = new.sno
--查看触发器
SHOW TRIGGERS
--删除触发器
DROP TRIGGER 触发器名称--查看数据库引擎
SHOW ENGINES;begin; #开始事务
...
rollback; #回滚事务
savepoint 回滚点; #添加回滚点
rollback to 回滚点; #回滚到指定回滚点
...
commit; #提交事务
-- 一旦提交,就无法再进行回滚了!
视图(本质就是一个查询结果)
- 打开视图时,可看到期待的查询结果。
- 是个虚表,不是真实存在的表
索引(快速查询)
- 类似Hash表,可快速定位元素的位置
触发器
- 在某种条件下会自动触发,在
select
/update
/delete
时,会自动执行我们预先设定的内容,触发器通常用于检查内容的安全性,相比直接添加约束,触发器显得更加灵活。 - 触发器所依附的表称为基本表
- new表/old表
事务
- 把一系列SQL操作整理起来,变成一个整体
- ACID特性
- 原子性
- 一致性
- 隔离性
- 持久性
函数&存储过程
- 它们能够捆绑一组SQL语句运行,并且可以反复使用,大大提高工作效率。
3. java与数据库
3.1 JDBC(Java Data Base Connectivity)
- 用java连接数据库,操作数据库
- 定义了接口(规范),接口由数据库实现
- 使用步骤
- 导入依赖(jar包)
- 用JDBC连接数据库
- 操作数据库
JDBC中一些类
- Driver Manager
- Connection
- Statement:用于执行SQL
操作
- DML操作
- DQL操作
批处理(statement.addBatch())
查询结果映射对象
- 把查询结果传进构造函数
- 反射
SQL注入攻击
- 用户在输入数据时,破坏原有的SQL语句,恶意操作数据库
- 可限制用户输入一些SQL语句关键字,但关键字太多,这方法不太好
- 用
PrepareStatement
执行SQL命令,可解决以上问题- 需要给出SQL语句格式
管理事务
con.setAutoCommit(); //关闭自动提交后相当于开启事务。
// 这里是SQL语句
con.commit();或 con.rollback();
3.2 Lombok
- 自动生成set/get/构造函数
- 编译时处理代码(修改语法树),加上函数
使用方法
- 导入jar包(将jar文件拖入idea,右键-添加为项目)
- 在IDEA中下载插件
标签
- java中的goto
lombok注解
- 减少样板代码,使得 Java 类更加清晰和简洁。
- 在类前加注解,在 方法/属性 前加注解
- 可定义访问权限
- AccessLevel.PUBLIC
- AccessLevel.PRIVATE
- @Setter
- @Getter
- @ToString
- exclude:省略一些内容
- of:留下一些内容(与exclude相反的)
- callsuper:toString中调用父类的toString方法
- 调用get方法,获取属性
- doNotUseGetters:不用get方法,直接用属性
- onlyExplicitlyIncluded:是否包含全部字段
- @ToString.Include:指定要包含的字段
- rank:越大,等级越高
- name:别名
- @EqualsAndHashCode
- @AllArgsConstructor:有所有参数的构造函数
- staticName:静态函数,返回一个对象
- force:给final类型变量一个默认值
- @NoArgsConstructor:无参数的构造函数
- @RequiredArgsConstructor:只构造需要构造的属性
- final类型变量
- @Data
- 包含@Setter,@Getter,@RequiredArgsConstructor,@ToString,@EqualsAndHashCode
- 不建议有继承关系,因为equal方法结果可能与预期不符
- @Value
- 不会生成setter,成员属性都是final的
- @SneakyThrows:自动生成try-catch代码块
- Exception.class
- IOException.class
- @Cleanup:自动调用close(如IO流,用完要close)
- @Builder:快速生成建造者模式
- @Builder.Default:指定默认值
- @Builder.ObtainVia:指定默认值的获取方式
- setterPrefix:方法名前加前缀
- .Default:属性默认值
- .ObtainVia:在Builder过程中通过指定方法,指定属性值
- toBuilder:把对象变回Builder
getter中懒加载有什么用在编程中,lazy 属性或特性通常用于实现懒加载(lazy loading)模式。
懒加载意味着对象的某些属性或资源的初始化会延迟到它们真正被需要时才进行,而不是在对象创建时立即进行。
这种策略对于优化性能非常有用,特别是在处理计算密集型操作或需要消耗大量资源的操作时。在 getter 上下文中,lazy 属性可以确保当你第一次访问某个属性时,其背后的计算或初始化操作才会执行,
并且其结果会被缓存起来,以便后续访问时直接返回,而不需要重新计算或初始化。
3.3 Mybatis
JDBC还是不够好用,用Mybatis可更方便地操作数据库
知道什么是XML
- XML语法跟HTML很像。里面写的是配置
配置
- mybatis-config.xml
- TestMapper.xml
- pojo文件/entity文件中创建java类
- 写selectList
- 不够方便,怎么办?
- 用接口
xxxMapper.java
,与TestMapper.xml相关联
修改xml,切换数据库环境
数据源
别名
增删改查
- 读取到数据后,可映射为实体类或map
- 通过resultMap设定映射规则
- 通过constructor设定要调用的构造函数
自动映射:首字母小写,后面的驼峰
类中有多个构造方法【容易出问题】
- 只能有一个构造方法(有条件的,多了会出问题)
- 部分参数被构造方法使用,实体类没有被正确构建
按学号查找信息
- select * from student where sid = #{sid}
插入学生信息
- insert student(name,sex) values(#{name}, #{sex})
“一对多”
- resultMap
- collection
“多对一”
-resultMap
- association
事务
动态SQL
- if
- chooose(when, otherwise)
- trim(where, set)
- foreach
缓存机制
何时清空缓存?
- 插入操作后
- 会话结束后
缓存分级
- 优先级:二级----一级—数据库(cache—主存—硬盘)
- 一级缓存(对应session)
- 二级缓存(对应mapper)(需要启用)
解决缓存机制导致的不一致问题
- 关闭缓存(但存取数据时会有额外开销)
使用注解开发
- 在mybatis-config.xml中的< mappers >中注册
- 单独注册< mapper>
- 批量注册< packge >
- @select等
- @many/@one
- @ConstructorArgs
3.4 JUnit(单元测试)
测试某个小功能时,没必要重新启动整个项目
使用步骤
- 导入jar包
- 编写测试用例,加注解
- @Test
- 断言Assert.
- @Before:前置操作(@Test执行前,会执行这个)
- 有些前置操作只需要一次,怎么办?(juint5)
- @After
JUL日志系统(JDK提供的)
- 使用流程
- 获取日志打印器
- 调用info,输出信息
日志级别(高到低)
- SEVERE:严重错误
- WARNING:某些警告
- INFO:(默认)常规消息(该等级以下默认不会被打印)
- CONFIG
- FINE
- FINER
- FINEST
我们想:开发时输出所有日志,上线后正常输出日志
输出所有日志
- 修改日志级别
- 不使用默认日志处理器
- 使用自定义日志处理器
可以用文件处理器打印日志
可以添加过滤器,不让某些日志显示
了解Properties配置文件
- 常见操作
- Properties类
- properties.load
- properties.store
- hashtable VS hashmap
可用lombok快速开发日志
- @Log
Mybatis也有日志系统
- 启用
- 读取配置
4. Maven(管理项目)
Maven能管理jar包(手动导入太麻烦)
在IDEA中
- 创建maven项目
- 配置maven路径,
IDEA的设置中
- 设置默认maven配置,在
C:\Users\用户\AppData\Roaming\JetBrains\IntelliJIdea2023.3\options
如何导入jar包
- 在官网找到插入依赖的xml
- 插入到pom中
依赖属性
- type
- scope:依赖的作用域
- compile:编译,测试,运行时有效
- provided:编译,测试时有效(lombok)
- runtime:运行,测试时有效
- test:测试时有效(JUnit)
- optional
- exclusions
从本地找依赖
<dependencies> <dependency> <groupId>com.example</groupId> <artifactId>my-local-lib</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/lib/my-local-lib-1.0.jar</systemPath> </dependency>
</dependencies>
可选依赖
<optional>true</optional>
排除依赖
<exclusions><exclusion><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId></exclusion>
</exclusions>
依赖的继承关系
- 父项目中的
<dependencies>
,会被子项目直接继承 - 父项目中的
<dependencyManagement>
,在子项目中引入后,也可继承(不用写版本号) - 子项目间也可互相导入
maven常用命令
clean
:清除target中的文件validate
:验证项目的可用性compile
:编译项目install
:将当前项目安装到本地maven仓库(之后可被其他项目导入)verify
:按顺序执行默认生命周期阶段(validate,compile,package)test
:执行test目录下的所有测试用例package
:把项目打包为jar包(默认不含依赖)- pom中添加插件,可将依赖也一并打包
deploy
:发布命令到本地仓库和远程仓库site
:生成当前项目的发布站点
参考
https://www.itbaima.cn/document/ggwwj09j2vkfftvd
https://www.bilibili.com/video/BV1CL4y1i7qR
相关文章:
JavaWeb基础(计网 socket 数据库 JDBC lombok Mybatis JUnit Maven)
本文用于检验学习效果,忘记知识就去文末的链接复习 1. 网络基础 1.1 计网基础 区分设备:IP地址 区分网络:网络地址 网络互联:路由器 主机上进程间通信:端口 http是常用的协议,基于TCP协议 TCP VS U…...

【HBase】
什么是HBase HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据。 访问层次(数据…...
Vue3:使用Pinia存储、读取、修改数据
一、存储数据 Pinia插件中,存储数据的配置项是state count.ts import {defineStore} from piniaexport const useCountStore defineStore(count,{// 真正存储数据的地方state(){return {sum:6}} })loveTalk.ts import {defineStore} from piniaexport const use…...

基于 Quartz.NET 可视化任务调度平台 QuartzUI
一、简介 QuartzUI 是基于 Quartz.NET3.0 的定时任务 Web 可视化管理,Docker 打包开箱即用、内置 SQLite 持久化、语言无关、业务代码零污染、支持 RESTful 风格接口、傻瓜式配置、异常请求邮件通知等。 二、部署 QuartzUI 从 2022 年到现在没有提交记录…...

前端三剑客 —— CSS (第三节)
目录 上节回顾: 1.CSS使用有以下几种样式; 2.选择器 1.基本选择器 2.包含选择器 3.属性选择器 [] 4.伪类选择器 : 5.伪元素选择器 ::before :after 3.常见样式的使用 常见样式参考表 一些特殊样式 媒体查询 自定义字体 变换效果 translate&…...
C# 系统学习(异步编程)
在C#中,异步编程是一种优化程序性能的关键技术,特别是在处理I/O密集型操作(如网络请求、数据库查询、文件读写等)时,能够有效避免由于长时间等待而导致的线程阻塞,从而提高应用的响应速度和资源利用率。asy…...

前端工程师————CSS学习
选择器分类 选择器分为基础选择器和复合选择器 基础选择器包括:标签选择器,类选择器,id选择器,通配符选择器标签选择器 类选择器 语法:.类名{属性1: 属性值;} 类名可以随便起 多类名使用方式&am…...

C# 登录界面代码
背景 MVVM 是一种软件架构模式,用于创建用户界面。它将用户界面(View)、业务逻辑(ViewModel)和数据模型(Model)分离开来,以提高代码的可维护性和可测试性。 MainWindow 类是 View&a…...
点云的Python均值采样
一、代码 Python import numpy as np import open3d as o3ddef mean_sampling(point_cloud, num_samples=None, depth=None, method=knn, k=10):"""对点云进行均值下采样。:param point_cloud: Open3D PointCloud对象:param num_samples: (仅当method=knn时使…...

xss-labs 11-13通关记录
前言 最近复习xss知识,整理一下xss的绕过思路。 level11 观察测试: 1.四个隐藏参数标签 2.全部get传参一遍发现t_sort可赋值,使用的是get传参 3.针对t_sort测试过滤的字符 t_sort< > & ; " 检测到他除了<>,别的全部过滤。 因为…...

Unity类银河恶魔城学习记录12-2 p124 Character Stats UI源代码
Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_Statslot.cs using System.Collections; using System.Collections.Gen…...

技术揭秘:如何打造完美互动的充电桩硬件与服务平台?
充电桩平台全套源码地址 https://gitee.com/chouleng/cdzkjjh.git 这张图像是一个系统或服务的架构图。以下是对图中各个部分的描述: 前端: 位于图像的顶部,颜色为浅绿色。用户服务端: 紧邻前端,颜色为淡黄色。设备服…...

【Django学习笔记(四)】JavaScript 语言介绍
JavaScript 语言介绍 前言正文1、JavaScript 小案例2、代码位置2.1 在当前 HTML 文件中2.2 在其他 js 文件中 3、代码注释3.1 HTML的注释3.2 CSS的注释3.3 Javascript的注释 4、变量 & 输出4.1 字符串4.2 数组4.3 对象(python里的字典) 5、条件语句6、函数7、DOM7.1 根据 I…...
IO和NIO的主要区别在哪里?
Java 中的 IO(输入/输出)和 NIO(新输入/输出)都是处理输入和输出操作的方式,它们的主要区别在于如何处理数据的读写。 阻塞与非阻塞: IO是阻塞的,这意味着当一个线程调用read()或write()时,该线…...

爬虫部署平台crawlab使用说明
Crawlab 是一个基于 Go 语言的分布式网络爬虫管理平台,它支持 Python、Node.js、Jar、EXE 等多种类型的爬虫。 Crawlab 提供了一个可视化的界面,并且可以通过简单的配置来管理和监控爬虫程序。 以下是 Crawlab 的一些主要优点: 集中管理&am…...

uniapp uni.scss中使用@mixin混入,在文件引入@include 样式不生效 Error: Undefined mixin.(踩坑记录一)
问题: 在uni.scss文件定义mixin 2. 在vue文件引入: 3. 出现报错信息: 4. 问题思考: 是不是需要引入uni.scss ? 答案不需要 uni.scss是一个特殊文件,在代码中无需 import 这个文件即可在scss代码中使用这里的样式变量。uni-app的…...

Redis的5大常见数据类型的用法
上一篇文章我们讲了Redis的10大应用场景,这一篇文章就针对Redis的常用数据结构进行一个说明,通过示例的形式演示每一种数据结构如何使用。 当涉及Redis的数据操作时,不同数据类型对应的不同数据结构,如下就对5大常用的数据类型进行…...

刘小光本就疑心赵本山与他媳妇李琳有染,赵本山为证实清白便想起蛋糕上的字,结果呢?
刘小光本就疑心赵本山与他媳妇李琳有染,赵本山为证实清白便想起蛋糕上的字,结果呢? ——小品《生日快乐》(中5)的台词 (接上) 赵本山:噢!对对!那谁,老四,是…...

Unity之PUN实现多人联机射击游戏的优化(Section 2)
目录 🎮一、准备工作 🎮二、实现手雷投掷动作 🎮三、手雷投掷同步 💤3.1 photonView.RPC 🎮四、同步手雷伤害 这几周都给我布置任务了,最近可忙。现在终于有机会更新了,也谢谢大家的阅读&a…...

多叉树题目:N 叉树的层序遍历
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:N 叉树的层序遍历 出处:429. N 叉树的层序遍历 难度 4 级 题目描述 要求 给定一个 N 叉树的根结点 root \texttt{root} root…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

Redis专题-实战篇一-基于Session和Redis实现登录业务
GitHub项目地址:https://github.com/whltaoin/redisLearningProject_hm-dianping 基于Session实现登录业务功能提交版本码:e34399f 基于Redis实现登录业务提交版本码:60bf740 一、导入黑马点评后端项目 项目架构图 1. 前期阶段2. 后续阶段导…...