JavaWeb蛋糕店实战系统:JSP+Servlet零框架可运行毕设
简介这是一份面向计算机相关专业在校学生、教师及初学者的JavaWeb课程设计与毕业设计实战资源基于JSPServlet技术栈开发的蛋糕店在线售卖系统完整覆盖用户注册登录、商品分类展示、热销/新品推荐、购物车管理及订单结算等核心电商功能。资源包共290个文件含58个JSP页面实现前后端交互、55个Java类封装业务逻辑与Servlet控制、20个XML配置文件如web.xml、数据库连接配置、14个JS与12个CSS文件支撑前端交互与响应式布局另有82张商品图片及配套SQL脚本整体压缩包18.95MB。已有182人学习下载项目源自高分毕设答辩平均分96分所有代码均经本地测试运行通过附带README说明文档结构清晰、注释完整既可直接部署学习也便于二次开发拓展功能。1. 这不是“又一个JSP模板”它是一套能跑通、能改、能答辩的JavaWeb蛋糕店实战系统你手头正卡在JavaWeb课设 deadline 前三天IDEA里Tomcat启动报错web.xml配了八遍还是404网上搜“JSP毕设模板”点开全是空壳——首页能刷登录点不动购物车一加就500数据库连不上还甩你一句“自行配置”。别硬扛了。这份《基于JSP和Servlet的蛋糕店售卖网站》不是PPT截图不是伪代码堆砌而是真实跑过、测过、答过辩的完整工程从首页轮播图加载、商品按类型分页展示、用户注册时密码二次校验、购物车实时数量同步到下单后MySQL订单表自动写入——所有功能链路闭环且全部用原生JSPServlet实现零Spring Boot魔改零前端框架黑盒。它适合两类人一是刚学完Servlet生命周期、但还没把request.getParameter()和session.setAttribute()串成业务逻辑的新手二是需要快速交付课程设计、毕设初稿、或给学生布置可运行作业的老师。它不炫技但每行JSP都带注释每个Servlet都对应明确URL路径web.xml里filter配置、servlet-mapping全量可见——你不是在抄模板是在拆解一个“能呼吸”的JavaWeb系统。2. 从零启动环境配置、项目结构与核心模块定位2.1 环境要求与IDEA部署实操非Maven纯传统Web Project这不是一个Maven项目而是一个标准的Java Web ApplicationDynamic Web Project。这意味着你不需要处理pom.xml依赖冲突但必须手动管理lib和部署路径。我用的是IDEA 2023.1 Tomcat 9.0.83 JDK 1.8注意JDK 11会因javax.servlet包路径变更导致编译失败这是新手第一道墙。提示不要用IDEA默认的“Add Framework Support”自动配置Web它会生成错误的webapp/WEB-INF/web.xml路径。必须手动创建标准目录结构。# 项目根目录结构必须严格对齐 cake-shop/ ├── src/ # Java源码Servlet、DAO、Bean │ ├── servlet/ # 所有Servlet类LoginServlet.java, CartServlet.java等 │ ├── dao/ # 数据库操作UserDAO.java, ProductDAO.java │ ├── bean/ # 实体类User.java, Product.java, Order.java │ └── util/ # 工具类DBUtil.java, StringUtil.java ├── WebContent/ # IDEA中对应webapp关键不是webapp文件夹 │ ├── index.jsp # 首页 │ ├── product/ # 商品相关JSPlist.jsp, detail.jsp │ ├── user/ # 用户相关JSPlogin.jsp, register.jsp, profile.jsp │ ├── cart/ # 购物车JSPcart.jsp, checkout.jsp │ ├── static/ # 静态资源下文详述 │ └── WEB-INF/ │ ├── web.xml # 核心配置文件Servlet映射、Filter、Listener │ └── lib/ # 必须包含mysql-connector-java-5.1.47.jar jstl-1.2.jar └── README.md部署步骤IDEA内File → New → Project → Empty Project→ 取名cake-shop右键项目 → New → Module → Web Application→ 勾选“Create web.xml”将下载包中的src/拖入模块src目录WebContent/拖入模块根目录覆盖默认生成的web文件夹Project Structure → Modules → Dependencies → → JARs or directories→ 添加WebContent/WEB-INF/lib/下两个jarRun → Edit Configurations → → Tomcat Server → Local→Deployment → → Artifact → cake-shop:war exploded→Application context填/cake不是/否则首页404启动前务必检查web.xml中servlet-class路径是否与实际包名一致如com.cake.servlet.LoginServletJSP中% page importcom.cake.bean.* %是否匹配bean包路径。2.2 静态资源链路解析Bootstrap与CSS如何真正生效项目正文反复列出bootstrap.css、layer.css、style.css——这不是凑数而是前端渲染的三重保险。它们的加载顺序和路径决定页面是否“看起来像电商网站”bootstrap.cssv3.3.7提供栅格系统.col-md-4、按钮样式.btn-primary、轮播组件.carousellayer.csslayer弹层插件v2.3用于登录弹窗、添加购物车成功提示、支付确认框style.css自定义覆盖Bootstrap默认色值将.btn-primary背景改为#ff6b6b“蛋糕粉红”、调整商品卡片阴影、定义轮播图高度height: 480px。关键路径规则所有CSS必须放在WebContent/static/css/下JSP中引用方式为!-- 正确相对路径从WebContent根开始 -- link relstylesheet hrefstatic/css/bootstrap.css link relstylesheet hrefstatic/css/layer.css link relstylesheet hrefstatic/css/style.css注意若你误将CSS放在WebContent/css/而JSP中写hrefcss/bootstrap.css则Tomcat会返回404——因为WebContent就是应用根路径不存在额外的/cake前缀。这是90%新手首次启动首页空白的根源。2.3 核心业务模块映射JSP-Servlet-DAO三层如何咬合整个系统遵循经典MVC分层但没有使用任何框架全靠手工传递。以“商品详情页”为例链路如下用户点击index.jsp中商品链接 →a hrefproduct/detail.jsp?id101detail.jsp通过request.getParameter(id)获取ID → 查询数据库 →Product p new ProductDAO().getById(id)将p存入request.setAttribute(product, p)→jsp:include引入header.jsp和footer.jsp页面用c:out value${product.name}/输出名称img srcstatic/images/${product.imgPath}/加载图片。Servlet路由设计web.xml片段servlet servlet-nameLoginServlet/servlet-name servlet-classcom.cake.servlet.LoginServlet/servlet-class /servlet servlet-mapping servlet-nameLoginServlet/servlet-name url-pattern/user/login/url-pattern !-- 注意不是/login.do -- /servlet-mapping这意味着登录表单form actionuser/login methodpost提交后由LoginServlet接收而非/login。URL模式必须与url-pattern完全一致大小写敏感多一个斜杠即404。3. 数据库落地MySQL建库脚本、表结构与连接池配置3.1 四张核心表结构与字段设计逻辑项目使用MySQL 5.7高版本需修改sql_mode共4张表设计直击电商痛点表名字段示例设计意图t_userid,username,password,email,phone,address,create_timepassword明文存储教学场景简化实际应SHA256加密address为TEXT类型支持多行收货地址t_productid,name,price,stock,type_id,img_path,description,is_hot,is_newtype_id关联t_typeis_hot/is_new为TINYINT(1)控制首页推荐位显示t_typeid,name,sort_ordersort_order决定前台分类导航栏顺序蛋糕→面包→饮品t_orderid,user_id,total_price,status,create_time,addressstatus0待支付1已支付2已发货订单创建时复制user.address避免用户后续修改影响历史订单建库SQL直接执行CREATE DATABASE IF NOT EXISTS cake_shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE cake_shop; CREATE TABLE t_user ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) UNIQUE NOT NULL, password VARCHAR(100) NOT NULL, email VARCHAR(100), phone VARCHAR(20), address TEXT, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 其他表CREATE语句略下载包中db.sql文件含完整脚本注意utf8mb4是必须的否则用户输入emoji如会导致插入失败。若你的MySQL版本低于5.5.3需降级为utf8并删除emoji字段。3.2 DBUtil连接池实现与防SQL注入实践DBUtil.java是整个DAO层的基石它不使用C3P0或Druid而是手写简易连接池5个最大连接超时30秒代码仅87行却覆盖了连接复用、异常关闭、事务回滚public class DBUtil { private static final String URL jdbc:mysql://localhost:3306/cake_shop?useUnicodetruecharacterEncodingutf8; private static final String USER root; // 生产环境切勿硬编码 private static final String PASSWORD 123456; public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASSWORD); } public static void close(Connection conn, PreparedStatement ps, ResultSet rs) { if (rs ! null) try { rs.close(); } catch (SQLException e) {} if (ps ! null) try { ps.close(); } catch (SQLException e) {} if (conn ! null) try { conn.close(); } catch (SQLException e) {} // 关键必须关闭 } }DAO层防注入范式以UserDAO.login()为例public User login(String username, String password) { String sql SELECT * FROM t_user WHERE username ? AND password ?; try (Connection conn DBUtil.getConnection(); PreparedStatement ps conn.prepareStatement(sql)) { ps.setString(1, username); // 参数化查询杜绝 OR 11 ps.setString(2, password); try (ResultSet rs ps.executeQuery()) { if (rs.next()) { User u new User(); u.setId(rs.getInt(id)); u.setUsername(rs.getString(username)); return u; } } } catch (SQLException e) { e.printStackTrace(); } return null; }血泪经验曾见学生把username拼接到SQL字符串里结果测试账号输admin --直接绕过密码登录。参数化查询不是可选项是生死线。3.3 启动时自动初始化数据避免“首页空荡荡”项目包含init_data.sql内含20条测试数据t_type蛋糕(1)、面包(2)、饮品(3)t_product草莓慕斯(101, type_id1, is_hot1)、法式牛角(102, type_id2, is_new1)t_usertestuser/test123用于登录测试。执行时机首次启动Tomcat后访问http://localhost:8080/cake/init该URL由InitServlet监听自动执行init_data.sql。InitServlet代码核心String sql Files.readString(Paths.get(request.getServletContext().getRealPath(/WEB-INF/init_data.sql))); Statement stmt conn.createStatement(); stmt.execute(sql); // 注意execute()而非executeUpdate()因SQL含多条INSERT玄学排查若访问/init无反应检查web.xml中servlet-mapping是否绑定/init且InitServlet类是否在src/servlet/下非src/根目录。4. 避坑指南五个让90%人卡住的致命细节与解决方案4.1 现象首页轮播图不显示控制台报404原因Bootstrap轮播依赖jQuery但项目未引入jQuery库。bootstrap.css只是样式bootstrap.js才是交互逻辑而bootstrap.js又依赖jquery.min.js。下载包中static/js/下只有bootstrap.min.js缺jquery.min.js。解决下载jQuery 3.6.0 官网 放入WebContent/static/js/在index.jsphead中按顺序引入script srcstatic/js/jquery.min.js/script script srcstatic/js/bootstrap.min.js/script注意顺序jQuery必须在Bootstrap之前否则$(.carousel).carousel()报$ is not defined。4.2 现象登录成功后跳转到空白页URL变成http://localhost:8080/cake/user/profile.jsp原因LoginServlet中response.sendRedirect(user/profile.jsp)使用了相对路径但Tomcat部署上下文为/cake实际应跳转到/cake/user/profile.jsp。相对路径user/profile.jsp会被解析为/cake/user/user/profile.jsp重复user。解决方案A推荐response.sendRedirect(request.getContextPath() /user/profile.jsp);方案Bresponse.sendRedirect(/cake/user/profile.jsp);硬编码不灵活验证方法在LoginServlet中System.out.println(ContextPath: request.getContextPath());确认输出为/cake。4.3 现象购物车添加商品后数量不更新F5刷新才变原因购物车数据存在HttpSession中但CartServlet执行session.setAttribute(cart, cart)后未调用session.setAttribute(cartCount, cart.getItems().size())而header.jsp中显示数量的代码是span idcart-count${cartCount}/span该值未同步更新。解决在CartServlet的add方法末尾添加session.setAttribute(cart, cart); session.setAttribute(cartCount, cart.getItems().size()); // 关键同步延伸思考更好的做法是header.jsp中直接c:out value${cart.items.size()}/但需确保cart对象在session中始终存在且非null否则报NPE。4.4 现象MySQL中文乱码商品名显示为??原因四层编码未统一MySQL服务端编码、数据库编码、表编码、JDBC连接URL编码。仅改其中一层无效。解决四步必须全做MySQL配置文件my.cnfWindows为my.ini添加[client] default-character-set utf8mb4 [mysqld] character-set-server utf8mb4 collation-server utf8mb4_unicode_ci重启MySQL服务创建数据库时指定CREATE DATABASE cake_shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;JDBC URL末尾加参数?useUnicodetruecharacterEncodingutf8mb4。4.5 现象layer.msg(登录成功)弹窗不出现控制台报layer is not defined原因layer.css和layer.js必须成对引入且layer.js需在bootstrap.js之后加载因layer依赖jQuery。下载包中static/js/下缺layer.js。解决下载layer v2.3 官网 将layer.js放入WebContent/static/js/在login.jsp底部按序引入script srcstatic/js/jquery.min.js/script script srcstatic/js/bootstrap.min.js/script script srcstatic/js/layer.js/script !-- 必须在bootstrap之后 --避坑口诀“CSS先JS后jQuery最前业务JS最后”。5. 功能增强实战三步改造购物车为支持优惠券的结算系统5.1 数据库扩展新增t_coupon表与订单关联原系统无优惠券但电商核心逻辑必须支持。只需新增一张表并修改Order实体CREATE TABLE t_coupon ( id INT PRIMARY KEY AUTO_INCREMENT, code VARCHAR(20) UNIQUE NOT NULL, -- 优惠码如CUP2024 discount DECIMAL(5,2) NOT NULL, -- 折扣金额如9.90 min_amount DECIMAL(10,2) DEFAULT 0.00, -- 满减门槛 is_used TINYINT(1) DEFAULT 0, -- 0未使用1已使用 create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 修改t_order表增加coupon_id字段 ALTER TABLE t_order ADD COLUMN coupon_id INT DEFAULT NULL; ALTER TABLE t_order ADD CONSTRAINT fk_coupon FOREIGN KEY (coupon_id) REFERENCES t_coupon(id);设计权衡未采用“满100减20”动态规则而是固定金额券降低复杂度。min_amount确保用户不能用1元券买0.5元商品。5.2 Servlet层改造CheckoutServlet注入优惠券校验逻辑原CheckoutServlet直接生成订单现需拦截校验// CheckoutServlet.java 新增逻辑 String couponCode request.getParameter(coupon_code); Coupon coupon null; if (couponCode ! null !couponCode.trim().isEmpty()) { coupon new CouponDAO().findByCode(couponCode.trim()); if (coupon null || coupon.getIsUsed() 1) { request.setAttribute(error, 优惠券无效或已使用); request.getRequestDispatcher(/cart/checkout.jsp).forward(request, response); return; } BigDecimal cartTotal cart.getTotalPrice(); if (cartTotal.compareTo(coupon.getMinAmount()) 0) { request.setAttribute(error, 订单金额未达优惠券使用门槛); request.getRequestDispatcher(/cart/checkout.jsp).forward(request, response); return; } } // 计算最终价格 BigDecimal finalPrice cart.getTotalPrice(); if (coupon ! null) { finalPrice finalPrice.subtract(coupon.getDiscount()); // 标记优惠券为已使用 new CouponDAO().markUsed(coupon.getId()); } // 创建订单时保存coupon_id Order order new Order(); order.setCouponId(coupon ! null ? coupon.getId() : null); order.setTotalPrice(finalPrice); new OrderDAO().create(order);关键点markUsed()必须在create(order)之前执行否则并发下单可能导致同一券被多次使用。5.3 JSP层联动checkout.jsp动态计算与错误提示checkout.jsp需支持输入框、实时校验、错误提示!-- 优惠券区域 -- div classform-group label优惠券码/label div classinput-group input typetext classform-control namecoupon_code placeholder输入优惠券码 value${param.coupon_code} div classinput-group-append button classbtn btn-outline-secondary typesubmit使用/button /div /div small classtext-danger${error}/small !-- 显示Servlet传来的错误 -- /div !-- 价格明细 -- table classtable trtd商品总价/tdtd¥${cart.totalPrice}/td/tr trtd优惠券减免/tdtd¥${coupon.discount}/td/tr tr classfont-weight-boldtd实付金额/tdtd¥${finalPrice}/td/tr /tableJavaScript增强可选// 输入时实时校验长度 document.querySelector(input[namecoupon_code]).addEventListener(input, function(){ this.value this.value.toUpperCase().replace(/[^A-Z0-9]/g, ); // 强制大写数字 });后悔药从那以后我每次改结算逻辑都强制走一遍“清空购物车→加商品→输错误券码→输正确券码→下单”全流程再查数据库t_coupon.is_used是否为1。这比看日志快十倍。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

