新闻详情

新闻详情

首页 / 资讯中心 / 详情

JavaWeb超市管理系统毕设源码拆解:JSP+Servlet+MySQL全链路实现

发布时间:2026/10/1 12:45:48来源:尧图网络
JavaWeb超市管理系统毕设源码拆解:JSP+Servlet+MySQL全链路实现
简介基于JavaWeb的超市管理系统毕业设计资料包是一个可运行的完整项目面向计算机、通信、人工智能、自动化等专业学生和教师适合用于期末课程设计、课程大作业或毕业设计参考也能帮助JavaWeb初学者理解分层架构与业务开发流程。压缩包为ZIP格式共386个文件、10.36MB其中包含49个Java源文件、56个JSP页面、98个class编译文件、1个SQL数据库脚本同时配有CSS/SCSS/LESS样式、JS脚本、XML及MF等配置文件便于按模块查看代码与资源配置。目前已有156人学习使用项目源于个人毕业设计答辩评审分达98分代码经调试测试可正常运行。资源覆盖商品、会员、供应商等核心管理模块既包含前端页面与后端Servlet、DAO层实现也提供数据库初始化脚本和配置说明可帮助读者梳理JavaWeb项目从请求处理到数据持久化的完整链路。基础较好的学习者可直接在此基础上修改调整扩展新的业务功能整体结构清晰学习与借鉴价值较高。1. JavaWeb 超市管理系统为什么 98 分的毕设看起来这么朴素每年一到毕设季被问得最多的就是有没有能直接跑的 JavaWeb 项目。这套基于 JavaWeb 的超市管理系统就是这么一类货真价实的源码包JSP 写页面、Servlet 接请求、DAO 层管数据库、MySQL 做存储压缩包里连建表脚本带测试数据一起给你。项目正文里反复出现的 ProductDaoImpl、VipDaoImpl、ProviderDaoImpl、CheckoutServlet、UserDaoImpl 这五个类基本就是整个系统的心脏——商品、会员、供应商、用户、收银五条业务线全压在它们身上。这套东西答辩能拿 98 分靠的不是界面花哨而是把 JavaWeb 课设里的考点铺得很全登录会话控制、增删改查、事务提交、多表关联查询一个不少。适合两类人一类是拿它当 Java 毕业设计底子改改字段和页面就能交另一类是刚学完 JSP/Servlet想找一个完整案例对照源码落到实处的小白。下文我就按数据模型 → 调用链 → 部署运行 → 踩坑 → 二次开发的顺序拆给你看每个环节都给出能直接抄的代码和参数。2. 数据模型与 DAO 层五张表加四个实现类先把地基看清楚这个系统从代码结构上看跟大多数课程设计一样并不花哨但 98 分的关键在于它的分层没有乱写。我拿到手第一件事不是点运行而是把源码包里的类列表过一遍去掉编译产物后Java 文件集中在 dao、dao.impl、entity、servlet、util 几个包里这种包结构本身就是 JavaWeb 标准答卷。先把地基看清楚后面改功能才不会改一处崩三处。2.1 五个核心类先分清谁管数据、谁管流程打开源码包你会看到一组以 DaoImpl 结尾的类外加一个 CheckoutServlet。很多新手误以为它们在同一层实际上分属两层DAO 实现类全部待在数据访问层只负责把 SQL 变成 Java 对象CheckoutServlet 是控制器负责把多个 DAO 的方法串成一条完整收银业务。这个区分是整篇代码的阅读线索。先看 DAO 层的接口设计。以商品为例ProductDaoImpl 实现的接口大致长这样public interface ProductDao { ListProduct findAll(); Product findById(int id); ListProduct findByProviderId(int providerId); boolean add(Product product); boolean update(Product product); boolean delete(int id); }接口和实现分开写就是课设要求里常说的面向接口编程。真正干活的 ProductDaoImpl 里每个方法都是同一个套路拿连接 → 准备 SQL → 绑定参数 → 执行 → 遍历结果集 → 封装成对象。这个套路值得反复看三遍因为后面 VipDaoImpl、ProviderDaoImpl、UserDaoImpl 全是一模一样的骨架区别只在表名和字段名。public class ProductDaoImpl implements ProductDao { Override public ListProduct findAll() { ListProduct list new ArrayList(); String sql SELECT id, name, price, stock, provider_id FROM t_product; try (Connection conn DBUtil.getConnection(); PreparedStatement ps conn.prepareStatement(sql); ResultSet rs ps.executeQuery()) { while (rs.next()) { Product p new Product(); p.setId(rs.getInt(id)); p.setName(rs.getString(name)); p.setPrice(rs.getDouble(price)); p.setStock(rs.getInt(stock)); p.setProviderId(rs.getInt(provider_id)); list.add(p); } } catch (SQLException e) { e.printStackTrace(); } return list; } }这里几个参数要留意。第一SQL 里的列名必须和表结构完全一致ResultSet 是按列名取值的Java 里写了驼峰字段名去映射下划线列名取不到值的时候最容易懵第二PreparedStatement 的参数索引从 1 开始参数一多顺序就乱我习惯在每行参数前加注释第三try-with-resources 写法自动关连接而 update、delete 这类方法靠 executeUpdate 的返回值判断成功与否返回的是受影响行数大于 0 才算改到了数据。五个类的分工其实很清晰UserDaoImpl 管登录用户ProductDaoImpl 管商品库存VipDaoImpl 管会员等级和折扣ProviderDaoImpl 管供应商CheckoutServlet 不直接碰数据库它是收银流程的调度员。要特别注意收银链路里用的扣库存方法在源码里是带 Connection 参数的重载版本专门给事务场景用这个细节放到 2.3 展开。理解了这个分层后面你改任何功能都知道该去动哪个文件。2.2 数据库五张表字段怎么设计才能撑起收银源码里附带的建表脚本是整套系统的地基。核心表五张从表名就能对应上刚才那五个类表名用途关键字段t_user后台登录账号id, username, passwordt_vip会员信息与折扣id, name, phone, discountt_product商品与库存id, name, price, stock, provider_idt_provider供应商id, name, contact, phonet_sale销售流水id, vip_id, total_price, sale_time注意 t_product 里的 provider_id 和 t_sale 里的 vip_id这两个是外键。建表脚本里主表的写法大致是这样CREATE TABLE t_product ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, price DECIMAL(10,2) NOT NULL, stock INT NOT NULL DEFAULT 0, provider_id INT, CONSTRAINT fk_provider FOREIGN KEY (provider_id) REFERENCES t_provider(id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;price 用 DECIMAL(10,2) 而不是 DOUBLE是这套设计里比较讲究的一点。金额用浮点类型累计结算时会出现 0.1 加 0.2 不等于 0.3 的精度问题DECIMAL 是定点数做账目计算不会翻车。外键约束加上以后删供应商时如果还有商品引用它数据库会直接报错拦截这其实是个保护机制。源码里刻意留着约束就是给你演示完整的多表关联行为。字符集统一用 utf8mb4和 4.2 节建库命令保持一致中文乱码问题可以从根上少掉一半。2.3 事务边界收银结算为什么必须手动提交这套系统里唯一涉及事务的流程是收银。一次完整结算要做三件事扣商品库存、写销售流水、更新会员累计金额。这三件事任何一个失败前面成功的操作都得回滚否则就会出现钱扣了库存没减的脏数据。看 CheckoutServlet 里的事务处理套路在 JDBC 层是通过关闭自动提交实现的Connection conn DBUtil.getConnection(); conn.setAutoCommit(false); try { productDao.deductStock(conn, productId, count); saleDao.insert(conn, vipId, totalPrice); vipDao.updateTotal(conn, vipId, totalPrice); conn.commit(); } catch (SQLException e) { conn.rollback(); throw new RuntimeException(结算失败事务已回滚, e); } finally { conn.setAutoCommit(true); conn.close(); }这段代码有三个关键点。第一setAutoCommit(false) 必须在第一个数据库操作之前调用一旦有异常rollback 会把所有未提交的操作全部撤销第二注意这里 DAO 方法的签名是带着 Connection 参数的三个操作必须用同一个连接如果每个 DAO 方法内部自己 new 连接事务就彻底失效——这是很多照着教程抄的人事务不生效的根源第三finally 里把 autoCommit 恢复成 true 再关连接是为了连接回到连接池之后状态是干净的。理解了这条事务边界再去看源码里的 CheckoutServlet 和几个 DAO就是按图索骥了。3. 登录、商品与收银Servlet 把 DAO 串成完整调用链数据层看明白之后看它是怎么被 Servlet 串起来的。这一章的阅读顺序是登录 → 商品维护 → 收银结算。难度逐级递增收银那一段是整份源码的精华也是答辩时最容易被打分老师追问的地方。3.1 登录校验UserDaoImpl 加上 Session 就够用登录是所有功能的前置关卡。源码里的做法是 JSP 页面提交用户名密码到 LoginServletLoginServlet 调 UserDaoImpl 里的查询方法命中了就把用户塞进 Session。UserDaoImpl 的核心方法长这样public User findByUsernameAndPassword(String username, String password) { String sql SELECT id, username, real_name FROM t_user WHERE username? AND password?; try (Connection conn DBUtil.getConnection(); PreparedStatement ps conn.prepareStatement(sql)) { ps.setString(1, username); 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)); u.setRealName(rs.getString(real_name)); return u; } } } catch (SQLException e) { e.printStackTrace(); } return null; }注意 SQL 里直接比较的是明文密码。毕设阶段可以这么写但你自己做正式项目时至少要加一层 MD5 加盐否则数据库一旦泄露账号密码全部裸奔。Servlet 收到结果后做两件事查不到就回登录页带错误提示查到就把 User 对象放进 Session。HttpSession session request.getSession(); session.setAttribute(loginUser, user); response.sendRedirect(request.getContextPath() /product/list);sendRedirect 的地址带上了 getContextPath() 前缀这是 JavaWeb 里最容易踩的路径坑之一5.5 节会专门说。Session 存好之后每个受保护页面要做的事情是到 Servlet 里取 Session 判断是否为空为空就扔回登录页。更规范的写法是用一个 Filter 拦截所有 /admin 开头的路径统一做登录校验源码如果没写你二次开发时可以自己补上这也是答辩时的加分项。3.2 商品维护列表查询、新增、删除的完整链路商品模块是典型的全链路商品列表页 product_list.jsp 发起请求 → ProductListServlet → ProductDaoImpl.findAll() → 回到 product_list.jsp 用 JSTL 循环渲染。新增商品走另一个 Servlet——ProductAddServlet接收表单参数后封装成 Product 对象调 add 方法。protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding(UTF-8); String name request.getParameter(name); double price Double.parseDouble(request.getParameter(price)); int stock Integer.parseInt(request.getParameter(stock)); int providerId Integer.parseInt(request.getParameter(providerId)); Product p new Product(); p.setName(name); p.setPrice(price); p.setStock(stock); p.setProviderId(providerId); boolean ok productDao.add(p); response.sendRedirect(request.getContextPath() /product/list); }这段代码有两点值得抠。一是 setCharacterEncoding(UTF-8) 必须写在取参数之前否则中文商品名直接乱码二是 Integer.parseInt 没做异常捕获如果页面传了空字符串这里会抛 NumberFormatException完整项目应该在 JSP 端先做数据校验或者在 Servlet 里用正则过滤。源码保留这种简化写法是故意让你看到边界在哪答辩时主动说出这里应该加校验反而是加分项。删除和修改的逻辑相似删除一般是 GET 请求带 id 参数Servlet 接收后调 delete 再重定向回列表页修改是先按 id 查出来回填到编辑表单提交后走 update。这套表单 → Servlet → DAO → 重定向的循环是 JSPServlet 项目的标准动作。把商品模块吃透会员和供应商模块就是复制粘贴改字段的事VipDaoImpl 和 ProviderDaoImpl 的调用链可以照抄这一节。3.3 收银结算一次结账要过四道关卡CheckoutServlet 是这个系统里最值得读的类因为它串了三个 DAO。一次正常结账页面提交过来的数据包含商品 ID、购买数量、会员 ID散客可以为空。Servlet 内部按四步走。第一步检查库存是否充足。库存查询走 ProductDao.findById拿到商品对象后比较 stock 与购买数量Product product productDao.findById(productId); if (product.getStock() count) { request.setAttribute(error, 库存不足当前库存 product.getStock()); request.getRequestDispatcher(/checkout.jsp).forward(request, response); return; }第二步根据会员折扣计算应付金额。折扣存在 t_vip 表的 discount 字段里散客不打折常见折扣在 0.8 到 0.95 之间double unitPrice product.getPrice(); double totalPrice unitPrice * count; if (vipId ! null !vipId.isEmpty()) { Vip vip vipDao.findById(Integer.parseInt(vipId)); totalPrice totalPrice * vip.getDiscount(); }第三步就是 2.3 节那个事务块扣库存、插流水、更新会员累计消费全部提交。第四步把结算结果塞到 request 里转发到结算成功页面展示本单金额。这里用 forward 而不用 sendRedirect是因为 forward 能把 request 里的计算结果带给 JSP 渲染sendRedirect 会丢参数只能靠 Session 传。这两个动作的使用场景区别是 JavaWeb 面试和答辩的高频考点。整个 CheckoutServlet 看下来你会发现它本身只有流程编排没有一句 SQL。这就是分层的好处业务逻辑一旦变动比如新增满 100 减 10的促销规则只需要在 Servlet 里加一个计算分支DAO 层完全不用动。这份源码的可改性和可读性才是它拿到高分的原因。4. 本地跑通IDEA 部署、MySQL 导入与三个版本参数理论看完了现在动手。这一章的终极目标是把项目在本地跑起来。JavaWeb 项目跑不起来一半以上是版本不对付引发的所以先别急着点运行把版本配对和配置检查完成功率会高很多。4.1 版本配对JDK、Tomcat、MySQL 别乱搭源码是按经典 Javax 命名空间写的Tomcat 千万别下 10 以上版本那是 Jakarta 命名空间包名全变了类加载直接失败。我这里给一套经过验证的配对组件推荐版本说明JDK8 或 118 最稳11 注意老框架兼容性Tomcat8.5 或 9.0必须用 javax.servlet不能用 10MySQL5.7 或 8.05.7 最省心8.0 需指定时区mysql-connector-java5.1.49配 5.7/ 8.0.33配 8.0驱动类名不同见 4.3新手直接上 JDK 8 Tomcat 9 MySQL 5.7 的组合三个组件年代接近网上资料最多报错一搜一个准。MySQL 8 不是不能用只是驱动和时区配置多了两个坑翻车概率更高。4.2 导入数据库脚本和源码的完整步骤数据库脚本是项目能跑的命根子。先启动 MySQL 服务然后执行建库导入mysql -uroot -p -e CREATE DATABASE supermarket DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; mysql -uroot -p supermarket db/supermarket.sql第一条命令建库第二条把源码包里附带的建表脚本和测试数据一次性灌进去。脚本文件路径要看解压后的实际目录通常在 db 或 sql 文件夹下。导入成功后用下面的命令验证表是否齐全mysql -uroot -p -e USE supermarket; SHOW TABLES; SELECT COUNT(*) FROM t_product;看到 t_user、t_vip、t_product、t_provider、t_sale 五张表商品表里有测试数据说明数据库这边就位了。接着用 IDEA 打开源码目录。这里不需要 Maven因为经典 JavaWeb 项目的依赖 jar 包直接躺在 WEB-INF/lib 里导入时 IDEA 会识别成普通 Web 项目。然后是 Tomcat 配置IDEA 右上角 Add Configuration → Tomcat Server → Local选本地安装的 Tomcat 目录Deployment 标签页点加号选 Artifact把项目打成 war exploded 形式部署Application context 填 /supermarket。这个 context 路径直接决定了访问的 URL 前缀填错了后面所有跳转都会 404。提示MySQL 5.7 的驱动 jar 包是 mysql-connector-java-5.1.49.jar别拿去配 8.0 的库会出现驱动类找不到的问题。4.3 启动前检查清单与三个关键参数正式点 Run 之前按这个清单过一遍JDBC 配置文件的用户名密码和本地 MySQL 是否一致lib 目录下有没有 mysql 驱动 jar 包IDEA 的 Artifact 里有没有把 lib 打进去。这三条是启动失败的最高频原因。JDBC 配置一般在 src 下的 db.properties 或 jdbc.properties 里jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/supermarket?useUnicodetruecharacterEncodingutf-8 jdbc.usernameroot jdbc.password123456如果是 MySQL 8driver 改成 com.mysql.cj.jdbc.Driverurl 末尾加 serverTimezoneAsia/Shanghai否则启动后会报时区错误。配置文件里不要写绝对路径项目换机器部署时绝对路径必挂源码用的是相对路径加载方式。启动 Tomcat 后访问 http://localhost:8080/supermarket/login.jsp页面出来就说明环境全部打通。如果 404大概率是 Artifact 里没包含 lib。去 Project Structure 的 Artifacts 里把 WEB-INF/lib 目录加进去重新部署一遍就好。这一步我当年第一次陪跑时卡了一个下午后来熟了基本三分钟定位。还能看到报错的话优先看 IDEA 的 Catalina 日志别盯着浏览器页面猜。5. 避坑与排查JavaWeb 毕设最常见的五个翻车现场下面五条都是这类 JSPServletMySQL 项目里反复出现的坑现象、原因、解决一条条对能帮你省下大量排错时间。5.1 现象Tomcat 启动后访问所有 Servlet 都报 404原因用了 Tomcat 10 以上的版本。源码是 javax.servlet 包名写的Tomcat 10 全面切换到 jakarta.servlet两者不兼容class 加载直接失败。解决换回 Tomcat 8.5 或 9.0。检查方法很简单看 Tomcat 安装目录 lib 下的 servlet-api.jar包名如果带 jakarta 就是 10马上换。血的教训下载 Tomcat 时别手滑选最新版。5.2 现象MySQL 8 启动后报 Communications link failure 或时区异常原因MySQL 8 的驱动类名从 com.mysql.jdbc.Driver 变成了 com.mysql.cj.jdbc.Driver而且服务端默认时区是 UTC和本地时间对不上。解决驱动类名和 URL 一起改参考 4.3 节的配置。改完记得重启 Tomcat改配置不重启不生效。我一般把 db.properties 直接改成带时区的版本一次到位jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/supermarket?useUnicodetruecharacterEncodingutf-8serverTimezoneAsia/Shanghai5.3 现象中文商品名存进数据库变成问号原因三层编码没对齐。MySQL 连接 URL 没带 characterEncodingutf-8或者表本身是 latin1 字符集再或者 Servlet 里 setCharacterEncoding 写在取参数之后三种情况都会乱码。解决建库时就用 utf8mb4参考 4.2 的命令连接 URL 带 useUnicodetruecharacterEncodingutf-8Servlet 的 doPost 第一行就写 setCharacterEncoding(UTF-8)。三层做齐乱码基本绝迹。这也是我每次跑新项目的固定三查先查建库语句再查连接 URL最后查 Servlet 头部。5.4 现象项目跑半小时后页面假死日志刷 Too many connections原因DAO 里获取了 Connection 但没有关闭。经典 JDBC 项目最常见的资源泄漏连接数被占满后数据库拒绝新连接整个系统看起来像死了一样。解决检查所有 DAO 方法是否用了 try-with-resources或者在 finally 里关闭连接。源码自带的 DAO 大多用了 try-with-resources但你自己二次开发时手写的新方法最容易漏。我自己的习惯是写完后全局搜一遍 new Connection 或 getConnection()逐个核对连接的关闭逻辑确认没有一条漏网的。5.5 现象登录成功后跳转 404地址栏路径明显不对原因Servlet 重定向写的是相对路径比如 response.sendRedirect(/product/list)这个路径会被解析成根路径下的资源而不是当前 Web 应用上下文下的路径所以带着 /supermarket 前缀访问时必然 404。解决统一用 request.getContextPath() 拼接这是 3.1 节提到的路径坑。凡是 sendRedirect 和 forward 的地址都写成 request.getContextPath() /xxx 的形式。源码里如果个别地方没写你二次开发时可以顺手修正答辩时提这个细节反而是亮点说明你真的动手改过。注意改完任何配置文件后务必重启 Tomcat 再验证热部署不会重载 DBUtil 的静态加载块这是很多人改完仍然报错的隐藏原因。6. 进阶验证连接池改造与销售报表的按月筛选6.1 验证一用 DBCP 替换裸 JDBC观察并发下的行为一个检验你是否真懂这套源码的通用做法是把 DBUtil 里的裸 JDBC 换成连接池。常见做法是用 Apache Commons DBCP只需要改 DBUtil 的加载方式BasicDataSource ds new BasicDataSource(); ds.setDriverClassName(com.mysql.jdbc.Driver); ds.setUrl(jdbc:mysql://localhost:3306/supermarket?useUnicodetruecharacterEncodingutf-8); ds.setUsername(root); ds.setPassword(123456); ds.setInitialSize(5); ds.setMaxTotal(20); ds.setMaxWaitMillis(3000); Connection conn ds.getConnection();参数含义要能讲清楚initialSize 是启动时预建的连接数maxTotal 是连接池最大连接数maxWaitMillis 是拿不到连接时最多等多久。改完之后打开收银页面连续结账几十单观察控制台是否还有旧的连接报错。这个改造不动任何业务代码风险极低却是把课程设计和工程实践拉开差距的第一道分水岭。6.2 验证二给 t_sale 流水加按月份的统计筛选报表功能的验证点通常在 SQL 层面。t_sale 表里的 sale_time 是 DATETIME 类型按月份统计的核心是 DATE_FORMAT 函数SELECT DATE_FORMAT(sale_time, %Y-%m) AS month, COUNT(*) AS order_count, SUM(total_price) AS total_amount FROM t_sale GROUP BY DATE_FORMAT(sale_time, %Y-%m) ORDER BY month DESC;执行这条 SQL你能拿到每个月的订单数和销售额这是超市管理系统从能用变成可分析的关键一步。写完 SQL 后在 DAO 里写一个返回 ListMapString, Object 的方法再配一个 Servlet 渲染到 JSP 表格里。如果还想加时间范围筛选就在 WHERE 里拼上 sale_time BETWEEN ? AND ?参数用 PreparedStatement 绑定注意日期格式要传 yyyy-MM-dd 字符串别直接拼进 SQL。做好了这两步你手里这套源码就不再是能跑的毕设而是一个你亲手改造过的完整案例。从那以后我每次拿到一个陌生 JavaWeb 项目第一件事不是急着点运行而是先翻配置文件、核对版本配对、把数据库脚本手动执行一遍确认三个地基都站住了再启动。这个习惯帮我省下了大量排错时间也希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

tushare+TensorFlow实战:LSTM股票开盘价预测全流程解析 2026/10/1 13:24:53

tushare+TensorFlow实战:LSTM股票开盘价预测全流程解析

简介:一份面向金融时序预测学习者的完整示例,整合tushare数据接口与TensorFlow 2.0,以贵州茅台历史行情为样本,实现RNN和LSTM对开盘价的预测。资源包含数据获取、预处理、建模、训练与评估全流程代码。压缩包共5个文件&#xff1a…

阅读更多 →
tushare+TensorFlow2.0:用RNN/LSTM预测贵州茅台开盘价 2026/10/1 13:24:53

tushare+TensorFlow2.0:用RNN/LSTM预测贵州茅台开盘价

简介:面向金融时序预测与深度学习入门人群,这份资源以贵州茅台历史行情为例,演示如何通过tushare获取真实A股数据,并基于TensorFlow 2.0搭建RNN和LSTM模型预测开盘价,完整覆盖数据抓取、清洗归一化、模型构建、训练评估…

阅读更多 →
Coze二次开发实战:API调用、工作流扩展与私有化部署避坑指南 2026/10/1 13:24:53

Coze二次开发实战:API调用、工作流扩展与私有化部署避坑指南

1. 从“拖拽能用”到“上线能扛”:Coze 二次开发到底在解决什么问题 很多人第一次接触 Coze,都是被它的可视化编排吸引进来的——拖几个节点、连几条线,一个能跑通的对话机器人就出来了。但真正把它往业务系统里塞的时候,问题立刻…

阅读更多 →
Strands Agents Harness SDK 实战:从手写 Agent 循环到生产级工程化 2026/10/1 13:24:53

Strands Agents Harness SDK 实战:从手写 Agent 循环到生产级工程化

Agent 开发这件事,过去一年里我最大的感受就是:写一个能跑的 Demo 只要一个下午,但把它变成能上线、能观测、能恢复、能扩展的东西,可能要再花两个月。Strands Agents Harness SDK 这个项目之所以值得单独拿出来聊,就是…

阅读更多 →
GraalVM实践:在Windows下用Native Image将Java应用打包成exe 2026/10/1 13:24:53

GraalVM实践:在Windows下用Native Image将Java应用打包成exe

最近做一个小工具的时候,被Java应用的分发问题折腾得够呛——本地跑得好好的,发给同事要么让他装JDK,要么让他配环境变量,稍微老一点的机器还会被启动速度折磨。后来把GraalVM在Windows上完整折腾了一遍,把应用直接打成…

阅读更多 →
基于OpenCV的银行卡识别系统:从卡面矫正到字符切分的完整实现 2026/10/1 13:24:46

基于OpenCV的银行卡识别系统:从卡面矫正到字符切分的完整实现

简介:这是一套面向计算机视觉初学者与金融科技方向学习者的银行卡识别实战项目,基于Python与OpenCV实现卡号等关键信息的自动提取,可用于课程设计、毕业设计或图像识别入门练手。资源包共43个文件,约10.31MB,包含10个p…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