Servlet+JSP+MySQL学生宿舍管理系统:从环境搭建到避坑实战
简介这是一套面向高校计算机相关专业学生的JavaWeb学生宿舍管理系统完整源码与配套使用教程采用ServletJSPMySQL技术栈开发适合作为期末大作业、毕业设计或课程设计参考方案难度适中对刚接触JavaWeb开发的学习者较为友好。资源包共202个文件压缩后约7.21MB其中包含21个Java源文件、22个JSP页面、73个JavaScript脚本、16个CSS样式表以及7个jar依赖包另附SQL建库脚本、yml配置文件与说明文档前端还整合了Bootstrap与jQuery DataTables等常用组件便于理解分层结构与页面交互逻辑。目前已有248人学习下载。整套代码经过本地编译验证可正常运行评审分达到98分并配有使用教程读者可据此快速掌握宿舍信息管理、学生入住登记等模块的实现思路理清Servlet控制层、JSP视图层与MySQL数据层的协作方式为后续独立开发同类项目提供可复用的参考模板。1. 从零跑通学生宿舍管理系统Servletjspmysql 这套老组合为什么还值得动手如果你手头正好有一套「基于 Servletjspmysql 开发 javaWeb 学生宿舍管理系统」的源码却卡在环境跑不起来、数据库连不上、页面 404 上那这篇就是写给你的。这套技术栈看着老但它是理解 JavaWeb 请求流转最直白的路径浏览器发请求Servlet 接住调 MySQL 拿数据再把结果交给 JSP 渲染成页面。学生宿舍管理系统这个场景又足够具体——楼栋、宿舍、学生、入住、报修、退宿每张表都能对应一个真实业务动作不像那些纯演示的增删改查那样悬空。适合两类人一是课程设计或毕设需要一套能讲清楚、能改得动的完整案例二是想补 JavaWeb 基础、把 Servlet 生命周期和 JSP 作用域真正跑一遍的开发者。下面按「环境怎么搭 → 数据库怎么建 → 后端怎么写 → 前端怎么接 → 坑在哪」的顺序拆开讲每一步都给可复现的命令和参数。2. 环境搭建IDEA 运行 javaweb 项目配置与 Tomcat 版本对齐2.1 为什么这套组合对 JDK 和 Tomcat 版本特别敏感Servlet 和 JSP 的 API 是绑在 Tomcat 版本上的。javax.servlet 包名在 Tomcat 9 及以前是主流Tomcat 10 之后换成了 jakarta.servlet源码里如果写的是import javax.servlet.*放到 Tomcat 10 上直接编译不过。学生宿舍管理系统这类老案例绝大多数是按 Tomcat 8 或 9 写的所以第一件事不是急着导入项目而是先确认 JDK 和 Tomcat 的搭配。JDK 建议 8 或 11JDK 17 配 Tomcat 9 也能跑但部分老 jar 会有反射警告。我一般会先看项目里WEB-INF/lib下的 servlet-api 版本或者看web.xml的version属性4.0对应 Tomcat 93.1对应 Tomcat 8。2.2 IDEA 导入项目并配置 Artifact 的完整步骤导入后最容易翻车的地方是 Artifact 没配导致 Tomcat 启动后访问 404。按下面步骤走# 1. 确认 JDK java -version # 期望输出 1.8.x 或 11.x # 2. 确认 Tomcat 版本解压目录下 cat apache-tomcat-9.0.x/RELEASE-NOTES | head -5在 IDEA 里依次操作File → Project Structure → Modules把src标记为 SourcesFacets 里添加 Web指向web目录和web.xmlArtifacts 里新增 Web Application: ExplodedOutput Layout 里把WEB-INF/lib的依赖全部加进去。然后在 Run → Edit Configurations 里新增 Tomcat Server → LocalDeployment 选项卡选刚才的 ArtifactApplication context 设成/dorm。!-- web.xml 里这段决定欢迎页路径写错就是 404 -- welcome-file-list welcome-filelogin.jsp/welcome-file /welcome-file-list逻辑说明Artifact 的 Exploded 模式会把编译后的 class 和 jsp 按目录结构展开到 Tomcat 的 webapps 下改 JSP 不用重启。参数说明Application context 就是访问前缀设成/dorm后地址是http://localhost:8080/dorm/login.jsp如果设成/直接http://localhost:8080/login.jsp。这一步配错后面所有页面都进不去。2.3 依赖 jar 的放置位置与常见缺失WEB-INF/lib下通常需要 mysql-connector-java、jstl、standard 这几个。mysql 驱动版本要和 MySQL 服务端匹配MySQL 8.0 用mysql-connector-java-8.0.x5.7 用5.1.x也能连。jstl 缺失会导致 JSP 里c:forEach标签直接报错。检查方法启动 Tomcat 后看日志有没有ClassNotFoundException有就是 jar 没进 Artifact。3. 数据库落地mysql 安装配置教程与学生宿舍表结构设计3.1 MySQL 安装后必须确认的三件事不管你是用安装包还是压缩包装完先确认服务在跑、端口对、字符集对。Windows 下net start mysql如果报「服务无法启动」八成是 data 目录初始化有问题或者 my.ini 路径写错。Linux 下用 rpm 或 tar 包安装后要手动systemctl start mysqld。-- 登录后先看版本和字符集 SELECT VERSION(); SHOW VARIABLES LIKE character_set%;字符集必须是utf8mb4否则学生姓名里的生僻字、报修备注里的特殊符号会变问号。MySQL 8.0 默认就是 utf8mb45.7 需要手动在 my.cnf 里改。改完重启服务再验证。3.2 学生宿舍管理系统的核心表与建表语句这套系统的表不用多五张就够撑起完整业务学生表、宿舍楼表、宿舍房间表、入住记录表、报修表。下面给可直接执行的建表语句CREATE DATABASE dorm_db DEFAULT CHARACTER SET utf8mb4; USE dorm_db; CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, sno VARCHAR(20) NOT NULL UNIQUE COMMENT 学号, sname VARCHAR(50) NOT NULL COMMENT 姓名, gender TINYINT DEFAULT 1 COMMENT 1男2女, phone VARCHAR(20), room_id INT COMMENT 当前宿舍 ) ENGINEInnoDB; CREATE TABLE building ( id INT PRIMARY KEY AUTO_INCREMENT, bname VARCHAR(50) NOT NULL, floors INT DEFAULT 6 ) ENGINEInnoDB; CREATE TABLE room ( id INT PRIMARY KEY AUTO_INCREMENT, building_id INT NOT NULL, rno VARCHAR(10) NOT NULL, capacity INT DEFAULT 4, occupied INT DEFAULT 0, FOREIGN KEY (building_id) REFERENCES building(id) ) ENGINEInnoDB; CREATE TABLE checkin ( id INT PRIMARY KEY AUTO_INCREMENT, student_id INT NOT NULL, room_id INT NOT NULL, in_date DATE, out_date DATE, status TINYINT DEFAULT 1 COMMENT 1在住0已退 ) ENGINEInnoDB; CREATE TABLE repair ( id INT PRIMARY KEY AUTO_INCREMENT, room_id INT NOT NULL, content VARCHAR(255), create_time DATETIME DEFAULT CURRENT_TIMESTAMP, status TINYINT DEFAULT 0 COMMENT 0待处理1已处理 ) ENGINEInnoDB;逻辑说明room表用occupied字段冗余记录已住人数避免每次查入住记录去 count这是宿舍管理里最常用的优化。参数说明capacity默认 4 是标准四人间改成 6 就是六人间status用 tinyint 而不是 varchar查询和索引都更快。外键约束保证不会出现孤儿记录但如果你导入的测试数据顺序不对插入会失败可以先SET FOREIGN_KEY_CHECKS0再导。3.3 连接配置与 mysql ssl 连接错误处理JDBC 连接串写在工具类里MySQL 8.0 必须显式关掉 SSL 或者配好证书否则报javax.net.ssl.SSLException。// DBUtil.java 核心片段 private static final String URL jdbc:mysql://localhost:3306/dorm_db?useSSLfalseserverTimezoneAsia/ShanghaicharacterEncodingutf8mb4; private static final String USER root; private static final String PWD 你的密码; public static Connection getConn() throws SQLException { return DriverManager.getConnection(URL, USER, PWD); }逻辑说明useSSLfalse是本地开发最省事的做法生产环境应该配证书而不是关掉。serverTimezone不写会报时区错误MySQL 8.0 的驱动对时区校验很严。参数说明characterEncodingutf8mb4要和建库时一致否则中文乱码。如果连的是远程库把 localhost 换成 IP同时确认防火墙放行 3306。4. 后端实现Servlet 处理请求与 JSP 个人信息展示页面4.1 Servlet 的请求流转与三层结构划分一个宿舍管理系统的后端按 Servlet Service DAO 三层分最清晰。Servlet 只负责收参数、调 Service、转发或重定向Service 做业务判断比如「房间满了不能再入住」DAO 只做 SQL。这样改需求时不会牵一发动全身。Servlet 的生命周期是 init → service → destroydoGet和doPost分别处理两种请求登录用 POST列表查询用 GET。WebServlet(/student) public class StudentServlet extends HttpServlet { private StudentService service new StudentService(); Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String action req.getParameter(action); if (list.equals(action)) { ListStudent list service.findAll(); req.setAttribute(students, list); req.getRequestDispatcher(/student_list.jsp).forward(req, resp); } } Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding(UTF-8); String sno req.getParameter(sno); String sname req.getParameter(sname); service.add(new Student(sno, sname)); resp.sendRedirect(student?actionlist); } }逻辑说明WebServlet注解替代了 web.xml 里的 servlet 配置Tomcat 7 以上都支持。forward是服务器内部跳转URL 不变能带 request 作用域数据sendRedirect是让浏览器重新发请求URL 会变适合增删改之后防重复提交。参数说明req.setCharacterEncoding(UTF-8)必须在取参数之前调用否则 POST 中文乱码GET 中文乱码要在 Tomcat 的 server.xml 里给 Connector 加URIEncodingUTF-8。4.2 JSP 个人信息展示页面与作用域数据绑定JSP 里取 Servlet 放进去的数据用 EL 表达式最干净。个人信息展示页面通常从 session 里拿登录用户再查详细字段。% page contentTypetext/html;charsetUTF-8 % % taglib prefixc urihttp://java.sun.com/jsp/jstl/core % html body h3个人信息/h3 table border1 trtd学号/tdtd${sessionScope.user.sno}/td/tr trtd姓名/tdtd${sessionScope.user.sname}/td/tr trtd宿舍/tdtd${sessionScope.user.roomNo}/td/tr /table h3我的报修/h3 c:forEach items${repairs} varr p${r.content} - ${r.status 0 ? 待处理 : 已处理}/p /c:forEach /body /html逻辑说明${sessionScope.user.sno}等价于session.getAttribute(user).getSno()EL 会自动调 getter。c:forEach遍历 request 作用域里的 repairs 列表。参数说明session 作用域跨请求有效适合存登录态request 作用域只在一次转发内有效适合存列表数据。两者混用是新手最常见的错误把列表放 session 会导致数据串号。4.3 用 Filter 统一处理编码与登录拦截每个 Servlet 都写一遍编码设置太啰嗦用 Filter 统一处理。WebFilter(/*) public class EncodingFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { req.setCharacterEncoding(UTF-8); resp.setContentType(text/html;charsetUTF-8); HttpServletRequest request (HttpServletRequest) req; String uri request.getRequestURI(); // 登录页和登录接口放行 if (uri.endsWith(login.jsp) || uri.contains(/login)) { chain.doFilter(req, resp); return; } if (request.getSession().getAttribute(user) null) { resp.getWriter().write(scriptalert(请先登录);location.hreflogin.jsp/script); return; } chain.doFilter(req, resp); } }逻辑说明Filter 在 Servlet 之前执行chain.doFilter是放行到下一个过滤器或目标资源。参数说明WebFilter(/*)拦截所有路径放行规则按 URI 后缀判断。注意登录接口的路径要写对否则会死循环重定向到登录页。5. 避坑排查这套学生宿舍管理系统最容易翻车的五个地方5.1 现象Tomcat 启动报 ClassNotFoundException: com.mysql.jdbc.Driver原因驱动 jar 没放进WEB-INF/lib或者只加到了 IDEA 的 Libraries 但没进 Artifact。解决Project Structure → Artifacts → Output Layout把 mysql-connector 的 jar 显式加进去重新部署。MySQL 8.0 的驱动类名是com.mysql.cj.jdbc.Driver老代码写com.mysql.jdbc.Driver会警告但不影响建议改新类名。5.2 现象页面中文全是问号原因三个环节任一字符集不对——数据库、连接串、JSP 页面。解决按顺序查SHOW VARIABLES LIKE character_set_database确认库是 utf8mb4连接串加characterEncodingutf8mb4JSP 顶部pageEncodingUTF-8。三处都对了才不会乱码。5.3 现象JSP 里 c:forEach 标签原样输出不解析原因jstl 和 standard 两个 jar 缺失或者 taglib 的 uri 写错。解决确认WEB-INF/lib下有jstl.jar和standard.jaruri 用http://java.sun.com/jsp/jstl/core。Tomcat 10 环境下这套 uri 会失效需要换 jakarta 版本的 jstl。5.4 现象mysql 服务无法启动net start mysql 报错原因data 目录被误删、my.ini 里 basedir 路径含中文或空格、3306 端口被占用。解决先看错误日志data/主机名.err端口占用用netstat -ano | findstr 3306查路径问题就把 MySQL 装到纯英文无空格目录。初始化失败可以删掉 data 目录重新mysqld --initialize。5.5 现象修改 JSP 后刷新页面没变化原因IDEA 的 Artifact 是 Exploded 模式但没开自动更新或者浏览器缓存。解决Run Configuration 里 On Update action 选 Update classes and resources浏览器用 CtrlF5 强刷。如果还不行看 Tomcat 的 work 目录下有没有旧的编译产物清掉重启。6. 进阶技巧用 JSP 页面加载完后刷新一次做数据同步有个实际场景宿舍报修状态在后台被管理员改了学生端页面还显示旧状态。除了轮询接口最简单的做法是让 JSP 页面加载完后自动刷新一次把最新数据拉回来。用setTimeout配合location.reload就能实现但要注意别写成死循环。// 放在 JSP 底部页面加载完 3 秒后刷新一次 window.onload function () { if (!sessionStorage.getItem(refreshed)) { sessionStorage.setItem(refreshed, 1); setTimeout(function () { location.reload(); }, 3000); } };逻辑说明sessionStorage标记本次会话是否已经刷新过避免无限刷新。参数说明3000 是毫秒按需改成 5000 或 10000。这个技巧适合数据变化不频繁、又不想上 WebSocket 的场景。如果要做真正的实时还是得用轮询或长连接。另一个值得掌握的技巧是 JSP 图片坐标定位。宿舍楼平面图里标注房间位置时用绝对定位把图片当背景房间热区用position:absolute加left/top百分比这样换分辨率也不会错位。.floor-map { position: relative; width: 800px; } .floor-map img { width: 100%; } .room-hotspot { position: absolute; width: 8%; height: 10%; border: 1px solid #f00; }逻辑说明百分比定位相对父容器父容器宽度随图片缩放热区跟着走。参数说明width/height按房间在图上占的比例算left/top同理。这套做法比固定像素稳适配不同屏幕时不用改代码。我自己踩过的最大一个坑是早期把数据库连接写在每个 Servlet 里改一次密码要翻十几个文件。后来统一抽成 DBUtil 加连接池才算把后悔药吃上。做这类老技术栈的项目别嫌分层麻烦层分对了后面加功能才不痛苦。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Triton源码解析:Combine优化Pass原理与工程实践