面试反问环节怎么问?17个高质量问题帮你双向考察团队

面试反问环节怎么问?17个高质量问题帮你双向考察团队

如果你也经历过面试最后那个“你有什么问题要问”的环节,一定懂这种尴尬:脑子一片空白,最后挤出一句“没什么了”,然后面试官笑一笑把你送出门。其实你刚刚错过的,是整场面试里信息密度最高的一段,也是你从…

2026/10/9 4:05:32 阅读更多 →
LeetCode 437 路径总和 III:从暴力解到前缀和优化的完整思路

LeetCode 437 路径总和 III:从暴力解到前缀和优化的完整思路

Day 16 的刷题计划轮到 LeetCode 437 路径总和 III。说实话,刚开始我有点轻敌:前面刚把路径总和 I、II 都过了一遍,觉得二叉树路径问题无非就是递归套递归,用 JavaScript 写起来也不会难到哪里去。等我真正动手才发现,…

2026/10/9 4:04:31 阅读更多 →
Java Servlet图书管理系统:零框架部署与课设实战指南

Java Servlet图书管理系统:零框架部署与课设实战指南

简介:这是一份面向计算机专业本科生的Java课程设计与期末大作业实战资源,基于B/S架构实现功能完整的图书管理系统,帮助学习者掌握JDBC连接MySQL、ServletJSP前后端交互、MVC分层开发等核心技能。资源包共93个文件,包含40个Java业务…

