news 2026/10/23 4:56:44

JavaWeb毕设项目从数据库脚本到IDEA运行:配置与避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaWeb毕设项目从数据库脚本到IDEA运行:配置与避坑指南

简介:基于JavaWeb的毕业设计管理系统面向计算机相关专业毕设学生和Java学习者,采用JSP、Servlet、JDBC与MySQL构建,基于B/S结构,覆盖选题、过程、答辩各阶段。系统内置学生、导师、院系管理员、系统管理员四种角色,包含选题管理、任务书发布、论文上传评阅、答辩分组与成绩汇总等完整业务流程。资源包共3个文件,约4.33MB,含项目源码zip、数据库脚本sql与项目说明txt;sql可快速初始化MySQL数据,源码可直接导入Eclipse配合Tomcat运行,txt提供部署说明。目前已有10188人浏览学习。项目经过严格调试,可直接作为毕设使用;系统功能完善、界面简洁,适合课程设计、项目实训和毕业答辩准备等多种场景,配合源码和脚本能省去环境搭建与数据建模时间,也有助于理解JavaWeb分层开发与权限管理逻辑,便于二次开发和撰写毕设文档。

1. 基于JavaWeb的毕业设计管理系统:拿到源码和数据库脚本后,先搞清楚这三件事

如果你正在做毕业设计,或者接了别人的JavaWeb项目,看到“基于JavaWeb的毕业设计管理系统【项目源码+数据库脚本】”这种标题,第一反应多半是:下载下来,解压,试着跑起来。但真正做过的人都知道,这个环节最容易卡住的不是代码,而是环境、数据库脚本和项目结构三者怎么对齐。一套完整的JavaWeb毕设项目源码,通常包含前端页面、后端Servlet/Service/Dao分层代码、配置文件,以及一份以.sql结尾的数据库脚本。数据库脚本里定义了所有表、字段、初始数据,是让系统从“纸面流程”变成“可登录、可操作”的关键。

这篇笔记我打算按我实际接手这类项目时的顺序来讲:先看数据库脚本理清业务,再搭环境把源码跑起来,接着处理那些一跑就炸的常见坑,最后谈怎么靠这套底子做二次开发。适合两种人:一是拿现成源码做毕设、需要尽快跑通并讲清原理的同学;二是想独立维护或改造老项目的初级JavaWeb开发者。我会把那些只可意会不可言传的“玄学”问题也摊开来说。

2. 读懂毕业设计管理系统的表结构:从业务流程图到数据库脚本的映射

2.1 三类角色与五种状态:业务流程在表里怎么落

大多数毕业设计管理系统的核心流程是:学生选题、教师确认、学院审核、中期检查、答辩评分。所以你打开数据库脚本时,别急着插入数据,先找几张关键表,把角色和状态对应起来。我一般会先按用户类型去拆:管理员、教师、学生,这三类用户通常不会都放在一张 user 表里,有的项目会拆成 admin、teacher、student 三张表,有的则用一张 system_user 表外加 role 字段区分。

我在一个常见案例里看到的是:一张sys_user表存登录账号、密码MD5、姓名、角色标识;另外两张表teacher_info和student_info通过 user_id 做外键关联,扩展工号、职称、学号、班级、专业等字段。这种设计的好处是登录认证和业务信息解耦,改密码不需要动业务表;坏处是新手在理解外键关联时容易绕晕。你在看数据库脚本时,先搜CREATE TABLE,数一下有多少张表,然后画出哪些表之间有外键关系。毕业设计管理系统最核心的四张表往往是:用户表、选题表、审核记录表、答辩成绩表。

2.2 必看的四张核心表和它们的外键关系

以我见过的典型JavaWeb毕设项目为例,表结构大概长这样:

sys_user:主键 id,字段包括 username、password、real_name、role_type,role_type 用 tinyint 区分 0/1/2。密码一般是 MD5 或 SHA-256 加密存储,数据库脚本里初始数据会写死几个账号。