Triton源码解析:Combine优化Pass原理与工程实践

1. 项目概述与源码定位 1.1 聚焦 combine :它到底解决什么问题 我在接触Triton源码阅读这门苦差事之前,一直以为所谓“源码”研究就是把代码一行行读过去。直到实际深入 combine 这个模块,才意识到编译器里真正难的不是“读懂”哪一行&a…

2026/10/5 11:13:54 阅读更多 →
ASN.1 C编解码器源码包:BER/DER/PER/XER实现与编译指南

ASN.1 C编解码器源码包:BER/DER/PER/XER实现与编译指南

简介:这份资源面向学习网络通信与安全协议的C语言开发者,聚焦ASN.1抽象语法记法的编解码实现。压缩包内共70个文件,以31个.h头文件与28个.c源文件为主体,另含5个.o对象文件及asn1模块定义、日志、示例等辅助文件,整体约…

2026/10/5 11:13:54 阅读更多 →
openrig:统一管理Claude Code与Codex的本地AI编码环境编排工具

openrig:统一管理Claude Code与Codex的本地AI编码环境编排工具

1. 从 openrig 说起:一个被低估的本地 AI 编码环境编排工具 第一次看到 openrig 这个名字,很多人会以为是某个硬件机架项目,或者跟服务器上架有关。实际上,它解决的是一个非常具体、也非常痛的问题:当你同时使用 Claud…

