jsp+servlet+mysql图书管理系统部署与源码解析
简介这是一份基于JSPServletJavaBeanMySQL构建的JavaWeb图书管理系统源码主要面向计算机专业完成课程设计或毕业设计的学生也适合JavaWeb初学者研究MVC分层开发模式。系统以图书借阅、归还为核心流程数据库使用MySQL5开发环境推荐MyEclipse或Eclipse配合JDK1.7与Tomcat8即可部署运行。项目代码经过实测可正常运行压缩包大小约8.74MB内部除完整工程源码外还附带运行文档、配套论文以及答辩PPT帮助使用者在完成功能演示的同时准备文档与答辩材料。当前已有1321人浏览学习资源整体结构清晰读者可以顺着JSP页面、Servlet控制器、JavaBean业务层的路径理解前后端交互和数据库操作逻辑掌握常见JavaWeb项目的分层写法。在此基础上还可自行扩展预约、超期提醒等功能锻炼二次开发能力对课程设计、毕业设计或日常练手都有直接参考价值。1. 先认清这套资源能跑起来的 jspservletmysql 图书管理系统长什么样解压这份压缩包你拿到的是一个用 jspservletjavabean 开发的 java 图书管理系统数据库基于 MySQL 5.6 或 5.7开发工具是 MyEclipse 或 Eclipse。它把图书管理、读者管理、借书还书、超期判断这一整套借阅流程都串起来了还附带运行文档、论文和答辩 PPT。适合两类人正在做毕业设计或课程设计的学生以及想用一个完整可运行的项目把 servlet 和 jsp 协作方式彻底弄懂的初学者。别指望它有 Spring Boot 那套现代工程结构它胜在依赖少、分层直观、每一行代码都能在答辩时讲清楚。下面我按拆项目的顺序把它的技术骨架、部署路线、踩坑点和改造成方向逐层讲透。2. 技术栈拆解jspservletjavabeanmvc 在项目里各管什么2.1 MVC 四件套谁写页面、谁收请求、谁算业务很多拿到老项目的人第一反应是直接部署跑起来后再慢慢看代码。其实先花半小时理清 MVC 的协作关系后面改功能会快得多。这套项目里View 是 JSP 页面负责表单提交和数据展示Controller 是 Servlet负责接收请求、解析参数、决定跳转Model 是 JavaBean实体 Bean 对应数据库表结构业务 Bean 封装借书、还书、查询这类逻辑MySQL 在最后层存的是图书、读者、借阅记录这几张核心表。拿一次借书请求来串这四层用户在borrow.jsp上选了书和读者点提交按钮表单被 POST 到某个 Servlet 的地址比如bookServlet?actionborrowServlet 在doPost里取出bookId和readerId调用业务 JavaBean 的方法这个 JavaBean 通过 JDBC 连接 MySQL执行一次库存检查、一次借阅记录插入、一次图书状态更新把结果返回给 ServletServlet 根据返回值选择跳转到成功页还是把错误信息塞进 request 再转回表单页。这套流程在术语上绕但本质上就是「JSP 别写业务、Servlet 别堆 SQL、JavaBean 别碰页面标签」。我见过不少学生交上来的代码SQL 全写在 JSP 里页面标签在 Java 里拼字符串那种项目后期基本没法维护。这套资源既然是 mvc 模式开发的代码里就应该能清晰看到三层分离你看代码时先从这三个角色去找对应文件。2.2 项目目录结构与核心文件的对照关系老 Eclipse JavaWeb 工程的目录形态和 Maven 工程差别很大很多入坑的新手在 src 和 WebContent 之间迷路。这套项目正常应该是这样组织的项目根目录/ ├── src/ │ ├── com.xxx.servlet/ # 控制器借书、还书、登录、图书管理等 Servlet │ ├── com.xxx.entity/ # 实体 BeanBook、Reader、Borrow 等 │ ├── com.xxx.service/ # 业务 Bean借阅服务、读者服务 │ └── com.xxx.util/ # 工具类DBUtil 数据库连接、字符串处理 ├── WebContent/ │ ├── login.jsp # 登录页 │ ├── bookList.jsp # 图书列表页 │ ├── borrow.jsp # 借书页面 │ ├── reader.jsp # 读者管理页 │ └── WEB-INF/ │ ├── web.xml # Servlet 映射、欢迎页配置 │ └── lib/ # JDBC 驱动等 jar 包 └── librarydb.sql # 建库建表脚本看代码的时候按这个顺序走先打开web.xml看里面所有servlet-mapping把每个 URL 对应的 Servlet 类名记下来再打开DBUtil之类的工具类看数据库地址、用户名和初始化连接的方式最后挑一个最简单的业务比如「删除图书」从 JSP 里的链接追到 Servlet再追到业务 Bean把整条链路读通。这样走一遍代码对你就不再是黑匣子。web.xml里的映射是理解全项目路由的钥匙典型写法长这样servlet servlet-nameBookServlet/servlet-name servlet-classcom.library.servlet.BookServlet/servlet-class /servlet servlet-mapping servlet-nameBookServlet/servlet-name url-pattern/book/url-pattern /servlet-mapping这段配置的意思是浏览器访问http://localhost:8080/项目名/book时Tomcat 会把请求交给com.library.servlet.BookServlet处理。如果你在 JSP 里看到form actionbook?actionborrow就说明提交后会进这个 Servlet再靠action参数区分具体是借书、还书还是删除。项目里每个 Servlet 可能对应一个url-patternURL 里那个斜杠路径就是 JSP 表单要提交的目标。数据库连接部分老项目通常用一个 JDBC 工具类统一管理连接代码风格一般长这样public class DBUtil { private static final String URL jdbc:mysql://localhost:3306/librarydb ?characterEncodingutf8useSSLfalse; private static final String USER root; private static final String PASSWORD 123456; public static Connection getConnection() throws Exception { Class.forName(com.mysql.jdbc.Driver); return DriverManager.getConnection(URL, USER, PASSWORD); } }这段代码里三个参数是关键localhost:3306是数据库地址和端口3306 是 MySQL 默认端口如果你本机 MySQL 改了端口这里必须同步改librarydb是数据库名要和你在 MySQL 里实际创建的库名一致characterEncodingutf8负责中文传参不乱码少了它页面输入的中文很容易变成问号。Class.forName(com.mysql.jdbc.Driver)加载的是 MySQL 5.x 的驱动类名如果你换用 MySQL 8这里要改成com.mysql.cj.jdbc.Driver。2.3 为什么这个技术栈现在还能当毕业设计用可能有朋友要问现在学 JavaWeb 不都直接上 Spring Boot 了为什么还有人拿 jspservlet 做毕设原因有几个。一是这类项目业务边界清晰图书借阅的核心流程就那么多功能量对一篇本科论文来说刚好够写二是 Servlet 和 JSP 是 JavaWeb 的底层基础Spring MVC 的DispatcherServlet、控制器注解、视图解析器本质上就是在 Servlet 规范之上做的封装把这一套老代码读明白后面学框架不容易被各种抽象概念绕晕三是这套项目能讲的东西多数据库设计、MVC 分层、会话管理、JDBC 事务每一个都是毕设答辩时老师会追问的点。javabean 这个概念在现代 Java 工程里被 Spring 容器接管了但它背后「属性私有、getter/setter 访问、业务方法封装」的约定仍然存在。你在这套项目里看到的实体 Bean 和业务 Bean放到 Spring Boot 项目里就是实体类和 Service。面试题里常问的 Servlet 生命周期、session 机制、JDBC 预编译防注入在这套代码里都能找到具体落点。所以你花在这套资源上的时间不会白费——技术栈虽然看起来老但底层的请求处理模型、分层思想、数据库交互逻辑到现在还是那一套。3. 部署到本机从 JDK 1.7 到 Tomcat 8 再到 MySQL 5.6 的完整启动路线3.1 环境准备三件套版本怎么配这套资源标注的开发环境是 jdk1.7、tomcat8、mysql5.6 或 5.7开发工具是 MyEclipse 或 Eclipse。版本匹配很重要Tomcat 8 对应 Servlet 3.1 规范用 JDK 1.7 或 1.8 都能跑MySQL 用 5.6 或 5.7 是因为项目里 JDBC 驱动大概率是 MySQL 5.x 的驱动包换 MySQL 8 后驱动类名和连接参数都要改新手容易卡住。一个常见做法是电脑上装 JDK 1.8 和 Tomcat 8只要 Eclipse 里把编译级别设置为 1.7 或 1.8 兼容模式大多数老项目都能正常跑。Eclipse 版本别太新建议选 Eclipse Oxygen 或更早的版本太新的 Eclipse 对老式 Dynamic Web Project 支持反而变差。MyEclipse 也行但 MyEclipse 启动慢、占内存不是必须。MySQL 安装是本项目第一个坎。安装时记得选 Server 模式字符集建议选 utf8端口保持 3306 不要动root 密码设一个你能记住的简单密码比如123456后面改连接串方便。如果你已经装过 MySQL 8也别慌要么卸载重装 5.7要么在 5.7 上把驱动类和连接串参数改掉这一步放到第 4 章讲。3.2 导入项目Eclipse 里的具体操作路径拿到压缩包先解压确认里面有没有.project和.classpath文件。有这两个文件项目可以直接导入没有的话要手动新建工程再拷贝源码。下面按两种方式分别操作。方式一解压包里有.project文件直接用导入功能File → Import → General → Existing Projects into Workspace # 点 Select root directory选中解压后的项目文件夹 # Projects 列表里勾选该项目保持 Copy projects into workspace 不勾选 # 点 Finish导入后项目会出现在 Package Explorer 里。右键项目 → Properties → Targeted Runtimes勾选你装好的 Tomcat 8这一步把项目挂到 Tomcat 上否则 JSP 会报HttpServlet was not found一类错误。方式二包里只有源码和 JSP没有工程配置文件那就新建一个工程再把内容拷进去。新建 Dynamic Web Project项目名自拟注意版本选 3.1 或更早建好后把源码里的src目录下所有.java文件复制到新工程的src下把WebContent或WebRoot里的内容复制到新工程的WebContent下再把WEB-INF/lib里缺的 jar 包补齐。这个方式麻烦一些但能让你对工程结构更有把握。检查三件事src下所有.java文件有没有出现红色叉号——有叉号说明 jar 包没引全WEB-INF/lib下有没有 MySQL 驱动 jar 包——没有的话借书还书功能一调用就报ClassNotFoundExceptionweb.xml有没有在WEB-INF下——没有的话项目无法部署到 Tomcat。3.3 数据库初始化建库、导表、改连接参数数据库是这套系统正常跑起来的必要条件。先在 MySQL 里创建数据库再导入 SQL 脚本。假设 SQL 文件名是librarydb.sql命令行操作如下mysql -uroot -p123456 -e create database if not exists librarydb default charset utf8; mysql -uroot -p123456 librarydb librarydb.sql第一行命令创建名为librarydb的数据库default charset utf8指定字符集这一步直接决定后面中文字段能不能正常存取第二行把 SQL 文件里的建表语句和初始数据导入到librarydb库。如果你用 Navicat 或 MySQL Workbench也可以先新建数据库再右键运行 SQL 文件效果一样。导入完成后用下面这条命令检查核心表是否建出来了mysql -uroot -p123456 -e show tables from librarydb;正常你会看到图书表、读者表、借阅记录表、管理员表这几类表具体表名以项目实际为准。然后打开DBUtil.java或db.properties把 URL、用户名、密码改成你本机的值。改完先跑一次连接测试最简单的方法是在 Eclipse 里写一个临时 main 方法调用getConnection()能拿到连接就说明数据库这块通了。这一步别省很多同学辛辛苦苦部署完一登录就报数据库连接失败最后发现是密码没改。3.4 启动与验证从 Tomcat 控制台到浏览器确认环境都准备好后按照下面的流程启动项目# 在 Eclipse 的 Servers 视图中 # 右键空白处 → New → Server → 选 Apache → Tomcat v8.0 Server → 指向本地 Tomcat 安装目录 # 把项目右键 Add 到服务器 # 双击服务器确认 HTTP port 是 8080Server Locations 选 Use Tomcat installation # 点启动按钮等待控制台输出 “Server startup in xxx ms”启动成功后打开浏览器访问登录页地址格式是http://localhost:8080/项目名/login.jsp。项目名在 Eclipse 里可能含中文或空格最好改成英文名再启动。你可以用下面的命令确认 Tomcat 是否真的起来了netstat -ano | findstr 8080如果看到 LISTENING 状态说明 Tomcat 在监听 8080 端口。然后用管理员账号密码登录系统尝试新增一本图书、再走一遍借书还书流程。这三个动作能分别验证数据库连接是否正常、Servlet 路由是否映射对、JSP 页面和业务 Bean 是否协作正常。4. 部署避坑指南乱码、连接失败与 JSP 报错三条战线4.1 Eclipse 构建路径与 Tomcat 部署的坑坑一导入项目后所有 JSP 页面报错提示The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path现象项目里每一个.java和.jsp都显示红色错误标记编译不过Tomcat 也没法启动。原因Eclipse 新建或导入工程后Java 构建路径里没有添加 Tomcat 运行时javax.servlet是 Tomcat 提供的 APIEclipse 默认不认得它。解决右键项目 → Properties → Targeted Runtimes勾选 Tomcat点 Apply 后再看错误是否消失如果还报错打开 Java Build Path → Libraries → Add Library → Server Runtime选 Tomcat。这个坑几乎每个从网上下载老项目的人都会踩一次。坑二Tomcat 启动成功但浏览器访问http://localhost:8080/项目名/显示 404Tomcat 控制台也没报任何错误现象服务器正常启动但访问项目路径就 404Tomcat 自带的页面能打开。原因项目没有被正确部署到 Tomcat 的 webapps 目录最常见的情况是 Eclipse 里 Server Locations 默认用的是 workspace 下的临时目录项目没有发布出去。解决双击 Servers 视图里的 Tomcat打开配置页Server Locations 改成Use Tomcat installation (takes control of Tomcat installation)然后在下方 Deployed Resources 里确认项目已经列出重启服务器再访问。注意改这个配置会清空 webapps 里已部署的内容如果之前部署过旧版需要重新添加项目。坑三双击startup.bat启动 Tomcat窗口一闪而过现象Tomcat 窗口打开后马上关闭看不到任何日志。原因没有设置JAVA_HOME环境变量或JAVA_HOME指向了不存在 JDK 路径。解决如果你没在 Eclipse 里启动而是直接双击 bin 下的startup.bat务必先配置环境变量set JAVA_HOMEC:\Program Files\Java\jdk1.8.0_131 set CATALINA_HOMEC:\apache-tomcat-8.5.x更稳的方式是在命令行里运行catalina.bat run这样日志会直接打印在窗口里能看到具体的报错是找不到 Java 还是端口被占用。Tomcat 8 用 JDK 1.7 或 1.8 都行但如果你用的是 JDK 11 以上经常会出现反射访问报错或版本不支持的问题这就是为什么推荐按资源标注的 jdk1.7 或 1.8 来部署。4.2 MySQL 连接与中文乱码的坑坑四一执行借书或登录就报java.sql.SQLException: Communications link failure或提示ClassNotFoundException: com.mysql.jdbc.Driver现象页面能打开但一请求涉及数据库的操作就白屏或报错堆栈。原因有三个可叠加的因素驱动 jar 不在WEB-INF/lib下、MySQL 服务没启动、连接串里的端口或数据库名不对。解决按顺序排查——看WEB-INF/lib下是否有 jar 包没有就补进去打开 Windows 服务管理器确认 MySQL 服务在运行在 DBUtil 里单独写一个main方法测试连接把localhost:3306替换成127.0.0.1:3306试试排除本机网络别名问题。如果你装的是 MySQL 8还需要把com.mysql.jdbc.Driver改成com.mysql.cj.jdbc.Driver并在连接串后追加serverTimezoneAsia/Shanghai这步常被遗漏导致连接时报时区错误。坑五页面表格里中文显示成???或å¾ä¹¦数据库里存进去的也是乱码现象其他功能都正常就是中文显示异常。这其实是这一系列项目里最难排查的玄学问题因为它一个症状对应三个可能的原因。原因一建库时没指定 utf8MySQL 默认字符集可能是 latin1原因二JDBC 连接串缺少characterEncodingutf8原因三JSP 页面本身编码不统一。解决把三个位置全部对齐——建库用default charset utf8连接串带characterEncodingutf8每个 JSP 的% page %里确认pageEncodingUTF-8。这三处任意一处不一致都可能在某个环节出现乱码。注意已经乱码的数据不会自己恢复需要删掉重导或改表字段字符集别指望重启一次就变好。第 4 章这五个坑加起来覆盖了 80% 以上的部署问题。你部署时只要看到404、Communications link failure、ClassNotFoundException、乱码这四个词就能对应到上面的原因和处理方法不用对着控制台干瞪眼。还有一个小检查项web.xml里第一行声明了版本如果是 Servlet 3.1 的配置Tomcat 7 以下跑不起来所以 Tomcat 版本要按标注的 8 来别用 Tomcat 6 硬跑。5. 把功能点对照到源码借书、还书与管理员的完整流程5.1 借书流程的代码走向从 JSP 表单到 Servlet 到业务 Bean部署跑通只是第一步把它变成你论文里的素材才是关键。拿「借书」这个核心功能出来从页面到数据库完整走一遍你会发现 MVC 的每一层都有明确的落点。borrow.jsp页面上有一个表单让用户选择图书 ID 和读者 ID提交到 Servletform actionbook?actionborrow methodpost 图书IDinput typetext namebookId / 读者IDinput typetext namereaderId / input typesubmit value借书 / /form表单提交后Servlet 里的doPost方法负责接收参数、调用业务方法、根据返回值决定跳转protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding(UTF-8); String action request.getParameter(action); if (borrow.equals(action)) { int bookId Integer.parseInt(request.getParameter(bookId)); int readerId Integer.parseInt(request.getParameter(readerId)); BorrowService service new BorrowService(); String msg service.borrow(bookId, readerId); if (success.equals(msg)) { response.sendRedirect(book?actionlist); } else { request.setAttribute(error, msg); request.getRequestDispatcher(borrow.jsp).forward(request, response); } } }这段代码三个关键点request.setCharacterEncoding(UTF-8)写在任何参数读取之前不然 POST 里的中文可能乱码action参数是路由分发的开关同一个 Servlet 里靠这个字符串区分不同操作sendRedirect是重定向走的是新的请求forward是转发不改变 URL成功后跳列表页、失败后回表单页并携带错误提示这是老项目最常见的页面流转方式。真正的借书逻辑封装在BorrowService.borrow方法里它会连着操作三张表public String borrow(int bookId, int readerId) { Connection conn DBUtil.getConnection(); PreparedStatement ps null; ResultSet rs null; try { // 1. 检查图书库存state1 表示在架可借 ps conn.prepareStatement( select count(*) from book where id? and state1); ps.setInt(1, bookId); rs ps.executeQuery(); if (!rs.next() || rs.getInt(1) 0) { return no_stock; } // 2. 插入借阅记录deadline 按当前时间加 30 天 ps conn.prepareStatement( insert into borrow(book_id, reader_id, borrow_time, deadline, state) values(?,?,now(),date_add(now(), interval 30 day),1)); ps.setInt(1, bookId); ps.setInt(2, readerId); ps.executeUpdate(); // 3. 把图书状态改成已借出 ps conn.prepareStatement(update book set state0 where id?); ps.setInt(1, bookId); ps.executeUpdate(); conn.commit(); return success; } catch (SQLException e) { try { conn.rollback(); } catch (SQLException ex) { ex.printStackTrace(); } return db_error; } finally { // 按顺序关闭 rs、ps、conn省略注册驱动和释放资源的代码 } }这里用PreparedStatement而不是拼接 SQL 字符串是防注入的关键约定不管是图书 ID 还是读者 ID都通过setInt绑定参数从源头避免了1 or 11这类注入写法。借书逻辑涉及「插入借阅记录」和「更新图书状态」两步属于典型需要事务保护的场景——如果插入记录成功但更新状态失败就会出现「记录存在但书还在架上」的矛盾数据所以这个写法里需要开启事务并手动commit和rollback。你读原项目代码时重点看这两个动作之间有没有conn.setAutoCommit(false)的配置这是判断该项目事务处理是否规范的一个指标。5.2 还书与超期判断时间计算与状态流转还书逻辑和借书是镜像关系把借阅记录的return_time填上当前时间把图书状态改回 1同时计算是否超期。老项目里超期判断通常有两种实现途径一种是在 Java 代码里用java.util.Date比较另一种直接写在 SQL 里// 还书时把 state 置为 2 表示已还return_time 填当前时间 String updateSql update borrow set return_timenow(), state2 where id? and return_time is null; PreparedStatement ps conn.prepareStatement(updateSql); ps.setInt(1, borrowId); ps.executeUpdate(); // 超期状态deadline 早于今天并且还没还的置为超期 String overdueSql update borrow set state3 where deadline curdate() and return_time is null; PreparedStatement ps2 conn.prepareStatement(overdueSql); ps2.executeUpdate();借阅状态一般这样约定1表示借出未还、2表示已归还、3表示超期未还。curdate()是 MySQL 里的今天日期函数直接和deadline字段做比较数据库端算一次就能批量更新所有超期记录。如果你要写进论文的「系统实现」章节这两条 update 语句就是很好的材料一条处理还书一条处理超期逻辑互不干扰。5.3 从源码到论文拿来改写的四个切入点这套资源带了配套论文和答辩 PPT千万别直接原样交出去。我的建议是以现有源码和论文为基础做四件事让内容变成你自己的。第一把数据库表提取成 ER 图。图书表、读者表、借阅记录表之间的关系画出来就是「读者和图书是多对多借阅记录是中间表」这是论文里「数据库设计」章节最核心的一张图。第二把借书流程的时序图画出来。谁发起请求、Servlet 怎么处理、JavaBean 怎么调数据库、结果怎么返回按 5.1 节代码的逻辑画一张时序图答辩时老师问「请讲讲系统的工作流程」就照着这张图说。第三在「系统实现」里写明每个功能对应的 Controller、Service、DAO 方法名把代码里真实存在的类名和方法名写进去用表格整理出来。第四在原论文里找几段描述和你实际代码不一致的地方改掉老论文经常出现「系统用 SSH 框架实现」这种和实际代码对不上的描述这种硬伤最容易被答辩老师抓到。把这四步做完这套资源才算真正被你消化了。6. 交付前的验证清单与两个低成本的加分改造一个老项目跑通只是起点关键是交付前能否证明它每一步都正常。我给自己列过一个功能验证清单每次拿到老项目都按它走一遍验证项操作预期结果登录模块输入管理员账号密码跳转主界面密码错误有提示图书新增填写书名、作者、库存后提交列表页出现新图书且无乱码图书检索在搜索框输入书名关键字能模糊匹配到相关图书借书流程选择一本在架图书借出图书状态变为已借出借阅记录生成还书流程对已借出的图书执行还书图书状态恢复在架还书时间写入超期标记手工把数据库里某条借阅记录的 deadline 改到昨天后刷新列表该记录显示超期状态会话超时关闭浏览器重新访问受保护页面跳回登录页最后这一项「会话超时」很容易被忽略。Servlet 的session机制默认在 Tomcat 里是 30 分钟这个项目一定在web.xml或代码里用到了 session答辩时经常被问到「你的系统怎么控制用户登录后才能访问」。常见做法是在每个页面或 Servlet 里检查request.getSession().getAttribute(user)是否为空为空就跳回login.jsp。你可以顺着登录代码搜索getAttribute和getSession的调用把这个拦截逻辑找出来这是对外说的最多的安全点之一。验证没问题后再考虑两个低成本改造既能让论文看起来有创新点也不会把自己坑进技术深水区。第一个是模糊搜索。很多老项目最初只做精确查询你可以把 SQL 改成select * from book where book_name like concat(%, ?, %) or author like concat(%, ?, %)用concat拼%符号配合PreparedStatement绑定参数避免字符串拼接注入。第二个是借阅排行榜一条分组查询就能实现select b.book_name, count(*) as borrow_count from borrow r join book b on r.book_id b.id group by r.book_id order by borrow_count desc limit 10;这个改动可以放主页或单独一个rank.jsp展示借阅 Top 10 图书。至于你要不要加需求我自己的血泪经验是老项目能不改就别乱改每个学生都在上面犯过错——最常见的是把 JDK 编译级别改成 11 后项目崩了或者是想在 MySQL 8 里跑老驱动结果连不上。从那以后我每次部署老 JavaWeb 项目都强制先确认版本矩阵JDK、Tomcat、MySQL 驱动三者匹配、再调字符集、最后才动功能代码。这套顺序帮我少走了很多弯路希望帮到你。本文还有配套的精品资源点击获取

相关新闻

无人机频射信号检测:364张图片+YOLOv5实现94.3%识别率实战

无人机频射信号检测:364张图片+YOLOv5实现94.3%识别率实战

/* 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 1:06:44 阅读更多 →
智慧法院数字化场景下DeepSeek+AI智算一体机设计方案:架构、调参与落地实践

智慧法院数字化场景下DeepSeek+AI智算一体机设计方案:架构、调参与落地实践

/* 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 1:06:44 阅读更多 →
Multisim实现两位独立十进制加减法硬件电路

Multisim实现两位独立十进制加减法硬件电路

/* 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 1:06:44 阅读更多 →

最新新闻

Codex桌面版更新后打不开?从config.toml到运行时的完整排查指南

Codex桌面版更新后打不开?从config.toml到运行时的完整排查指南

1. 更新之后打不开,问题到底卡在哪一层Codex 桌面版这类 AI 编程工具,最让人抓狂的不是它不会写代码,而是某天你双击图标,它转了两圈就没了,或者弹出一句冷冰冰的「无法加载组织设置」。我这次遇到的正是后者。更新推送…

2026/10/9 8:48:09 阅读更多 →
智慧校园统一入口与数据融合:从单点登录到主数据管理实践

智慧校园统一入口与数据融合:从单点登录到主数据管理实践

1. 项目核心思路:为什么需要统一入口与数据融合先从一个真实的场景说起。我接触过不少学校,信息中心平均要维护20到30个业务系统。教务、学工、人事、财务、一卡通、图书、迎新离校、后勤报修、在线课程……每个系统都有自己的账号密码。老师一学期要记住…

2026/10/9 8:48:09 阅读更多 →
SpringBoot仓储管理系统实战:从需求到部署的全流程解析

SpringBoot仓储管理系统实战:从需求到部署的全流程解析

做了几年Java后端,也带过不少毕业设计项目,我太熟悉“SpringBoot 仓储管理系统”这个选题了。你搜一下“SpringBoot、仓储管理系统、智能仓库、库存管控、物料追踪系统”这几个关键词,跳出来的基本都是同一类东西:用 SpringBoot 写…

2026/10/9 8:48:09 阅读更多 →
JSP+Java校园二手平台搭建与调试全指南

JSP+Java校园二手平台搭建与调试全指南

简介:本资源是一套面向计算机专业本科生的毕业设计与期末大作业实战项目,聚焦校园二手物品交易场景,提供从需求分析、系统设计到可运行代码的完整解决方案。资源包含论文、开发文档、数据库设计说明及全部可编译运行的源码,采用Ja…

2026/10/9 8:48:09 阅读更多 →
MySQL索引优化实战:避开隐式转换、冗余索引与死锁的5大深坑

MySQL索引优化实战:避开隐式转换、冗余索引与死锁的5大深坑

很多人看我写MySQL优化文章,总觉得我好像天生就会调索引。其实不是,我最早接手生产库的时候,光一个订单查询就把我搞到凌晨三点——加了索引,慢查询还是慢。后来查EXPLAIN才发现,那条索引被当成“废铁”了,…

2026/10/9 8:48:09 阅读更多 →
二分答案实战解析:从P8088看算法竞赛中的二分查找技巧

二分答案实战解析:从P8088看算法竞赛中的二分查找技巧

很多刚接触算法竞赛的朋友一听到“二分查找”这四个字,脑子里浮现的往往是“在一个有序数组里找一个数”的模板题。但真上了考场,二分查找出场的方式远比这个丰富得多,尤其是当它化身为“二分答案”的时候,整道题的难度和思维量会…

2026/10/9 8:47:09 阅读更多 →

日新闻

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 阅读更多 →