topic:选题表,主键 id,字段包括 topic_name、topic_content、teacher_id、max_student_count、selected_count、status。status 是一个非常重要的字段,通常 0 表示未审核,1 表示通过,2 表示驳回。这个字段决定了你在页面上看到的选题列表能不能被学生申请。

selection:选课/选题记录表,主键 id,外键 student_id 关联 sys_user,topic_id 关联 topic,字段包括 create_time、status。这张表记录了“谁选了哪个题”以及当前状态(待审核、通过、拒绝、已退选)。

defense_score:答辩成绩表,主键 id,外键 student_id、topic_id,字段包括 score_type(如开题、中期、最终答辩)、score_value、comment、update_time。

外键关系我用 SQL 脚本里的FOREIGN KEY或CONSTRAINT来识别。很多毕设项目的脚本为了省事不会真正建立外键约束,只是靠代码在 Service 层逻辑判断。这种情况下,你在导入脚本时如果看到SET FOREIGN_KEY_CHECKS = 0;,说明项目允许在无约束状态跑,那你改数据时就得自己注意引用完整性。

2.3 用 Navicat 把 SQL 脚本转成可视化模型,5 分钟看懂全表

光看脚本文本太抽象,我习惯的做法是用 Navicat 导入 .sql 文件,然后打开“模型”功能。操作步骤很简单:在 Navicat 里新建一个数据库,右键数据库选择“运行 SQL 文件”,选脚本路径,等待执行完成。然后点击左上角“模型”按钮,把需要的表拖进画布,Navicat 会自动识别主键和外键关系并自动连线。

如果你用的不是 Navicat,也可以用 DataGrip 的 Diagram 功能,或者 dbdiagram.io 手工粘贴建表语句。看模型时重点看三点:每个角色至少有一张主表;选题记录表是否同时连接学生和教师;成绩表是否关联了选题。如果这三条线都清晰,这个项目的业务逻辑就不至于太乱。

这类项目里的表命名有规律:t_xxx、sys_xxx、xxx_info。如果你看到表名乱得像随机字符串,比如table1、abc,那大概率是把别人的项目改了个名字,坑会很多。看清楚表结构之后,下一步才是配置环境。

3. 把 JavaWeb 项目源码在 IDEA 里跑起来:运行配置与数据库连接实操

3.1 导入前的环境检查:JDK、Tomcat、Maven 版本对齐

“idea运行javaweb项目配置”是搜索时最常见的关键词,很多人卡在第一步:项目导入 IDEA 后一堆红叉。我建议按这个顺序检查。

先看项目里有没有pom.xml。如果有,说明是 Maven 项目;如果没有,看有没有.classpath和.project,那是 Eclipse 老项目。对于 Maven 项目,你要在 IDEA 中执行File -> New -> Project from Existing Sources,选择pom.xml导入。IDEA 会弹窗提示自动下载依赖,这个过程最容易因为网络问题挂掉。

JDK 版本怎么定?打开pom.xml看<maven.compiler.source>和<maven.compiler.target>,比如写的是 1.8,那你就装 JDK 8。如果写的是 17,那你得装 JDK 17。硬用高版本 JDK 跑老项目,会报UnsupportedClassVersionError或模块读取错误,这是第一道坎。

Tomcat 版本也不能乱选。如果项目是基于 javax.servlet 写的,Tomcat 10 以上跑不了,因为 Tomcat 10 把 javax 换成了 jakarta。很多毕设项目用的是 Tomcat 8.5 或 9.0。你可以在 IDEA 的Run -> Edit Configurations -> Tomcat Server里配置本地 Tomcat。老项目可能没有 Tomcat Server 选项,需要先在File -> Settings -> Build, Execution, Deployment -> Application Servers里把 Tomcat 的安装目录加进去。

如果你的项目不是 Maven 而是直接引用了web/WEB-INF/lib下的 jar 包,那么在Project Structure -> Libraries里把这些 jar 手动添加好。这一步漏了,启动时就会报java.lang.ClassNotFoundException。

3.2 修改数据库连接配置:从 db.properties 到 JDBC,别忽略时区

JavaWeb 项目连接 MySQL 最常见的方式有两种:JDBC 直连和 MyBatis/JDBC 模板封装。无论哪种,配置文件通常在src目录下,叫db.properties、jdbc.properties或application.properties。内容长这样:

jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/graduation_design?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai jdbc.username=root jdbc.password=123456

注意serverTimezone这个参数,MySQL 8.0 以上如果没有它,会报The server time zone value '�й���ʱ��' is unrecognized。同时useSSL=false也建议保留,否则本地环境没有 SSL 证书会刷一堆警告。驱动类名也要看 MySQL 的版本:MySQL 5.x 用com.mysql.jdbc.Driver,MySQL 8.x 用com.mysql.cj.jdbc.Driver。如果你项目里用的是连接池,比如 C3P0,那配置文件里还会有acquireIncrement、maxPoolSize等参数。改完这些后,记得把jdbc.password改成你自己本机 MySQL 的密码。

如果项目是 MyBatis 写的,你还要检查mybatis-config.xml里有没有引入外部的 properties 文件,路径写错会导致启动时报找不到资源。

3.3 启动 Tomcat 后的验证路径:日志、首页、接口三连查

配置完成后,点击 IDEA 里的 Tomcat 启动按钮,别急着关。先看Tomcat Localhost Log和Catalina Log。正常启动的标志是Server startup in [xxxx] milliseconds。如果看到Exception,把第一行堆栈信息复制去搜,别只看最后一行,真正的原因往往在上面。

启动成功后,浏览器访问http://localhost:8080/项目名/或直接访问/index.jsp。如果 404,先检查 IDEA 的Artifacts里有没有正确添加exploded包,再检查项目访问路径是不是用了/映射。

登录页面能出来,先不要直接登录,去数据库确认初始账号密码。很多项目的数据库脚本里预设了admin/123456,但密码是 MD5 加密后的值。你可以在脚本里搜admin,看password字段是明文还是密文。如果是 MD5 密文,123456的 MD5 是e10adc3949ba59abbe56e057f20f883e。验证明文是否正确的简单方法是:在命令行执行SELECT MD5('123456');。这一步能省去你很多“为什么密码对不上”的烦恼。

4. 数据库脚本的导入与初始化:从新建库到测试账号就位

4.1 两种导入方式:命令行的可控和图形界面的省事

拿到.sql文件后,很多人的第一反应是双击打开,复制内容到 MySQL 里执行。这个方法不是不行,但遇到大的脚本(比如几百行 INSERT 语句)容易半路报错,且不好排查。我更推荐命令行的方式,至少你能看到错误在哪一行。

在 Windows 命令行或 IDEA 的 Terminal 里执行:

mysql -uroot -p123456 -e "CREATE DATABASE IF NOT EXISTS graduation_design DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;" mysql -uroot -p123456 graduation_design < D:/path/to/graduation_design.sql

第一行先建库,第二行导入脚本。注意脚本里如果已经写了CREATE DATABASE和USE,那第一行可以省略。但有些脚本开头没有CREATE DATABASE,只有CREATE TABLE,这时候如果你没有先选库,会报No database selected。

用 Navicat 的做法是:连接 MySQL 后右键“运行 SQL 文件”,选择文件,拖动到目标数据库上,执行完成后看右下角日志。这个方法比较适合不熟悉命令行的同学,但我用命令行更多,因为报错信息更直接。

导入完成后,验证是否成功的方式是:

mysql -uroot -p123456 graduation_design -e "SHOW TABLES;"

如果能看到一堆表名,恭喜,数据库部分已经就位。如果表数量为 0,说明脚本里有SET NAMES之类的语句把上下文切到别的地方了,或者你导入到了错误的数据库。

4.2 初始化数据的坑:外键约束、字符集、自增主键

有时候脚本导入只导入了表结构但没导入数据,原因很可能是脚本中间有DROP TABLE IF EXISTS语句,而你的库里面已经存在同名表,但结构不同,导致后续 INSERT 失败。我的习惯是拿到脚本先看前 20 行,了解它是否包含DROP TABLE,如果包含,就说明脚本设计为可重复导入。重复导入时,DROP TABLE会先删旧表,然后建新表,这是正常行为。

