Roookie博客 | 记录 · 收纳 · 分享 - 学习点滴
type: channel
link: https://www.wlplove.com/index.php/category/Study/
description: 记录学习点点滴滴
items: 不使用 MySQL Installer 安装 MySQL 的方法
items: Thinkbook16+在ubuntu下编译无线网卡驱动、替换Grub的默认主题等等
items: Docker学习笔记
items: 记录一下写论文过程中新学会的一些Word使用技巧
items: Spring Boot学习笔记
items: 常用的一些Nginx配置
items: 【踩坑实录】Github提交时出现错误：remote：Permission to xxx/test.git denied to xxx
items: SpringMVC学习笔记
items: 【代码摘录】HTML+CSS实现下拉菜单
items: Spring学习笔记（四） - SSM框架整合

不使用 MySQL Installer 安装 MySQL 的方法
type: item
date: 2024-12-03T09:32:00+00:00
description: 目录： 1、下载安装MySQL 2、在安装目录新建配置 3、添加环境变量 4、安装 5、启动服务 6、卸载 现在 Windows 下安装 MySQL 的时候需要首先下载 MySQL Installer，通过这个软件来联网安装管理不同版本的 MySQL，但是这个软件默认是将 MySQL 安装在 C 盘的，修改安装路径的地方也藏的很隐蔽，并且由于安装时 MySQL Installer 需要联网下载安装包，这对于内网里的机器无疑就是很不友好的。但是从 Oracle 官网下载到的 MSI Installer 程序只是解压出了 MySQL 程序，并没有进行任何的环境变量配置、服务配置，那么就需要通过手动配置程序信息。 1、下载安装MySQL 最新版本下载链接：MySQL :: Download MySQL Community Server 旧版本下载链接：MySQL :: Download MySQL Community Server (Archived Versions) 选择下载某一个版本的 MSI 安装程序或者 ZIP 压缩包，下载完成之后进行安装或解压。 2、在安装目录新建配置 下文中的 MySQL 安装目录以 D:\Program\Environment\MySQL\MySQL Server 5.7 为例： 安装目录下创建一个 “data” 文件夹 安装目录下创建一个 “my.ini” 文本文件，向其中写入以下内容（文件路径根据实际修改）： [mysqld] # mysql 安装目录 basedir="D:\Program\Environment\MySQL\MySQL Server 5.7" # mysql 数据库的数据存放目录 datadir="D:\Program\Environment\MySQL\MySQL Server 5.7\data" sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # MySQL服务器监听的端口 port=3306 # 服务端编码方式 character-set-server=utf8mb4 [clinet] # 客户端编码方式 loose-default-character-set=utf8mb4 # 端口号设置 port=3306 [WinMySQLadmin] Server="D:\Program\Environment\MySQL\MySQL Server 5.7\bin\mysqld.exe" 3、添加环境变量 右键 “开始菜单” -> “系统” -> “高级系统设置” -> “环境变量” 向 Path 中添加环境变量，值为 MySQL 安装目录下的 bin 文件夹： D:\Program\Environment\MySQL\MySQL Server 5.7\bin 4、安装 上面环境变量配置没有问题的话，就可以在 cmd 窗口中使用 mysqld 命令了。 此时以管理员身份运行 cmd 窗口，执行命令来初始化相关 data 文件： # 在前面配置好的 data 文件夹下会生成初始化的文件 mysqld --initialize-insecure --user=mysql 安装 MySQL 服务： mysqld -install 5、启动服务 可以通过以下命令启动 MySQL 服务： net start mysql 或者在 ”服务“ 窗口中找到 ”MySQL“ 这项服务，右键启动即可： 服务窗口可通过在“运行”窗口输入 “services.msc” 来启动，或者右键 开始菜单 -> 计算机管理 -> 服务和应用程序 -> 服务 找到。 在启动过程中有可能会出现报错： 在 MySQL 的服务属性中可以看到这项服务可执行文件的程序路径是不正确的： 这个窗口里面没有提供可以改这个路径的地方，查了一下，得需要到注册表中改，在注册表中（Win + R 运行窗口中输入“regedit”回车打开）找到 “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\MySQL” 这个路径，修改其中 ImagePath 的值，将引号里的路径替换为本地 MySQL 安装文件的实际路径（就只替换前面的路径，其他的不用改）： 保存退出之后，再到 “服务” 窗口中刷新一下，可执行文件的路径变成了新的路径之后再次启动即可成功启动 MySQL 服务。 目前本地运行的 MySQL 服务用 root 用户就可以登录，密码为空 MySQL 修改密码： 连接到数据库之后用 SQL 语句为 root 用户更改密码： alter user '用户名'@'localhost' identified by '新密码'; 修改完之…