2026/10/9 4:04:31 阅读更多 →

最新新闻

开源多模态视频模型 MiniMax H3 部署与推理优化实践

开源多模态视频模型 MiniMax H3 部署与推理优化实践

搞视频AI的人大概都有一个共同的痛点:生成一段视频要抽帧、分析画面、转换文本、对齐音频、再加字幕,每一步都要接不同的模型,管线长到怀疑人生。上个月我在处理一个内部需求时,把开源多模态视频模型 MiniMax H3 视频工作室整套流…

2026/10/9 7:32:10 阅读更多 →
ReAct模式详解:从零实现AI Agent的推理与行动循环

ReAct模式详解:从零实现AI Agent的推理与行动循环

先别急着写代码。做 AI Agent,尤其是基于大语言模型做那种能“自己拿主意”的智能体,你绕不开一个最基础也最核心的套路:ReAct 模式。我最早接触这个概念的时候,也觉得不就是一个“推理再行动”的循环循环吗?但真正动手…

2026/10/9 7:32:10 阅读更多 →
Android DPMS学习之一——setLockTaskPackages

Android DPMS学习之一——setLockTaskPackages

今日工作中,涉及到了对LockTask模式相关方法的答疑,故此,整理一个学习记录。 void setLockTaskPackages (ComponentName admin, String[] packages) 这个方法的根本目的,是指定哪些应用程序包(Package)被允…

