JavaWeb学生信息管理系统:课设完整源码部署与二次开发指南
简介基于JavaWeb的学生信息管理系统源码包面向JavaWeb课程设计与期末项目实践适合需要完整可运行案例的在校生作为设计参考。压缩包共222个文件体积约1MB包含java后端源码、jsp动态页面、js/css与easyui等前端资源、png/gif界面截图、sql/db数据库脚本及项目配置文件各类型文件分工明确能较完整展示登录、学生信息维护、查询展示与数据管理等常见课设需求。目前已有307人学习下载。项目为95分以上高分课设作品代码完整、目录结构清晰可直接导入开发工具运行附带数据库脚本与界面预览图既能用于功能演示也可帮助梳理JavaWeb与数据库的联调流程节省课设准备时间适合用来做功能扩展或答辩讲解前的代码复盘。1. 这套学生信息管理系统课设能直接跑的完整样本如果你也是JavaWeb课设做到最后几天对着满屏报错怀疑人生那你大概能理解看到一套“下载就能用”的项目有多关键。这套基于JavaWeb的学生信息管理系统不光是增删改查那么单薄——它带完整数据库脚本和前端界面学籍管理、成绩管理、课程管理这些课设高频模块都能直接演示属于那种“代码完整、导入即跑”的形态。我当时拿到手第一件事就是丢进IDEA里跑通发现它对新手最大的价值是你能看到分层架构、连接池配置、前端框架整合在真实项目里是怎么组织起来的而不是像教科书那样一个文件塞到底。适合两类人一类是拿它当课设底子改改界面和字段就能交差另一类是刚学完Servlet和JSP想知道真实项目大概长什么样的学习者。这篇笔记我会按导入、部署、改写的顺序把关键配置和踩过的坑都摊开说。2. 先看懂项目骨架技术栈选型与代码结构2.1 前端资源里藏着什么H-ui与EasyUI的分工打开解压后的目录前端部分能看到一串CSS和JS文件其中最醒目的是H-ui.css、H-ui.min.css、easyui.css、iconfont.css这些。很多第一次做课设的同学会懵怎么既有H-ui又有EasyUI这俩不是重复了吗实际上这是两套不同定位的东西。H-ui是一套偏后台管理界面的框架负责整体布局、导航、按钮、标签页这些宏观样式文件里的tabs.css、icon.css、linkbutton.css、color.css都是配合它用的。而EasyUI是一套基于jQuery的UI组件库项目里主要负责表格、分页、弹窗这类需要交互的组件比如datagrid.css和datagrid.js就是表格组件专用的。你可以理解为H-ui搭建的是“房子的墙和地板”EasyUI提供的是“家具和电器”。常见做法是页面头部引入H-ui.min.css保证全站风格统一局部页面再按需引入easyui.css和datagrid.css来渲染数据表格。有一点要知道EasyUI的样式必须搭配jquery.easyui.min.js才能初始化组件如果光引CSS不引JS表格会以普通HTML形式显示功能全部失效。2.2 后端分层Servlet DAO Service之间怎么协作后端代码的目录结构是标准的JavaWeb分层。控制层用Servlet接收前端请求业务层放Service接口和实现类数据层是DAO配合JDBC访问MySQL。打个比方前端页面发起一个“查询学生列表”的请求Servlet负责接住这个请求并解析参数然后调用Service层的findAllStudents()方法Service再去调DAO层的queryAll()最后把结果封装成JSON或转发到JSP页面。从代码里能看到项目用的是JDBC直连的方式没有引入MyBatis或Hibernate这种ORM框架。这意味着你必须在DAO层自己写PreparedStatement、自己关闭Connection、PreparedStatement、ResultSet这三个资源。这个设计在课设评分里反而是加分项——老师会觉得你懂得JDBC底层的资源管理和SQL注入防护PreparedStatement可以预编译防注入。前端的交互逻辑也很直白列表页用EasyUI的datagrid向Servlet请求JSON数据表单提交用普通POST请求Servlet再通过response.setContentType(application/json)返回结果。整个流程对初学者来说比SpringBoot那一套容易跟踪得多每一行代码都在明面上。2.3 连接池与配置文件要改的第一处就是jdbc.properties项目里必定有一个数据库连接配置文件通常是jdbc.properties或者db.properties内容大致是数据库URL、用户名、密码这些。你下载后第一件事就是改这里否则启动必报Communications link failure这类错误。jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/student_system?useUnicodetruecharacterEncodingutf-8useSSLfalseserverTimezoneAsia/Shanghai jdbc.usernameroot jdbc.password你的数据库密码 jdbc.maxActive20 jdbc.initialSize5 jdbc.maxWait60000这段配置属于项目运行的生命线。useSSLfalse是因为本地调试没必要走SSL加密如果你用MySQL 8.x还要加上serverTimezoneAsia/Shanghai否则报时区错误。maxActive和initialSize控制连接池峰值和初始连接数课设项目的并发量不大保持默认的20和5就够开太大反而浪费本地资源。提示如果你用的MySQL是8.x版本驱动要换成com.mysql.cj.jdbc.Driver并且jdbc.url里的serverTimezone必须配上这是最常见的启动失败原因之一。3. 数据库设计与初始化把表结构和测试数据跑起来3.1 建库脚本里必有学生、课程、成绩三张核心表这套系统的数据库部分最核心的是学生表、课程表、成绩表三张可能还会带用户表登录用和班级表。学生表student至少包含学号、姓名、性别、年龄、班级字段课程表course包含课程编号、课程名、学分成绩表score通过学号和课程编号关联前两者并存放分数。这是典型的选课成绩关系模型课设答辩时老师通常针对这三张表问你的关联查询。初始化脚本一般是.sql文件用Navicat或命令行执行前先创建数据库再导入。常见做法是在MySQL命令行里执行mysql -u root -p CREATE DATABASE IF NOT EXISTS student_system DEFAULT CHARSET utf8mb4; USE student_system; SOURCE /你的路径/student_system.sql;这里的SOURCE命令是MySQL特有的导入方式好处是能看到每一条SQL的执行结果有语法错误会直接提示报错行号。导入成功后可以用SHOW TABLES;验证三张表和用户表是否都存在。3.2 测试数据为什么重要别删掉那些看起来很假的学号初始化脚本里通常会插入多条测试数据比如2024001这种学号格式、几条分数记录。有些同学觉得数据太假想清空重来我的建议是数据库表结构保留、测试数据至少留几条——原因是系统的列表页、统计图表、分页查询全依赖数据演示你删光了页面就是空的答辩展示效果大打折扣。具体到成绩表脚本里每个学生都对应了好几个课程的成绩记录方便演示多表联查。如果你需要改成自己的数据保留学号和课程编号的关联关系就行。需要特别检查的是外键约束如果导入时报外键错误先看student表有没有数据、course表有没有数据再导score表顺序反了必报Cannot add or update a child row。3.3 连接参数核对表照着检查一遍再启动数据库导入后回到Java代码里核对连接参数。我整理了一张检查表照着走能省掉攻多小时的排查时间检查项正常值/要求出错症状数据库名代码里URL和实际库名一致Unknown database用户名/密码与本地MySQL一致Access denied驱动类5.x用com.mysql.jdbc.Driver8.x用com.mysql.cj.jdbc.DriverClassNotFoundException时区参数MySQL 8.x必须加serverTimezoneAsia/ShanghaiThe server time zone value端口默认3306改过端口需同步改URLConnection refusedSQL脚本编码脚本文件需UTF-8或GBK中文不乱码中文数据显示???4. 核心功能拆解登录鉴权与CRUD的完整实现逻辑4.1 登录模块不是比对用户名密码那么简单系统启动后第一个页面肯定是登录。登录逻辑里除了比对用户名和密码还要考虑用户状态、密码加密方式。从课设代码的常见写法看用户表里会有一个status字段标记账号是否被禁用密码通常也不是明文——这个项目里大概率是MD5加密后存储的所以你在注册新账号的时候SQL里看到的是一串32位哈希值。String sql SELECT * FROM t_user WHERE username ? AND password ?; PreparedStatement ps conn.prepareStatement(sql); ps.setString(1, username); ps.setString(2, MD5Util.md5(password)); ResultSet rs ps.executeQuery(); if (rs.next()) { // 登录成功把用户信息写入session request.getSession().setAttribute(loginUser, rs.getString(realname)); response.sendRedirect(index.jsp); } else { // 登录失败返回错误提示 request.setAttribute(errorMsg, 用户名或密码错误); request.getRequestDispatcher(login.jsp).forward(request, response); }不要直接用Statement拼字符串——那会让SQL注入漏洞直接暴露在代码里。PreparedStatement的?占位符是防止注入的标准做法。MD5Util.md5()是对密码做单向散列加密后再入库比对。如果项目里没有MD5工具类你也可以先用明文课设验收不一定会细究到加密层面但这是答辩时的加分点。4.2 学生管理模块分页查询与新增编辑的完整链路列表页是EasyUI的datagrid组件它向后端发送page和rows两个参数后端需要返回total和rows组成的JSON对象。这个数据格式是EasyUI的硬性要求total是总数rows是当前页数据列表。int page Integer.parseInt(request.getParameter(page)); int rows Integer.parseInt(request.getParameter(rows)); int start (page - 1) * rows; String sql SELECT * FROM student LIMIT ?, ?; PreparedStatement ps conn.prepareStatement(sql); ps.setInt(1, start); ps.setInt(2, rows); ResultSet rs ps.executeQuery(); // 省略遍历rs封装成ListMapString, Object // 再查SELECT COUNT(*) FROM student 得到total // 最后通过JSONUtil将total和list拼成 {total: 100, rows: [...]} 返回LIMIT ?, ?是MySQL的分页语法第一个参数是偏移量第二个是每页条数。前端点第2页时page传2计算后start就是10取第11到20条记录。这里有个坑如果你把start和rows两个参数搞反会出现第二页和第三页数据重复的现象。新增和编辑功能在EasyUI里通常是同一个弹窗表单通过隐藏字段id是否存在来判断是插入还是更新。后端对应的Servlet里会写两个分支本质是INSERT INTO和UPDATE ... SET两条SQL的if-else选择。删除操作一般用批量删除接收前端勾选的ID数组遍历执行DELETE FROM student WHERE id ?。4.3 课程和成绩模块连接学生表与课程表的桥梁成绩模块是这套系统里最能体现数据库功力的部分——成绩表既关联学生表的学号又关联课程表的课程编号查询成绩时必然要JOIN两张表。代码里典型的多表联查长这样SELECT s.stu_no, s.stu_name, c.course_name, sc.score FROM score sc JOIN student s ON sc.stu_id s.id JOIN course c ON sc.course_id c.id WHERE sc.stu_id ?这条SQL把成绩表作为中间表通过外键连接学生和课程。如果你是改这个模块注意JOIN的顺序——先连学生表还是先连课程表不影响结果但连接条件写错会出来笛卡尔积爆炸。成绩统计时比如算出平均分、最高分SQL里用AVG、MAX配合GROUP BY就能完成。5. 部署与运行避坑从IDEA里跑起来要闯的五个关卡5.1 关掉Tomcat强制重启再访问静态资源的怪问题第一次启动后修改前端代码刷新页面发现还是老样子这是很多人都会碰到的。原因是IDEA默认不会自动编译JSP和静态资源即使重启了Tomcat也可能因为文件未同步而加载旧版本。解决方法是改完代码后强制重新构建一次mvn clean package或者直接在IDEA里点击Build - Rebuild Project然后重启Tomcat。如果项目不是Maven管理的那更简单直接把webapp目录下的文件复制到Tomcat的webapps对应目录覆盖后重启。血泪经验Tomcat的webapps目录里如果已经有一个同名项目旧版本文件会被残留导致你改了JSP页面却不生效。把Tomcat里的项目整个删掉再重新部署一次这是最彻底的办法。5.2 报ClassNotFoundException八成是依赖没打进去依赖问题分成两类。一类是缺数据库驱动JAR包比如mysql-connector-java.jar没放到WEB-INF/lib目录下运行时报错java.lang.ClassNotFoundException: com.mysql.jdbc.Driver。另一类是项目引用了EasyUI或H-ui的JAR包但部署时IDEA没有自动同步到lib目录。解决办法是检查项目的Artifacts配置File - Project Structure - Artifacts - Output Layout里找到WEB-INF/lib确认所有JAR包都在列表里。有一个简单判断法——打开Tomcat部署后的WEB-INF/lib文件夹看看里面JAR包是否完整。5.3 前端页面加载不出样式路径写死的坑有时候列表页能打开但界面全裸或者CSS和JS根本没加载打开浏览器按F12看到404。原因通常是页面里的静态资源引用路径写成这样link relstylesheet href/css/style.css这个路径是绝对路径如果你的项目部署上下文不是根路径比如访问地址是http://localhost:8080/student_system/那/css/style.css会被解析成http://localhost:8080/css/style.css直接404。正确写法有两个一是把路径改成相对路径css/style.css二是用${pageContext.request.contextPath}拼出完整动态路径。注意在JSP里最稳妥的写法是href%request.getContextPath()%/css/style.css不管项目部署名是什么都能自动适配。5.4 数据库连接超时半夜改代码时最头疼的问题如果你晚上打开项目点击查询按钮的时候页面一直转圈然后报Connection timed out这多半不是代码错误而是MySQL服务没起来或者连接池里的连接已经过期。检查顺序netstat -ano | findstr 3306 tasklist | findstr mysqld如果没有监听3306端口说明MySQL服务没启动。Windows下用管理员权限打开命令行执行net start mysql如果服务名不对先查服务列表services.msc里MySQL的实际服务名。连接池过期的问题则更隐蔽MySQL默认的wait_timeout是8小时连接池里的空闲连接超过这个时间就会被服务端断开但客户端并不知道。这种情况下重启Tomcat连接池重新建连是最省事的处理。5.5 页面中文全是问号编码的连锁反应中文乱码可能发生在三个环节数据库表字段是英文但数据乱码、JSP页面中文乱码、Servlet返回JSON中文乱码。逐个检查如果数据库插入和查询正常但页面显示乱码先看JSP头部是不是有% page contentTypetext/html;charsetUTF-8 languagejava %再看数据库连接URL里是否有characterEncodingutf-8最后看MySQL的表编码是不是utf8mb4。如果以上都对那问题可能出在Tomcat的server.xml里给Connector加上URIEncodingUTF-8Connector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 URIEncodingUTF-8 /这一套查下来基本能覆盖99%的乱码场景。还有个冷门的点如果你的JSP文件本身是GBK编码但声明了UTF-8也会乱。用IDEA打开右下角看文件编码统一改成UTF-8再保存。6. 往课设上加功能从这套代码到90分以上还有三件该做的事拿到这套项目直接交容易被看出是照搬的——老师一天看几十份代码很容易看出来。要想在答辩时说出东西来我建议你在原有骨架上加一点点自己的动作就行不用推翻重写。第一个低成本动作是把Excel导入加进去。很多课设只做到手工新增学生如果加上“选Excel文件批量导入”功能数据导入效率会直观地提升。实现也不复杂用Apache POI读.xlsx文件遍历每一行往student表insert。代码量控制在100行左右效果是能直接在列表页看到几十条数据批量进入老师对“数据批量维护”的印象分会明显不一样。ListStudent students new ArrayList(); try (Workbook workbook WorkbookFactory.create(new FileInputStream(filePath))) { Sheet sheet workbook.getSheetAt(0); for (Row row : sheet) { if (row.getRowNum() 0) continue; // 跳过表头 Student s new Student(); s.setStuNo(row.getCell(0).getStringCellValue()); s.setStuName(row.getCell(1).getStringCellValue()); s.setGender(row.getCell(2).getStringCellValue()); students.add(s); } } // 遍历students执行批量插入或用批量提交注意row.getRowNum() 0跳过第一行表头WorkbookFactory.create会根据文件类型自动识别.xls和.xlsx不用手动判断版本了。这段代码要放在原有的Servlet入口里接收上传文件的part对象。第二个动作是给列表页加一个“按班级筛选”的下拉框。原项目可能只支持按姓名或学号模糊查加一个班级条件用的是WHERE组合查询改动量集中在DAO层SQL拼接。这里有个细节SQL拼接时用AND连接多个条件但如果某个条件为空就不能拼进去而要动态判断后拼一个WHERE 11再追加条件——这是老派的写法但对这里够用。第三个动作是把密码改成BCrypt加密并补齐“修改密码”功能替代原有的MD5方案。MD5已经被证明不够安全BCrypt的随机盐机制让你每条密码哈希值都不一样。// 使用jBCrypt库 String hashed BCrypt.hashpw(rawPassword, BCrypt.gensalt()); // 校验时 if (BCrypt.checkpw(inputPassword, hashed)) { // 密码正确 }花了三个动作后你要能回答老师三个问题为什么用BCrypt、批量导入的数据格式怎么校验、班级筛选的SQL哪里加了索引。把这套做法走一遍你在答辩台上心里是踏实的。从那以后我每次拿到一份课设项目都会先建一个独立数据库、改一个端口号、跑通一次全流程再开始动手改代码——这三步已经成了肌肉记忆。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

UniMate单卡运行指南:低显存设备如何跑通首次推理

UniMate单卡运行指南:低显存设备如何跑通首次推理

UniMate单卡运行指南:低显存设备如何跑通首次推理 【免费下载链接】UniMate [SIGGRAPH Asia 2026] UniMate: One Unified Model to Animate Diverse Skeletons 项目地址: https://gitcode.com/GitHub_Trending/un/UniMate UniMate 是 SIGGRAPH Asia 2026 的统…

2026/10/4 14:54:42 阅读更多 →
插件机制深度解析:从加载失败到生命周期排查实战

插件机制深度解析:从加载失败到生命周期排查实战

如果你常年混迹技术社区,会发现“plugins”这个词的出现频率高得吓人——有人问 IAR plugins 是干什么的,有人贴出failed to load plugins web boot: 2 entries did not activate linxin666/dsh-p这种报错求助,还有人讨论 MusicFree 的插件到…

2026/10/4 14:53:41 阅读更多 →
插件系统工作原理与加载失败排查:从日志到实战

插件系统工作原理与加载失败排查:从日志到实战

我昨天帮一个朋友排查他本地开发环境的问题,打开他的应用日志,一排一模一样的红字:failed to load plugins web boot: 2 entries did not activate。他问我这到底什么意思,是不是电脑中毒了。我解释了半天,后来发现不仅…

2026/10/4 14:53:41 阅读更多 →

最新新闻

vscode使用插件KoroFileHeader添加注释,以及解决快捷键冲突详解(fileheader、cursorTip)

vscode使用插件KoroFileHeader添加注释,以及解决快捷键冲突详解(fileheader、cursorTip)

/* 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 15:37:10 阅读更多 →
openrig装配指南:Claude Code与Codex多工具共存实践

openrig装配指南:Claude Code与Codex多工具共存实践

1. 从“openrig”这个标题说起:它到底想解决什么问题第一次看到“openrig”这个词,我脑子里蹦出来的不是某个具体软件,而是一种很典型的开发者诉求:把散落在终端里的 AI 编码工具,用一个统一的“架子”给支棱起来。rig…

2026/10/4 15:37:10 阅读更多 →
Ubuntu避坑指南:Windows10 用 SSH 连接 Ubuntu 的配置与 TaoToken 统一 Key 接入

Ubuntu避坑指南:Windows10 用 SSH 连接 Ubuntu 的配置与 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 15:37:10 阅读更多 →
插件系统原理与排查实战:从IAR、Harness到MusicFree

插件系统原理与排查实战:从IAR、Harness到MusicFree

开门见山说个现象:你越是频繁接触开发工具、嵌入式IDE、开源播放器,越会撞见一个词刷屏——plugins。最近我看到好几个相关热搜,从"IAR plugins 是干什么的"到"harness failed to load plugins web boot: 2 entries did not a…

2026/10/4 15:37:09 阅读更多 →
MacOS安装go-oci8踩坑实录:从Oracle Instant Client到TaoToken统一Key配置

MacOS安装go-oci8踩坑实录:从Oracle Instant Client到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 15:37:09 阅读更多 →
编译中文乱码问题排查:从编码声明到 TaoToken 统一 Key 的工程化配置

编译中文乱码问题排查:从编码声明到 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 15:36:09 阅读更多 →

日新闻

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/4 1:00:58 阅读更多 →
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/4 1:00:58 阅读更多 →
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/4 1:00:58 阅读更多 →

周新闻

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/4 1:00:58 阅读更多 →
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/4 1:00:58 阅读更多 →
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/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/3 9:42:36 阅读更多 →