另一个常见坑是外键约束导致 INSERT 失败。比如topic表里有teacher_id引用sys_user,但脚本先插入topic数据,而后插入sys_user,如果外键开着,这条 INSERT 就报Cannot add or update a child row。遇到这种情况,可以在导入前执行SET FOREIGN_KEY_CHECKS=0;,导入结束后再执行SET FOREIGN_KEY_CHECKS=1;。但是,你先要搞清楚脚本里是否已经有这样的语句。有些脚本为了省事会在开头写SET FOREIGN_KEY_CHECKS=0;,在结尾写SET FOREIGN_KEY_CHECKS=1;。如果没有,就用命令行包裹。

字符集问题也很烦。脚本里如果写的是ENGINE=InnoDB DEFAULT CHARSET=latin1,那中文字段会乱码。我建议在导入前用文本编辑器的“查找替换”把CHARSET=latin1全局替换成CHARSET=utf8mb4。替换后再导入,基本不会乱码。如果你已经导入了,可以用 ALTER 语句修改字符集:

ALTER DATABASE graduation_design CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ALTER TABLE topic CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

4.3 改密码和账号:让默认管理员能登录的最小操作

脚本导入后,通常已经有初始管理员账号。但有些项目把密码写成了空字符串,或者用了你猜不到的密文。这时候不要急着删表,你可以直接在数据库里执行一条 SQL 重置密码:

UPDATE sys_user SET password = MD5('123456') WHERE username = 'admin';

注意如果你的项目用的不是 MD5,而是 SHA-256,那你要先看代码里加密工具类是什么。常见密码加密切换写法是SecureUtil.md5()(Hutool),或者是自写的MD5Util。在不确定的情况下,最好的办法是去代码里搜password相关的字符串处理,找到加密逻辑后在数据库里执行对应的 MySQL 函数。或者你也可以直接注册一个新账号,再把角色设为管理员。

关于idea导出数据库脚本这个热词——很多同学在交毕设时会被要求导出一份 .sql 数据库脚本。这时候不要直接在命令行用mysqldump,因为导出的文件可能包含敏感信息或无关表。我更推荐用 Navicat 的“转储 SQL 文件”功能:右键数据库 -> 转储 SQL 文件 -> 仅结构和数据。导出时勾选“包含创建数据库语句”,这样别人拿到脚本后直接在 MySQL 里执行就能恢复。用 mysqldump 的命令是:

mysqldump -uroot -p123456 graduation_design > graduation_design_backup.sql

这会把建库、建表、插数全部包含,适合备份,但要注意生成的文件里如果有CREATE DATABASE,别人导入时需要对应权限。

5. JavaWeb 毕设项目避坑指南:让源码从“能跑”到“跑得稳”

这一章我整理的是真实环境里反复出现的五类问题,每一条都按“现象 -> 原因 -> 解决”的顺序写。

5.1 现象:Tomcat 启动报ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

原因通常有两个:一是项目没有把 Spring 相关的 jar 包打到 WEB-INF/lib 下;二是 IDEA 的 Artifacts 里没有包含项目依赖的库。如果你是把项目的lib目录从别处复制过来的,容易漏 jar。解决方法是:在 IDEA 的Project Structure -> Artifacts -> Output Layout里右键项目名,选择 “Put into Output Root”,或把 “Available Elements” 里的依赖包拖到WEB-INF/lib下,然后重新构建。另一个常见原因是你用了 Maven 但pom.xml里引入了依赖没有刷新。执行mvn clean package时如果没报错,那基本就是 Artifacts 没配好。

5.2 现象:页面中文乱码,数据库里的中文正常,但页面上全是问号或者乱码

原因有三层。第一层是 JSP 页面编码,检查<%@ page pageEncoding="UTF-8" %>是否写在文件头。第二层是 Tomcat 的请求编码,默认是 ISO-8859-1。解决方法是写一个字符编码过滤器,或用 Spring 的CharacterEncodingFilter。第三层是数据库连接字符串里的characterEncoding=utf8,这个在第 3 章说过。我最常用且最稳妥的是在web.xml里配置 Spring 的过滤器:

<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

如果项目是纯 Servlet 没引 Spring,那就自己写个 Filter,request.setCharacterEncoding("UTF-8")和response.setContentType("text/html;charset=UTF-8")都写上,然后 map 到/*。

5.3 现象:数据库连接失败,报Communications link failure或Connection refused

最容易忽略的是 MySQL 服务没启动。Windows 服务列表里查MySQL80或mysql是不是在运行;Linux 上执行systemctl status mysqld。如果服务在跑,那就是端口问题。jdbc.url里写的是 3306,但 MySQL 实际端口可能被改成了 3307。用命令行netstat -ano | findstr 3306排查。

还有个很隐蔽的坑:MySQL 8.0 以上默认认证插件是caching_sha2_password,而旧版连接驱动用的mysql_native_password不匹配,会报Public Key Retrieval is not allowed。解决方法是:重启 Tomcat 前先确认数据库用户是啥。如果项目直接用 root 连,通常没问题;如果新建了用户,要设置成mysql_native_password:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; FLUSH PRIVILEGES;

或者是把连接 URL 里加一个allowPublicKeyRetrieval=true,但我不太推荐这个参数,治标不治本。

5.4 现象:上传文件成功但找不到保存路径

很多毕设管理系统都有课题附件或论文上传功能。代码里如果写了String savePath = "upload/files";,这个相对路径在不同项目里解析规则不同。Tomcat 默认部署时的当前目录不是项目目录,而是 Tomcat 的 bin 目录,所以你会看到文件保存在 Tomcat 的 bin 或 conf 下。解决方法是:在代码里用绝对路径,或从配置文件中读取路径。如果你只是想先跑通,可以在 IDEA 的 Run Configuration 里给 Tomcat 添加 VM 参数:

-Duser.dir=${project.dir}

这样相对路径就基于项目目录了。更专业的做法是在配置里定义一个file.upload.path,代码通过Properties读取。这个坑非常典型,答辩演示时你会因为找不到文件而手忙脚乱。

5.5 现象:部署到服务器后,Session 一重启就失效,登录状态丢失

毕设项目部署到服务器常用两种方式:一是直接复制 war 包到 Tomcat webapps,二是用 IDEA 连远程 Tomcat 热部署。如果你在本地一切正常,部署到服务器后频繁掉登录,先看服务器时间是不是和本机差太多。Session 的 Cookie 默认maxAge=-1,只要浏览器关了就没有,这不算 bug。但如果短时间内失效,多半是项目里设置了 session 超时时间,或者是多实例部署且没有做 session 粘滞。毕设系统一般单节点部署,检查web.xml里<session-config>的session-timeout,默认一般是 30 分钟,如果设置成了 1 分钟,那肯定一会儿就踢人。

这里也顺带提一句:如果你想在答辩前验证系统在并发情况下会不会崩,可以写一个 JMeter 数据库压测脚本,对登录接口发起 100 个并发请求。做法很简单:启动 Tomcat,打开 JMeter,新建线程组,设置线程数为 100,循环次数 10,添加 HTTP 请求,配置登录接口的路径和参数,再加一个JDBC Request去查询选题表,观察响应时间。但这只适合测试,别在答辩现场当着老师跑,万一系统崩了反而扣分。

6. 把毕设项目变成自己的:二次开发与验收演示的五个技巧

到这一步,项目已经能跑,接下来就是决定分数高低的部分。你不能拿着现成源码直接说“这是我的项目”,老师随便问一句“选题审核状态是怎么流转的”就能把你问穿。所以二次开发要选小而精的功能点。

第一个技巧是给系统加一个“导出 Excel”的按钮。这个功能在毕设管理系统中很常见,老师看到你把数据导出到 Excel,会觉得你考虑到了实际办公需求。实现路径不复杂:在 Service 层写一个查询列表的方法,然后用 Apache POI 把数据写入Workbook,通过HttpServletResponse输出流返回给前端。代码大概这样:

response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=scores.xls"); Workbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet("答辩成绩"); Row row = sheet.createRow(0); row.createCell(0).setCellValue("学号"); row.createCell(1).setCellValue("姓名"); // 遍历数据填充行 workbook.write(response.getOutputStream()); workbook.close();

注意Content-Disposition里filename要 URL 编码过,否则中文文件名会乱码。写完这个功能后,你要能解释出用了什么 API,代码放在 Controller 还是 Servlet,数据从哪个 Service 拿。这才是加分点。

第二个技巧是给条列表单加一个“审核意见”字段并回显。很多现成项目里状态只有一个字段,没有历史记录。你可以再加一张review_log表,记录审核人、审核时间、意见、前后状态。这样老师提问“审核流程的痕迹在哪里”时,你可以直接演示。这张表的建表语句跟着数据库脚本走,用ALTER TABLE或新建脚本补上即可。

第三个技巧是准备一套完整的演示数据。找真实感强的学生姓名、课题名称、教师职称,用 SQL 脚本写好,保证每次演示前可以恢复。具体做法是:在数据库脚本的最后加一行TRUNCATE TABLE selection;,然后重新执行一遍插入演示数据的语句。答辩前几天,我自己会跑一遍完整流程:管理员登录 -> 维护教师和课题 -> 学生注册 -> 选题 -> 教师审核 -> 录入成绩。每个状态截一张图,存在手机里备着。

第四个技巧是掌握日志的使用。项目如果用的是 Log4j 或 Slf4j,你要学会看日志输出。比如学生提交选题时,Service 层的 debug 日志会打出绑定参数。答辩演示时如果出现异常,你可以直接打开控制台看日志,指出是哪一行抛的 NPE,并说出修复思路。这比冷场强太多。我在本地跑项目时,习惯把日志级别调成 DEBUG,这样能清楚看到 SQL 语句和事务提交节点。配置一般在log4j.properties或application.yml里,把logger级别从INFO改成DEBUG。

最后一个技巧是给项目写一个“部署说明”文档。把环境版本、JDK 路径、MySQL 初始化命令、默认账号密码、启动步骤写清楚。这不仅是为了给老师看,更是为了三个月后你自己还能把它跑起来。很多人的项目在答辩前就忘了怎么启动,这份文档就是后悔药。

我做毕设那会儿,因为没备份数据库脚本,改坏了课题表,只能跑回机房重新导数据,浪费了一下午。从那以后,我给每个项目都养成了一个习惯:每次向数据库导入脚本之前,先复制一份带日期后缀的备份文件,比如graduation_design_20250410.sql。这个习惯救过我很多次,后来不管是接外包还是帮同学修项目,我都会先把原版脚本存一份再动手。

希望这篇笔记能帮你少踩几个坑,把毕业设计管理系统这个项目从“能跑通”变成“能讲清、能演示、能改”。如果遇到具体报错,记住先把完整堆栈贴出来,再对着配置一项项查——大多数问题都不会只出在一个地方,多点耐心就能定位到。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 4:56:43

5G OTA测试详解:从隔空测量到TRP/TIS的完整工程实践

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

作者头像 李华
网站建设 2026/10/23 4:56:43

MPP数据库性能调优与运维实战:编译、工具链及常见坑

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

作者头像 李华
网站建设 2026/10/18 17:04:59

RFID工业读写器选型与C#上位机对接实战:LWR-7020产线部署指南

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

作者头像 李华
网站建设 2026/10/18 19:04:00

JSP+MySQL体育赛事管理系统毕设实战指南

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

作者头像 李华
网站建设 2026/10/18 19:04:00

ESP32S3红白机模拟器实战:从选型到自制掌机全记录

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

作者头像 李华
网站建设 2026/10/18 19:03:57

Superpowers:让AI编程助手从聊天到动手干活的技能扩展框架

1. 从“superpowers”这个标题说起&#xff1a;它到底是什么第一次看到“superpowers”这个词&#xff0c;很多人脑子里蹦出来的可能是超级英雄电影里的超能力&#xff0c;或者某个游戏里的技能系统。但如果你最近在开发者社区、技术群或者代码托管平台上频繁刷到这个词&#x…

作者头像 李华