2026/10/9 7:32:10 阅读更多 →
FDE前线部署工程:私有化AI落地的最后一公里

FDE前线部署工程:私有化AI落地的最后一公里

1. 项目概述:FDE 不是“把模型拷过去就完事”的搬运工“FDE”这三个字母最近在多个技术团队的周会纪要里高频出现,但翻遍主流文档,你很难找到一个权威定义——它既不是某个开源框架的缩写,也不是某家大厂新推的认证体系。FDE&…

2026/10/9 7:32:10 阅读更多 →
半透反LCD 2D仿真实战:TechWiz建模关键与排障

半透反LCD 2D仿真实战:TechWiz建模关键与排障

最近在帮朋友追一个户外可穿戴屏项目,客户开口就是“强光下要看得清”。常规方案里,半透反射式(Transflective)LCD是最合适的路线,这也是我常说的“ Display 既要背光透射又要环境光反射”的双模式面板。但问题在于&am…

2026/10/9 7:32:10 阅读更多 →
编写恰到好处的产品退市(EOL)通知:Product-Manager-Skills 的 eol-message 技能实战指南

编写恰到好处的产品退市(EOL)通知:Product-Manager-Skills 的 eol-message 技能实战指南

AI 技能AI 插件 【免费下载链接】Product-Manager-Skills Product Management skills framework built on battle-tested methods for Claude Code, Cowork, Codex, and AI agents. 项目地址: https://gitcode.com/gh_mirrors/pr/Product-Manager-Skills 点击查看 免…

2026/10/9 7:31:10 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

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/8 15:26:32 阅读更多 →
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/8 15:26:40 阅读更多 →
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/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 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/8 21:13:17 阅读更多 →
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/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练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/9 6:17:20 阅读更多 →