Thinkbook16+在ubuntu下编译无线网卡驱动、替换Grub的默认主题等等
type: item
date: 2023-06-25T15:59:00+00:00
description: 目录： 一、编译无线网卡驱动 1.1、clone 项目 1.2、安装环境 1.3、编译并加载驱动 二、更换Grub主题 2.1、下载主题文件 2.2、安装主题 2.3、修改启动顺序 三、修复启动项 四、安装搜狗输入法 4.1、添加中文语言支持 4.2、安装搜狗输入法 环境：ubuntu 22.04 一、编译无线网卡驱动 由于 Thinkbook16+ 原装的无线网卡是瑞昱的 RTL8852，装上 ubuntu 22.04 之后会因为没有驱动而无法使用 wifi 功能，这个问题一度困扰了我好长时间，由于没有网线，在此期间只能用手机的 USB 热点共享功能把手机当成 ubuntu 的无线网卡来用。 后来在网上查到一篇关于自己编译 RTL8852 无线网卡驱动的博客：thinkbook14+16+ 安装ubuntu22.04 解决wifi6驱动问题 + 加装完善让笔记本化身完全体，一劳永逸思路_ubuntu wifi6驱动_久日与至的博客-CSDN博客，于是才得以解决此问题。 1.1、clone 项目 驱动项目链接：GitHub - HRex39/rtl8852be: Realtek Linux WLAN Driver for RTL8852BE 根据系统 kernel 的版本选择不同的分支： # kernel < 5.18 选择默认主分支 git clone https://github.com/HRex39/rtl8852be.git # kernel >= 5.18 选择 dev 分支 git clone https://github.com/HRex39/rtl8852be.git -b dev 查看当前 ubuntu 系统内核的方法： uname -srm # 或者 uname -a 1.2、安装环境 进行编译之前需要安装环境： sudo apt update sudo apt install make gcc linux-headers-$(uname -r) build-essential 1.3、编译并加载驱动 编译： cd rtl8852be make -j8 sudo make install 加载驱动： sudo modprobe rtw89pci # 加载驱动 sudo modprobe -r rtw89pci # 卸载驱动 二、更换Grub主题 2.1、下载主题文件 主题文件可以在这里下载： GRUB Themes - Gnome-look.org GRUB Themes - Gnome-look.org (opendesktop.org) 以我下载到的 ubuntu.tar 为例，将其解压到 /boot/grub/themes/ubuntu (或者选择其他目录也行)： # 创建目录 mkdir /boot/grub/themes mkdir /boot/grub/themes/ubuntu # 将文件到解压到创建好的目录中 sudo tar -xf ubuntu.tar -C /boot/grub/themes/ubuntu 2.2、安装主题 修改配置文件，编辑 /etc/default/grub 文件 sudo nano /etc/default/grub 找到以 "#GRUB_THEME" 开头的一行，该行用来配置主题文件路径，将其改为 "主题文件路径/theme.txt” ： # 没有这一行的话直接新增即可 GRUB_THEME="/boot/grub/themes/ubuntu/theme.txt" 然后更新一下 grub 配置： sudo update-grub 最后重启，开机的时候就能看到效果了。 2.3、修改启动顺序 在 Windows + Linux 双系统的启动项中，如果在 BIOS 中选择的是 ubuntu 的话，开机进入的 grub 启动项选择中 ubuntu 系统是排在第一位的。但在双系统中一般来说都是 windows 用的比较多，所以每次启动都来选择 Windows 启动项的话也是一件挺麻烦的事情，那么可以将 windows 的系统启动项放到第一位，只有需要用到 ubuntu 的时候再去手动选择启动。 需要用到的是 Grub Customizer 这个软件，安装命令： sudo add-apt-repository ppa:danielrichter2007/grub-customizer sudo apt update sudo apt install grub-customizer 安装完成后，在 ubuntu 的应用列表中找到这个软件并启动，软件中会显示出当前所有的启动项。 修改启动顺序的话也很简单，点击选中 windows 启动项，用菜单栏上的箭头给移动上去就可以了。 P…

Docker学习笔记
type: item
date: 2023-06-19T10:08:00+00:00
description: 目录： 一、Docker 1.1、什么是 Docker 1.2、安装 Docker 1.3、更改镜像源 二、基本概念 2.1、镜像（Image） 2.2、容器（Container） 2.3、标签（Tag） 2.4、仓库（Repository）与注册中心（Registry） 二、命令 2.1、镜像管理 从 Dockerfile 构建镜像： 从远程仓库拉取某个镜像： 将本地镜像推送到远程仓库 列出本地所有镜像 列出与关键词匹配的本地镜像 查看镜像的详细信息（以 JSON 格式输出） 查看镜像的分层历史（各层的创建指令和大小） 删除本地镜像文件 删除所有悬空镜像 删除所有未被任何容器使用的镜像 将镜像保存为 tar 文件（一般用于离线迁移） 从 tar 文件加载镜像到本地 给镜像打标签： 2.2、容器启停 创建并启动容器 只创建容器，不启动 启动已经创建的容器： 在运行的容器中执行命令 停止运行中的容器： 强制停止容器： 重启容器： 2.3、容器管理 查看运行中的容器 删除已停止的容器 删除所有已停止容器 查看容器的标准输出和错误日志： 查看容器内运行的进程 试试监控容器的 CPU、内存、网络等资源使用情况 在主机与容器之间复制文件 导出容器为 tar 文件： 从 tar 文件导入为镜像： 2.4、标签管理 环境：ubuntu 24.04 一、Docker 1.1、什么是 Docker Docker是一个开源平台，用于将应用程序及其所有依赖项打包成标准的容器，从而实现“一次构建，到处运行”。 Docker 与传统虚拟机（Virtual Machine，VM）都是实现环境隔离和应用封装的技术，但它们在架构、性能、资源利用和使用场景上有本质区别。 Docker 容器除了运行其中的应用外，基本不消耗额外的系统资源，保证应用性能的同时，尽量减少系统开销。 传统虚拟机方式运行 N 个不同的应用就要起 N 个不同的虚拟机（每个虚拟机都要单独分配独占的内存、磁盘等资源），而 Docker 只需要启动 N 个隔离的“很薄的”容器，并将应用放进容器内即可。应用获得的是接近原生的运行性能。 对比维度 Docker（容器） 虚拟机（VM） 操作系统 共享宿主机内核 每个 VM 一个完整 OS 启动速度 秒级（0.1～2s） 分钟级 镜像大小 MB ~ 几百 MB GB 级 资源开销 极低 高 性能 接近裸机 有一定损耗 隔离性 进程级隔离 硬件级隔离 安全性 较弱（共享内核） 更强 可移植性 非常强 一般 运维成本 低 高 密度 单机可跑数百容器 单机只能跑少量 VM 虚拟机 = 在硬件上虚拟出一整台“电脑”，解决的是“硬件虚拟化”问题 Docker = 在操作系统上隔离出一个“进程运行环境”，解决的是“应用交付与环境一致性”问题 可以粗略类比为： 虚拟机：每个租户 独立一套房子（含水电） Docker：每个租户 独立一个房间，共用整栋楼的水电 Docker 官网：Docker: Accelerated Container Application Development Docker 官方文档：Manuals | Docker Docs 国内中文翻译文档：Docker中文文档（Docker官方文档，Docker官方教程） 1.2、安装 Docker 使用官方安装脚本： # 下载并执行Docker官方安装脚本 curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh 或者通过添加 Docker 软件源安装： sudo apt-get update sudo apt-get install ca-certificates curl -y sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/ \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.…

记录一下写论文过程中新学会的一些Word使用技巧
type: item
date: 2022-06-03T03:18:00+00:00
description: 目录： 一、设置子标题 二、在不同的页设置不同的页眉/页码/页脚 三、添加的图片只占一行位置，无法完全显示出来 四、将文章中的英文、数字的字体格式一键设置为Times New Roman 五、在文档任意一个位置上开始之前的编号 六、快捷键： 七、绘制三线表 一、设置子标题 选中要设置为标题的行 开始 -> 段落上面找到多级标题的图标： 选择一个设置的多级标题样式： 就出现了标题，然后更改标题级别使其成为子标题： 此时标题编号可能不是我们想要的，所以还需要调整一下标题编号： 标题更改成功： 二、在不同的页设置不同的页眉/页码/页脚 在需要页眉/页码/页脚页码的页上第一行文字前（或是上一页的最后一行）添加分页符（布局-> 分隔符 -> 下一页）： 插入页眉/页码/页脚，此时插入的页眉/页码/页脚将以这个分页符为分界被分成了两部分，选中前面不用的页眉/页码/页脚，取消这个选项（引用 -> 链接到前一条页眉/页脚）： 接下来删除不用的页眉/页码/页脚即可，还有多出来的分页符 三、添加的图片只占一行位置，无法完全显示出来 就像这样： 方框为图片实际占的位置，但显示效果上只占了一行，图片不能全部显示出来 原因：图片的段落格式中设置了行距为“固定值” 解决办法：选中图片，在段落格式设置中把行距设置为单倍行距就可以解决问题 四、将文章中的英文、数字的字体格式一键设置为Times New Roman ctrl + A 选中全文，在字体设置中分别设置中文字体与英文字体的格式即可 还有个简单粗暴的方法，选中全文将全部字体设置为Times New Roman即可，中文不会受到影响。 五、在文档任意一个位置上开始之前的编号 先将这个编号的样式设置成与上一个编号相同的样式与级别 右键 -> 设置编号值（光标要放在标题一行或者选中标题），选择“继续上一列表”，填写需要开始的编号 六、快捷键： 格式刷： ctrl + Shift + C 复制格式 ctrl + Shift + V 粘贴格式 重复上一次操作：F4 七、绘制三线表 选中整个表格，右键 -> 表格属性 -> 边框和底纹 只保留表格的上下框线，并设置其宽度为 0.75 磅 再选中表格的第一行，右键设置其下框线即可：

Spring Boot学习笔记
type: item
date: 2021-12-20T06:15:00+00:00
description: 目录 一、Spring Boot简介 二、Spring Boot的主要特性 2.1、自动配置 2.2、起步依赖（Starters） 2.3、简化配置 2.4、内置服务器 2.5、无代码生成与 XML 配置 三、Spring Boot的配置 3.1、配置文件类型 3.1.1、application.properties 3.1.2、application.yaml（或.yml） 3.2、配置优先级 3.2.1、配置文件位置的优先级 3.2.2、配置文件格式的优先级 3.3、读取配置文件的方式 3.3.1、使用@Value注解 3.3.2、使用Environment对象 3.3.3、将部分配置封装成实体类 3.4、多环境开发时配置文件的切换 3.5、yml配置文件示例 四、整合MyBatis 4.1、添加起步依赖 4.2、添加配置 4.3、扫描Mapper接口 五、使用Maven打包Spring Boot项目 一、Spring Boot简介 Spring Boot 是 Spring 框架的一个扩展，旨在简化 Spring 应用的初始搭建和开发过程。它通过自动配置和约定优于配置的原则，提供一个开箱即用的应用程序架构，能够快速构建独立运行的 Spring 应用，开发者基于 Spring Boot 的预置结构继续开发，省时省力。 Spring Boot 官方文档：https://docs.spring.io/spring-boot/index.html Spring 中文网翻译的 Spring Boot 中文文档：https://springdoc.cn/spring-boot 通过 IDEA 创建 Spring Boot 项目： 添加核心依赖 Spring Web： 除了用 IDEA 创建 Spring Boot 项目，也可以直接访问 Spring Boot 项目生成网站，设定项目的元数据（如项目类型、语言、Spring Boot 版本等）之后，创建好的项目就会以压缩包的格式下载到本地，解压导入到开发工具即可。 Spring Boot 项目生成网站： https://start.spring.io/：Spring Boot 官方的项目生成工具，Java 版本和 Spring Boot 版本都比较新，国内有可能访问不了或访问速度比较慢 https://start.springboot.io/：官方项目生成工具的国内镜像，Java 版本和 Spring Boot 版本与官网一致，国内都能访问 https://start.aliyun.com/：从域名能看出来是阿里云镜像，国内都能访问，而且能用旧的 Java 版本和 Spring Boot 版本生成项目 一个典型的 Spring Boot 项目结构如下： SpringBoot-project/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── MyApplication.java │ │ └── resources/ │ │ ├── application.properties │ │ └── static/ │ │ └── templates/ │ └── test/ │ └── java/ │ └── com/ │ └── example/ │ └── MyApplicationTests.java ├── pom.xml └── README.md MyApplication.java：Spring Boot 应用的主类，使用 @SpringBootApplication 注解标记。 application.properties：Spring Boot 应用的配置文件，可以配置各种属性。 static/：存放静态资源文件，例如 HTML、CSS、JavaScript 文件等。 templates/：存放模板文件，例如 Thymeleaf、Freemarker 等。 二、Spring Boot的主要特性 2.1、自动配置 开发者无需手动配置大量 XML 或注解，Spring Boot 能够根据项目中添加的依赖，自动为应用程序生成合理的默认配置，减少手动配置。例如，在项目中添加了 spring-boot-starter-web 依赖，Spring Boot 会自动配置嵌入式的 Tomcat 服务器，并为 Spring MVC 设置好必要的组件，如 DispatcherServlet 等，无需开发者手动编写大量的配置代码。 2.2、起步依赖（Starters） 起步依赖是指对常用库和框架的依赖声明的集合，使用起步依赖可以一次性地添加相关的依赖和配置到项目中，大大简化了项目的依赖管理，…

常用的一些Nginx配置
type: item
date: 2021-12-11T10:16:00+00:00
description: 目录： 1、监听端口 2、日志功能 2.1、访问日志 2.2、错误日志 3、配置域名 4、静态资源 5、重定向 5.1、网站根目录重定向 5.2、特定目录重定向 6、反向代理 7、负载均衡 8、SSL配置 1、监听端口 server { # 用于HTTP协议 listen 80; # 用于HTTPS协议 listen 443 ssl; # 用于HTTP2 listen 443 ssl http2; # 使用IPv6监听80端口 listen [::]:80; # 仅使用IPv6 listen [::]:80 ipv6only=on; } 2、日志功能 Nginx的日志分为两种：access_log （访问日志）和 error_log（错误日志）。 对于日志的格式，Nginx提供了一种名为 combine 的格式，如果没有明确指定日志格式则默认使用该格式。 如果不使用 combine 格式的话，可以使用 log_format 指令来自定义，其具体用法参考Nginx日志配置详解或者官方文档：HttpLog模块-Nginx中文文档。 2.1、访问日志 访问日志主要记录客户端的请求，客户端向Nginx服务器发起的每一次请求都记录在这里。客户端IP，浏览器信息，referer，请求处理时间，请求URL等都可以在访问日志中得到。 server { # 访问日志文件的写入位置，相对或绝对路径 access_log /path/to/file.log; # 选择访问日志功能的开启(on)或关闭(off) access_log on; } 2.2、错误日志 错误日志记录服务器和请求处理过程中的错误信息。 server{ # 错误日志的写入位置 error_log logs/error.log error; # 错误日志的级别，分为 debug, info, notice, warn, error, crit, alert,emerg，其取值范围是按紧急程度从低到高排列 # 只有日志的错误级别等于或高于level指定的值才会写入错误日志中。默认值是error error_log file [level]; } 3、配置域名 server { # 监听domain.com server_name domain.com; # 监听多个域名 server_name domain.com www.domain.com; # 监听所有域名 server_name *.domain.com; # 监听所有顶级域名 server_name domain.*; # 监听未指定的主机名（比如侦听IP地址本身） server_name ""; } 4、静态资源 server { listen 80; server_name domain.com; location / { # 设置网站的根目录 root /path/to/website; } } 5、重定向 5.1、网站根目录重定向 server { listen 80; server_name www.domain.com; # 将 www.domain.com 进行301重定向，跳转至 http://domain.com$request_uri return 301 http://domain.com$request_uri; } 5.2、特定目录重定向 server { listen 80; server_name www.domain.com; # 将链接 http://www.domain.com/redirect-url 进行301重定向，跳转到http://otherdomain.com location /redirect-url { return 301 http://otherdomain.com; } } 如将 domain.com 永久重定向到 www.domain.com： server { listen 80; server_name domain.com; return 301 http://www.$host$request_uri; } 6、反向代理 反向代理 - 维基百科，自由的百科全书 (wikipedia.org) Reverse proxy - Wikipedia server { listen 80; server_name domain.com; # 对特定主机的3000端口进行反向代理 location / { proxy_pass http://0.0.0.0:3000; } } 7、负载均衡 负载均衡 - 维基百科，自由的百科全书 (wikipedia.org) Load balancing (computing) - Wikipedia upstream nod…

【踩坑实录】Github提交时出现错误：remote：Permission to xxx/test.git denied to xxx
type: item
date: 2021-12-08T08:19:00+00:00
description: 目录： 问题再现 错误原因 解决方法 问题再现 Github 提交时出现错误，报错信息如下： remote: Permission to xxx/test.git denied to xxx. fatal: unable to access 'https://github.com/xxx/test.git/': The requested URL returned error: 403 如果再试一次，可能还会有如下报错： fatal: unable to access 'https://github.com/xxx/xxx.git/': OpenSSL SSL_read: Connection was reset, errno 10054 或者： fatal: unable to access 'https://github.com/xxx/xxx.git/': Failed to connect to github.com port 443: Timed out 错误原因 这个是由于在同一台计算机上先后使用了两个Github账号。 第一个账号进行了提交之后，这个账号的凭据信息就被保存了下来，然后切换到第二个账号进行提交时，系统依然会使用第一个账号的凭据信息进行提交，因此便会报错。 解决方法 进入控制面板，找到凭据管理器选项，选择其中的 Windows 凭据，删除已经保存的 Github 凭据： 然后再重新进行提交操作，此时会弹出Github登录窗口，重新登录之后就能成功提交了。

SpringMVC学习笔记
type: item
date: 2021-11-26T14:56:00+00:00
description: 目录 一、SpringMVC介绍 二、映射请求路径 2.1、使用@ResquestMapping进行路径映射 2.2、@ResquestMapping的属性 2.2.1、value或path 2.2.2、method 2.2.3、params 2.2.4、headers 2.2.5、consumes 2.2.6、produces 2.3、@ResquestMapping的衍生注解 三、请求参数传递 3.1、GET/POST请求传递基础参数 3.2、传递复杂参数 3.2.1、日期类型 3.2.2、引用类型 3.2.3、数组 3.2.4、集合（List/Set/Map） 3.3、传递Json数据 四、响应 4.1、返回Json数据 4.2、封装返回结果 五、REST风格 5.1、简介 5.2、规则 5.3、相关注解 5.3.1、@RestController 5.3.2、@PathVariable 5.3.3、@RequestParam 5.3.4、@RequestBody 5.4、Rest风格开发示例 5.3.1、查询 5.3.2、新增 5.3.3、修改（更新） 5.3.4、删除 六、异常处理 6.1、自定义异常 6.2、处理异常的方式 6.2.1、使用@ControllerAdvice和@ExceptionHandler 6.2.2、实现HandlerExceptionResolver接口 七、拦截器 7.1、创建拦截器 7.2、注册和配置拦截器 7.3、执行流程和顺序 一、SpringMVC介绍 Spring MVC 是 Spring 框架中的一个模块，专门用于构建基于模型-视图-控制器（Model-View-Controller，MVC）设计模式的 Web 应用程序。 相关依赖坐标： <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.0.RELEASE</version> </dependency> 在 IDEA 中根据 “maven-archetype-webapp” 模板创建 Webapp 项目： 创建基本项目结构： 在 config 包里面新建初始化 Servlet 的配置类： public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer { protected Class<?>[] getRootConfigClasses() { return new Class[]{SpringConfig.class}; } protected Class<?>[] getServletConfigClasses() { return new Class[]{SpringMvcConfig.class}; } protected String[] getServletMappings() { return new String[]{"/"}; } } 再新建 SpringMVC 配置类： @Configuration @ComponentScan("com.wlplove.controller") public class SpringMvcConfig { } 二、映射请求路径 2.1、使用@ResquestMapping进行路径映射 @RequestMapping 是 Spring MVC 中将 HTTP 请求映射到控制器方法的注解，它用于类级别或方法级别，可以根据请求的 URL、HTTP 请求方法（GET、POST 等）、请求参数、请求头等信息来匹配对应的处理逻辑。 @RequestMapping 注解应用在方法上，可以为该方法映射 URL 请求路径： public class UserController { @RequestMapping("/save") public String save() { // ... } } 也可以应用在类上，为该类中的所有方法设置基础的 URL 请求路径： @RequestMapping("/user") public class UserController { @RequestMappi…

【代码摘录】HTML+CSS实现下拉菜单
type: item
date: 2021-11-19T14:28:00+00:00
description: 目录： 一、演示效果 二、源代码 1.HTML代码 2.CSS 在B站上看到一个up主写的一段下拉菜单代码，实现效果还挺好看的，遂进行小改之后拿来收藏，以供日后使用。 源代码出自：B站up主 山羊の前端小窝 视频链接：https://www.bilibili.com/video/BV1S44y147oV 一、演示效果 演示如下，鼠标悬浮即可查看效果： 二、源代码 1.HTML代码 消息 回复我的 收到的赞 我的消息 动态 知识分子没文化 博客 收藏夹 默认收藏夹 计算机编程 有点意思 说的不错 投稿 专栏投稿 音频投稿 贴纸投稿 视频投稿 投稿管理 2.CSS * { margin: 0; padding: 0; list-style: none; font-size: 20px; color: #f4f1de; } .shell { display: flex; justify-content: center; margin-top:50px; } .button, .portrait { background-color: #50536e; width: 170px; height: 65px; text-align: center; line-height: 65px; transition: 0.3s; /* 指定浏览网页时鼠标指针的形状 */ cursor: pointer; } .portrait::before { content: ''; display: block; width: 100px; height: 100px; border-radius: 50%; transform: translate(30px, -30px); background-image: url("https://image.wlplove.com/static/img/icon/headpic.png"); background-size: cover; border: 10px solid #fff; } .information { width: 220px; background-color: #e07a5f; transform: translate(-20px, -200px); border-radius: 10px; padding: 20px 0; line-height: 0; height: 0; transition: 0.3s; /* opacity属性指定了一个元素的不透明度，其取值从0-1。*/ /* 在0时会完全看不见，1表示完全可见 */ opacity: 0; } .button:hover { background-color: #d15a39; } .button li:hover { background-color: #ffb29d; } .button ul li { height: 0; transition: 0.2s; opacity: 0; transform: translateY(-65px); background-color: #e07a5f; } .button:hover li { height: 65px; opacity: 1; transform: translateY(0); } .portrait:hover .information { opacity: 1; line-height: 65px; transform: translate(-20px, -10px); height: auto; } a{ text-decoration: none; }

Spring学习笔记（四） - SSM框架整合
type: item
date: 2021-11-13T14:56:00+00:00
description: 目录 一、创建Webapp项目 二、Spring配置类 三、数据源对象（以Druid为例） 四、整合MyBatis 4.1、数据库配置 4.2、MyBatis配置 五、整合SpringMVC 六、整合Log4j 七、整合Junit 环境说明： 数据库：MySQL 8.0 Java版本：JDK8 通过注解整合 SSM 框架流程： 创建 Web 工程 SSM 整合 Spring 框架：SpringConfig MyBatis 框架：JdbcConfig / jdbc.properties / MybatisConfig SpringMVC 框架：ServletConfig / SpringMvcConfig 一、创建Webapp项目 在 IDEA 中根据 “maven-archetype-webapp” 模板创建 Webapp 项目： 创建基本项目结构： 二、Spring配置类 引入 spring-conext 的依赖坐标： <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.25.RELEASE</version> </dependency> 创建一个 Java 类 SpringConfig 作为 Spring 配置类，类上面添加 @Configuration 注解标识这是一个配置类，添加 @ComponentScan 注解来设置扫描注解的路径 @Configuration @ComponentScan("com.xxx") /** * 如果有多个要扫描的包路径，可以用数组格式： * @ComponentScan({"com.xxx.dao","com.xxx.service"}) */ public class SpringConfig { } 三、数据源对象（以Druid为例） 导入 Druid 数据源的依赖坐标： <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.22</version> </dependency> 新建一个配置数据库连接信息的类 JdbcConfig，里面引入配置文件中的数据库信息，然后用一个方法构造并返回一个 DataSource 对象，最后用 @Bean 注解设置这个方法的返回值成为 Spring IoC 容器的一个 Bean： public class JdbcConfig { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; /** * 数据源Bean * @return */ @Bean public DataSource dataSource() { DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(username); ds.setPassword(password); return ds; } } Spring 配置类 SpringConfig 中用 Import 注解引入 JdbcConfig 这个类： @Configuration @ComponentScan("com.xxx") +@Import({JdbcConfig.class}) public class SpringConfig { } 四、整合MyBatis 4.1、数据库配置 在 src/main/resources 目录下新建一个配置数据库连接信息的配置文件 jdbc.properties： jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_db?useSSL=false&setUnicode=true&characterEncoding=utf8 jdbc.username=root jdbc.password=root 使用 @PropertySource 注解在 Spring 配置类 SpringConfig 上加载外部的 prope…