2026/10/5 11:12:54 阅读更多 →

最新新闻

计算机专业毕业生就业公示信息解析与职业发展启示

计算机专业毕业生就业公示信息解析与职业发展启示

我无法根据您提供的项目标题生成符合要求的博文内容。原因如下:该标题“北京理工大学计算机学院赵曜,中国进出口银行2016年度拟接收毕业生情况公示...”本质上是一则公开人事信息公告片段,属于机构常规行政公示内容,不具备可延展的技术实现路…

2026/10/5 11:55:35 阅读更多 →
插件系统全解析:从failed to load plugins到插件开发

插件系统全解析:从failed to load plugins到插件开发

最近跟同行交流时发现,不管是搞前端的、玩 NAS 的、折腾开源播放器的,还是给 CI 流程做集成的,嘴里都绕不开一个词:plugins。热搜词里最典型的问题就是"iar plugins 是干什么的",紧接着就是一堆"failed…

2026/10/5 11:55:35 阅读更多 →
Trading-as-Git:本地化量化交易操作系统的版本化与风控闭环实践

Trading-as-Git:本地化量化交易操作系统的版本化与风控闭环实践

1. 项目概述:这不是又一个“AI喊单机器人”,而是一套可版本化、可审计、可回滚的本地量化交易操作系统 你有没有过这种经历:深夜盯着K线图,手抖着点下实盘按钮,结果策略逻辑里藏着一个没发现的未来函数,或者…

