新闻详情

新闻详情

首页 / 资讯中心 / 详情

手写Servlet+JSP+MySQL宿舍管理系统实战

发布时间:2026/9/28 2:35:11来源:尧图网络
手写Servlet+JSP+MySQL宿舍管理系统实战
简介这是一份面向Java Web开发初学者的完整宿舍管理系统实战项目基于ServletJSPMySQL技术栈实现原生界面开发聚焦Web基础架构与前后端协同逻辑适用于高校课程设计、自学实践及入门级全栈能力训练。资源包共63个文件含18个Java源码核心Servlet业务逻辑、18个Class编译文件、5个JSP页面登录/列表/表单等视图层、1个SQL建库脚本nafeng.sql、1个配置文档详细配置.docx、1个功能说明文本及1个实操演示MP4视频整体大小为10.01MB。已有1160人学习下载涵盖从数据库建模、Servlet请求处理、JSP动态渲染到JDBC连接整合的全流程代码与配套资料特别提供清晰目录结构、界面截图4张PNG及可直接运行的工程环境助学习者快速理解MVC雏形、Session会话管理及CRUD操作落地细节。1. 为什么现在还要手写 Servlet JSP MySQL 宿舍管理系统——不是怀旧是打穿 Java Web 底层逻辑的必经窄门你可能刚在招聘网站上刷到一条 JD“熟悉 Java Web 基础能独立开发基于 Servlet/JSP 的管理类系统”也可能正被导师催着交毕设而“基于 JSP 的宿舍管理系统”是头歌实训、课程设计、甚至校企合作里最常出现的“最小可行项目”。它不炫技、不微服务、不 Spring Boot 自动装配但恰恰因为够原始、够裸露成了检验你是否真懂 HTTP 请求怎么进容器、JSP 如何编译成 Servlet、MySQL 连接为何总在 login.jsp 卡住、以及 request.setAttribute 和 session.getAttribute 到底差在哪的黑匣子考场。这不是过时的技术栈而是 Java Web 的“解剖标本”没有框架遮掩所有数据流转、状态维持、页面跳转都得你亲手缝合。本文就带你用原生方式从零搭起一个可运行、可调试、可扩展的宿舍管理系统——不依赖任何 IDE 模板、不跳过 web.xml 配置、不绕开 JDBC 手写连接池连 MySQL 的字符集陷阱和 JSP 中文乱码这种血泪经验都给你拆开揉碎讲清楚。2. 环境筑基用最简路径配齐 JDK Tomcat MySQL VS Code非 IDEA四件套2.1 JDK 17 Tomcat 10.1版本对齐比想象中更关键Servlet 规范与 Tomcat 版本强绑定而 Tomcat 10 默认启用 Jakarta EE 9 命名空间jakarta.servlet.*这直接导致你在网上抄的import javax.servlet.*代码全部报红。必须统一为 Jakarta EE 兼容写法。JDK 选 17 是因 Tomcat 10.1 官方推荐JDK 11–17且避免 JDK 21 的模块化陷阱干扰初学逻辑。# 检查 JDK 版本确保输出 17.x java -version # 下载 Tomcat 10.1.x非 11.x11.x 要求 JDK 17 但默认启用 Jakarta EE 10Servlet 类路径更复杂 # 解压后设置环境变量Linux/macOS 示例 export CATALINA_HOME/path/to/apache-tomcat-10.1.xx export PATH$CATALINA_HOME/bin:$PATH提示Tomcat 启动后访问http://localhost:8080出现猫图标即成功若报ClassNotFoundException: javax.servlet.Servlet说明你用了 Tomcat 10 却写了javax.*包这是新手第一道墙。2.2 MySQL 8.0.33字符集与认证插件必须手动重置MySQL 8 默认使用caching_sha2_password插件而老版 JDBC 驱动如 mysql-connector-java 5.1.x不支持直接导致Connection refused或Access denied。同时默认utf8mb4字符集在 JSP 页面中若未显式声明会引发中文存取乱码。-- 登录 MySQL 后执行替换 root 和 your_password ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY your_password; FLUSH PRIVILEGES; -- 创建宿舍管理专用库强制 utf8mb4 CREATE DATABASE dorm_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;注意mysql_native_password是兼容性兜底方案生产环境应升级到mysql-connector-java 8.0.33驱动并保留caching_sha2_password但本项目为降低门槛先用兼容模式。2.3 VS Code 配置 Servlet 开发环境三步替代 IDEA 向导VS Code 无需安装庞大 IDE靠插件组合即可完成编译、部署、调试闭环安装插件Extension Pack for Java含 Language Support、Debugger、Test Runner、Tomcat for Visual Studio Code官方维护、SQLTools连接 MySQL配置settings.json关键项{ java.configuration.updateBuildConfiguration: interactive, tomcat.javaHome: /path/to/jdk-17, tomcat.serverPath: /path/to/apache-tomcat-10.1.xx }创建webapp/WEB-INF/web.xml并声明 Servlet 映射Tomcat 10 不再支持注解自动扫描必须显式配置?xml version1.0 encodingUTF-8? web-app xmlnshttps://jakarta.ee/xml/ns/jakartaee xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttps://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd version5.0 servlet servlet-nameLoginServlet/servlet-name servlet-classcom.dorm.servlet.LoginServlet/servlet-class /servlet servlet-mapping servlet-nameLoginServlet/servlet-name url-pattern/login/url-pattern /servlet-mapping /web-app关键点web.xml的xmlns必须是https://jakarta.ee/xml/ns/jakartaee且version5.0对应 Servlet 5.0Tomcat 10.1。漏掉任一细节Tomcat 启动时会静默忽略 Servlet 注册。3. 数据建模与 JDBC 封装从 dorm_management 库到 StudentDAO 的三层落地3.1 宿舍核心表设计兼顾业务真实性和教学可读性宿舍管理系统需支撑“学生入住-房间分配-费用缴纳-退宿”主流程。我们精简为 4 张表字段命名直白、外键关系清晰避免过度范式化增加理解成本表名主要字段说明studentid(PK),name,gender,class_id,room_id,phone,status(0在校,1已退)学生主表room_id直接关联房间简化查询roomid(PK),room_number,floor,capacity,current_occupancy房间信息current_occupancy用于实时统计空床位dorm_feeid(PK),student_id,year_month,amount,status(0未缴,1已缴)按月缴费记录支持历史追溯adminid(PK),username,password_md5管理员账号密码存 MD5教学场景非生产-- 执行建表注意 ENGINEInnoDB 和 CHARSETutf8mb4 CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, gender ENUM(男,女) DEFAULT 男, class_id VARCHAR(20), room_id INT DEFAULT 0, phone VARCHAR(15), status TINYINT DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 添加外键约束room_id 引用 room.id ALTER TABLE student ADD CONSTRAINT fk_room FOREIGN KEY (room_id) REFERENCES room(id);提示ENUM类型在 MySQL 中存储效率高适合性别等有限选项TINYINT代替BOOLEAN更兼容老驱动所有VARCHAR字段明确长度避免TEXT类型引发的索引失效。3.2 JDBC 工具类手写 ConnectionPool 而非依赖 DBCP/C3P0为彻底理解连接复用原理我们实现一个极简线程安全连接池非生产级但逻辑完整// src/main/java/com/dorm/util/DBUtil.java public class DBUtil { private static final String URL jdbc:mysql://localhost:3306/dorm_management?useSSLfalseserverTimezoneAsia/ShanghaicharacterEncodingutf8mb4; private static final String USER root; private static final String PASSWORD your_password; // 模拟连接池用 BlockingQueue 管理 5 个连接 private static final BlockingQueueConnection pool new LinkedBlockingQueue(5); static { try { Class.forName(com.mysql.cj.jdbc.Driver); // MySQL 8 驱动类名 // 预热初始化 5 个连接放入池 for (int i 0; i 5; i) { pool.offer(DriverManager.getConnection(URL, USER, PASSWORD)); } } catch (Exception e) { throw new RuntimeException(DB init failed, e); } } public static Connection getConnection() throws SQLException { try { return pool.poll(1, TimeUnit.SECONDS); // 超时 1 秒 } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new RuntimeException(Get connection interrupted, e); } } public static void releaseConnection(Connection conn) { if (conn ! null !pool.isFull()) { pool.offer(conn); } } }逻辑说明poll()取连接offer()归还BlockingQueue保证线程安全useSSLfalse避免证书错误serverTimezoneAsia/Shanghai解决时间戳偏差characterEncodingutf8mb4与数据库字符集对齐。此工具类是后续所有 DAO 的基石所有 SQL 执行都从此获取连接。3.3 StudentDAO 实现CRUD 方法与 PreparedStatement 防注入DAO 层严格分离 SQL 与业务逻辑所有参数通过?占位符传入杜绝字符串拼接// src/main/java/com/dorm/dao/StudentDAO.java public class StudentDAO { public ListStudent findAll() throws SQLException { String sql SELECT * FROM student WHERE status 0 ORDER BY id DESC; try (Connection conn DBUtil.getConnection(); PreparedStatement ps conn.prepareStatement(sql); ResultSet rs ps.executeQuery()) { ListStudent list new ArrayList(); while (rs.next()) { Student s new Student(); s.setId(rs.getInt(id)); s.setName(rs.getString(name)); s.setGender(rs.getString(gender)); s.setClassId(rs.getString(class_id)); s.setRoomId(rs.getInt(room_id)); s.setPhone(rs.getString(phone)); list.add(s); } return list; } } public boolean updateRoom(int studentId, int roomId) throws SQLException { String sql UPDATE student SET room_id ? WHERE id ?; try (Connection conn DBUtil.getConnection(); PreparedStatement ps conn.prepareStatement(sql)) { ps.setInt(1, roomId); ps.setInt(2, studentId); return ps.executeUpdate() 0; // 返回影响行数 } } }参数说明ps.setInt(1, roomId)中的1是 SQL 中第一个?的位置索引从 1 开始executeUpdate()返回int判断是否成功修改try-with-resources自动关闭ResultSet/PreparedStatement/Connection避免连接泄漏。4. Servlet 控制层从 login.jsp 提交到 LoginServlet 的全链路解析4.1 登录流程拆解HTTP 请求如何穿透 Tomcat 到达你的代码用户在login.jsp输入账号密码 → 点击提交 → 浏览器发送 POST 请求到/login→ Tomcat 根据web.xml中servlet-mapping找到LoginServlet→ 调用其doPost()方法 → 你在此方法中获取参数、查库、跳转。这个链条每一步都可打断调试。// src/main/java/com/dorm/servlet/LoginServlet.java public class LoginServlet extends HttpServlet { Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1. 获取表单参数注意POST 提交必须 setCharacterEncoding req.setCharacterEncoding(UTF-8); String username req.getParameter(username); String password req.getParameter(password); // 2. 查询管理员表MD5 加密比对 AdminDAO adminDAO new AdminDAO(); Admin admin adminDAO.findByUsername(username); if (admin ! null admin.getPasswordMd5().equals(md5(password))) { // 3. 登录成功存入 session重定向到主页 req.getSession().setAttribute(admin, admin); resp.sendRedirect(req.getContextPath() /main.jsp); } else { // 4. 失败设置错误信息转发回登录页 req.setAttribute(error, 用户名或密码错误); req.getRequestDispatcher(/login.jsp).forward(req, resp); } } private String md5(String str) { try { MessageDigest md MessageDigest.getInstance(MD5); byte[] digest md.digest(str.getBytes(UTF-8)); return String.format(%032x, new BigInteger(1, digest)); } catch (Exception e) { throw new RuntimeException(e); } } }关键细节req.setCharacterEncoding(UTF-8)必须在getParameter()之前调用否则中文参数乱码resp.sendRedirect()是客户端跳转URL 改变req.getRequestDispatcher().forward()是服务器端跳转URL 不变request 属性可传递req.getContextPath()获取应用上下文路径如/dorm避免硬编码。4.2 学生列表页JSP 如何安全展示 DAO 返回的数据listStudents.jsp不是静态 HTML而是通过jsp:useBean和c:forEach需引入 JSTL动态渲染% page contentTypetext/html;charsetUTF-8 languagejava % % taglib prefixc urihttp://java.sun.com/jsp/jstl/core % html headtitle学生列表/title/head body h2在住学生名单/h2 table border1 trth学号/thth姓名/thth班级/thth房间号/thth操作/th/tr c:forEach items${students} vars tr td${s.id}/td td${s.name}/td td${s.classId}/td td c:choose c:when test${s.roomId 0}未分配/c:when c:otherwise房间 ${s.roomId}/c:otherwise /c:choose /td td a hrefassignRoom.jsp?id${s.id}分配房间/a | a hrefdeleteStudent?id${s.id}删除/a /td /tr /c:forEach /table /body /html逻辑说明% page contentTypetext/html;charsetUTF-8 %声明页面编码c:forEach遍历request或session中的students属性${s.roomId 0}是 EL 表达式自动类型转换hrefassignRoom.jsp?id${s.id}生成 GET 请求 URL参数通过 QueryString 传递。JSP 的本质是 Servlet 的模板语法糖最终会被 Tomcat 编译成.java文件。4.3 分配房间功能GET 与 POST 混合使用的典型场景assignRoom.jsp是表单页GET 获取学生 ID提交后由AssignRoomServlet处理POST 更新数据库!-- assignRoom.jsp -- % page contentTypetext/html;charsetUTF-8 languagejava % html body h3为学生分配房间/h3 %-- 从 URL 参数获取 studentId --% % String idStr request.getParameter(id); % form actionassignRoom methodpost input typehidden namestudentId value%idStr% label选择房间 select nameroomId option value0请选择.../option !-- 动态生成房间选项此处省略 DAO 查询逻辑 -- option value101101/option option value102102/option /select /label input typesubmit value确认分配 /form /body /html// AssignRoomServlet.java public class AssignRoomServlet extends HttpServlet { Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding(UTF-8); int studentId Integer.parseInt(req.getParameter(studentId)); int roomId Integer.parseInt(req.getParameter(roomId)); StudentDAO dao new StudentDAO(); boolean success dao.updateRoom(studentId, roomId); if (success) { // 分配成功后更新房间 occupancy 字段此处简化实际应加事务 RoomDAO roomDAO new RoomDAO(); roomDAO.updateOccupancy(roomId, 1); // 1 resp.sendRedirect(listStudents.jsp?msg分配成功); } else { req.setAttribute(error, 分配失败请检查房间号); req.getRequestDispatcher(assignRoom.jsp).forward(req, resp); } } }注意assignRoom.jsp中%idStr%是脚本片段Scriptlet虽不推荐但教学场景可接受actionassignRoom对应web.xml中该 Servlet 的url-patternresp.sendRedirect(listStudents.jsp?msg分配成功)通过 URL 参数传递提示信息listStudents.jsp中可用${param.msg}获取。5. 避坑指南那些让新手卡三天的“玄学”问题与血泪解决方案5.1 现象JSP 页面中文显示为 ???原因JSP 文件本身编码不是 UTF-8VS Code 默认可能是 GBKpage指令未声明contentTypeTomcat 的conf/server.xml中Connector缺少URIEncodingUTF-8MySQL 连接 URL 未加characterEncodingutf8mb4。解决VS Code 右下角点击编码 → 选择 “Save with Encoding” → UTF-8所有 JSP 顶部加% page contentTypetext/html;charsetUTF-8 %修改server.xml中Connector port8080 ... URIEncodingUTF-8 /JDBC URL 确保包含characterEncodingutf8mb4。四者缺一不可漏掉任意一个都会导致中文乱码。5.2 现象ClassNotFoundException: com.mysql.cj.jdbc.Driver原因MySQL 8 驱动类名从com.mysql.jdbc.Driver变更为com.mysql.cj.jdbc.Drivermysql-connector-java.jar未放入WEB-INF/lib/目录Tomcat 启动时未加载该 JAR常见于用 VS Code Tomcat 插件部署时路径错误。解决下载mysql-connector-java-8.0.33.jar官网或 Maven Repository手动复制到项目webapp/WEB-INF/lib/目录不是src/main/resources在 VS Code 中右键项目 → “Deploy to Tomcat” → 确认部署路径包含lib/下的 JAR。验证方法启动 Tomcat 后查看控制台日志若有Added JAR提示即成功。5.3 现象HTTP Status 404 – /dorm/login但web.xml明明配了/login原因web.xml放错位置必须在webapp/WEB-INF/web.xml而非src/main/webapp/WEB-INF/Maven 结构易混淆Servlet 类路径错误servlet-class写成LoginServlet而非com.dorm.servlet.LoginServletTomcat 未重新部署修改web.xml后未重启或重新部署。解决严格检查web.xml路径用文件管理器确认servlet-class必须是完整包路径大小写敏感VS Code 中右键 Tomcat Server → “Restart Server”或删除work/Catalina/localhost/dorm/目录强制重建。黑盒技巧在LoginServlet的doPost方法第一行加System.out.println(LoginServlet invoked);启动后看控制台是否有输出。5.4 现象登录成功后跳转main.jsp但页面报NullPointerException原因main.jsp中尝试访问session.getAttribute(admin)但admin为 nullreq.getSession()创建的是新 session而setAttribute发生在重定向前session 未持久化浏览器禁用了 Cookie导致 session ID 无法传递。解决LoginServlet中req.getSession().setAttribute(admin, admin)后必须用sendRedirect不能forward因为forward是同一次请求redirect会发起新请求此时 session 已建立main.jsp开头加判空% Object admin session.getAttribute(admin); if (admin null) { response.sendRedirect(login.jsp); return; } %Chrome 开发者工具 → Application → Cookies确认JSESSIONID存在且 Domain 匹配。核心原则sendRedirect后的页面session 是有效的forward后的页面request 属性有效但 session 未必取决于是否已 commit。5.5 现象MySQL 报错Error 1366: Incorrect string value: \xE4\xBD\xA0\xE5\xA5\xBD for column name原因数据库表、字段、连接 URL 三者字符集不一致utf8在 MySQL 中实际是utf8mb3最多 3 字节无法存 emoji 或部分生僻汉字utf8mb4才是真正的 UTF-84 字节。解决创建库时指定CREATE DATABASE ... CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci建表时每个字段加CHARACTER SET utf8mb4JDBC URL 加characterEncodingutf8mb4Tomcatserver.xml中Connector加URIEncodingUTF-8JSP 页面% page contentTypetext/html;charsetUTF-8 %。五步全做缺一不可。utf8mb4是 MySQL 8 的事实标准别再用utf8。6. 进阶实战用 Filter 统一处理登录拦截与字符编码把重复代码变成可复用模块6.1 登录拦截 Filter比每个 Servlet 写 if 判空更优雅的权限控制每次在doGet/doPost开头写if (session.getAttribute(admin) null) { redirect }极其冗余。Filter 能在请求到达 Servlet 前统一拦截// src/main/java/com/dorm/filter/LoginFilter.java jakarta.servlet.annotation.WebFilter(filterName LoginFilter, urlPatterns {/main.jsp, /listStudents.jsp, /assignRoom.jsp}) public class LoginFilter implements Filter { Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request (HttpServletRequest) req; HttpServletResponse response (HttpServletResponse) resp; // 检查 session 中是否存在 admin HttpSession session request.getSession(false); if (session null || session.getAttribute(admin) null) { // 未登录重定向到登录页并保存原请求路径便于登录后跳回 String originalUrl request.getRequestURI(); if (request.getQueryString() ! null) { originalUrl ? request.getQueryString(); } session.setAttribute(originalUrl, originalUrl); response.sendRedirect(request.getContextPath() /login.jsp); return; } // 已登录放行 chain.doFilter(req, resp); } }关键点WebFilter注解替代web.xml配置Tomcat 10 支持urlPatterns指定需要保护的资源session.setAttribute(originalUrl, ...)记录用户想访问的页面登录成功后可跳转回去chain.doFilter()是放行指令缺了请求就终止。6.2 字符编码 Filter一行代码终结所有中文乱码将req.setCharacterEncoding(UTF-8)提炼为通用 Filter避免每个 Servlet 重复写// src/main/java/com/dorm/filter/EncodingFilter.java jakarta.servlet.annotation.WebFilter(filterName EncodingFilter, urlPatterns /*) public class EncodingFilter implements Filter { Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request (HttpServletRequest) req; HttpServletResponse response (HttpServletResponse) resp; // 统一设置请求和响应编码 request.setCharacterEncoding(UTF-8); response.setContentType(text/html;charsetUTF-8); chain.doFilter(req, resp); } }注意urlPatterns /*拦截所有请求response.setContentType(text/html;charsetUTF-8)确保响应头正确此 Filter 必须在LoginFilter之后执行可通过Order注解或web.xml中filter-mapping顺序控制。6.3 Filter 配置优先级与调试技巧如何确认 Filter 生效Filter 执行顺序由web.xml中filter-mapping的声明顺序决定注解方式按类名字母序不推荐。调试时可在doFilter中加日志System.out.println(EncodingFilter: URI request.getRequestURI()); System.out.println(LoginFilter: Session valid (session ! null session.getAttribute(admin) ! null));实战验证法访问/login.jsp→ 应无任何 Filter 日志因未匹配urlPatterns登录后访问/main.jsp→ 先打印EncodingFilter日志再打印LoginFilter日志清除浏览器 Cookie 后再访问/main.jsp→LoginFilter应触发重定向控制台看到redirecting to login.jsp。这种逐层验证比猜错更可靠。6.4 项目打包与部署传统 WAR 包生成与 Tomcat 手动部署全流程毕业答辩或课程验收时常需交付 WAR 包。VS Code 可一键生成项目根目录下创建build.xmlAnt 脚本project namedorm defaultwar property namesrc.dir valuesrc/main/java/ property nameweb.dir valuewebapp/ property namebuild.dir valuetarget/ property namewar.file valuedorm.war/ target namewar mkdir dir${build.dir}/ war destfile${build.dir}/${war.file} webxml${web.dir}/WEB-INF/web.xml fileset dir${web.dir}/ classes dir${build.dir}/classes/ lib dir${web.dir}/WEB-INF/lib/ /war /target /projectVS Code 终端执行ant war生成target/dorm.war手动复制dorm.war到Tomcat/webapps/目录启动 Tomcat自动解压并部署访问http://localhost:8080/dorm/login.jsp。提示WAR 包结构必须是dorm.war/WEB-INF/web.xmldorm.war/WEB-INF/lib/*.jardorm.war/login.jsp若解压后WEB-INF缺失说明构建脚本路径错误。我一般会在打包后用jar -tf target/dorm.war | head -20查看内部结构比盲目重启 Tomcat 更快定位问题。写完这个系统你手上就握住了 Java Web 的“源代码级”理解知道 Tomcat 如何解析web.xml明白 JSP 编译后的.java文件长什么样清楚session和cookie的底层交互也踩过了字符集、驱动版本、路径映射所有经典坑。这些不是过时的知识而是当你面对 Spring Boot 的Controller或Service时能一眼看穿它背后封装了什么的底气。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

淘宝类目数据同步方案:Python调用API全量拉取与幂等更新实战 2026/9/28 5:36:24

淘宝类目数据同步方案:Python调用API全量拉取与幂等更新实战

上个月接到一个很实际的需求:运营要做自营商城的类目映射,需要把淘宝的完整类目体系拉到本地数据库,每天更新一次,用于后台选品和报表统计。一开始我以为这就是个接口调用加一张表的事,真正做下来才发现,从…

阅读更多 →
提示工程实战:万能框架、优化技巧与评估指标 2026/9/28 5:36:24

提示工程实战:万能框架、优化技巧与评估指标

先说个现象:同样都是和 AI 对话,有人三句话就能拿到能直接用的方案,有人来回改十遍还在原地打转。差别往往不在模型强不强,而在你交出去的那段话——也就是 Prompt——质量高不高。我刚开始认真研究提示工程(Prompt En…

阅读更多 →
CentOS 7安装Git全指南:从yum到源码编译与SSH密钥配置 2026/9/28 5:36:24

CentOS 7安装Git全指南:从yum到源码编译与SSH密钥配置

做服务器运维或者搞开发的同学,应该都有过这样的经历:新拿了一台CentOS 7服务器,第一件事往往不是装业务环境,而是先把Git装上。这东西看着简单,网上教程一搜一大把,很多人说“yum install -y git”一行命令…

阅读更多 →
FAGOR fcom-SDK-1.1 从解压到联机调试实战指南 2026/9/28 5:36:24

FAGOR fcom-SDK-1.1 从解压到联机调试实战指南

简介:这份资源是FAGOR公司Fcom通信库的1.1版SDK,面向需要将FAGOR数控系统、机器人或自动化设备接入自有程序的开发者,尤其适合使用VB、C或C进行上位机通信与控制开发的工程师。压缩包共10个文件,约192KB,包含2个dll动态…

阅读更多 →
SpringBoot+Vue+MyBatis+MySQL:企业级美食推荐商城实战指南 2026/9/28 5:36:24

SpringBoot+Vue+MyBatis+MySQL:企业级美食推荐商城实战指南

做企业级美食推荐商城,最坑人的地方往往不是技术本身,而是业务闭环没想清楚就开工。用户要看菜、加购、下单、查订单,管理员要维护菜品、处理订单、配置推荐位,这一整条链路在没有理清之前,写出来的代码无论用什么框架…

阅读更多 →
Surface Go + VirtualTablet:低成本移动绘图工作站搭建指南 2026/9/28 5:36:17

Surface Go + VirtualTablet:低成本移动绘图工作站搭建指南

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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