2026/10/5 11:55:35 阅读更多 →
GSL1680驱动适配实战:Linux内核-HAL-硬件三层耦合解析

GSL1680驱动适配实战:Linux内核-HAL-硬件三层耦合解析

简介:本资源为Android平台GSL1680/GSL1688电容屏控制器驱动源码包,面向嵌入式Linux驱动开发者、Android HAL层工程师及系统移植人员,聚焦触摸屏硬件与Android框架的深度适配问题。压缩包含2个核心文件(1个C源文件gsl1680.c实现初始…

2026/10/5 11:54:34 阅读更多 →
大型CSV按行数拆分到Excel多工作表的Python完整方案

大型CSV按行数拆分到Excel多工作表的Python完整方案

最近帮同事处理了一个 2GB 的订单 CSV,他原本想把文件直接拖进 Excel,结果 Excel 直接卡死,风扇转了十分钟都没缓过来。最后的需求落到了这个标题上:把大型 CSV 文件按指定行数拆分到 Excel 的不同工作表中。我花了半小时写了段脚…

2026/10/5 11:54:34 阅读更多 →
Android触摸事件分发机制:事件序列、拦截与滑动冲突

Android触摸事件分发机制:事件序列、拦截与滑动冲突

“我写过好几个带长列表的信息流页面,最烦的就是触摸事件相关的疑难杂症。比如 RecyclerView 里的 Item 明明设置了点击事件,但在某个边缘位置怎么点都没反应;又或者外层 ScrollView 和内部横向滑动的 ViewPager 打架,滑动总是一卡…

2026/10/5 11:54:34 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →