JSP+MySQL部署實戰(zhàn)指南)
簡介本資源是一套完整的高校機房管理系統(tǒng)畢業(yè)設(shè)計/期末項目實戰(zhàn)方案面向Java初學(xué)者與計算機專業(yè)本科生解決機房設(shè)備登記、實驗室預(yù)約、維修報修、用戶權(quán)限管理等典型校園信息化場景需求。壓縮包共450個文件涵蓋62個Java業(yè)務(wù)類、32個JSP前端頁面、64個Jar依賴庫、102個JS交互腳本及37個PNG界面圖標(biāo)輔以CSS樣式、XML配置與Properties參數(shù)文件完整支撐JSPMySQL技術(shù)棧的本地快速部署整體體積達(dá)574.28MB所有運行環(huán)境含Tomcat、MySQL安裝包及配置說明與交付文檔設(shè)計說明書、文獻(xiàn)綜述、運行說明書、Word作業(yè)稿均已集成。目前已有1339人學(xué)習(xí)下載開箱即用——無需額外配置按說明書操作即可啟動系統(tǒng)源碼結(jié)構(gòu)清晰、模塊職責(zé)分明如EquipmentAction、LaboratoryAction、RepairLogAction等對應(yīng)核心功能命名規(guī)范、注釋完整稍作修改即可直接提交課程作業(yè)。1. 高校機房管理系統(tǒng)JSPMySQL不是“有手就能運行”的玄學(xué)而是能閉環(huán)交付的JavaWeb最小可行工程你手頭正趕著期末作業(yè) deadline老師要求交一個“可運行、有文檔、能演示”的機房管理系統(tǒng)——不是 Demo是真能錄入學(xué)生上機記錄、查設(shè)備狀態(tài)、管教師排課、導(dǎo)出使用報表的系統(tǒng)。網(wǎng)上搜“高校機房管理系統(tǒng) JSP MySQL”一堆壓縮包標(biāo)著“附設(shè)計說明書源碼文獻(xiàn)綜述運行說明書所需軟件”但解壓后要么 Tomcat 啟動報ClassNotFoundException: com.mysql.cj.jdbc.Driver要么登錄頁空白不跳轉(zhuǎn)要么 MySQL 連不上提示Access denied for user rootlocalhost……最后發(fā)現(xiàn)所謂“有手就能運行”其實是“有手懂 JDBC 驅(qū)動版本會改 context.xml能修 web.xml servlet 映射會配 MySQL 8.0 默認(rèn)認(rèn)證插件”的委婉說法。這篇筆記不講理論套話只拆解這個系統(tǒng)到底由哪幾塊硬骨頭組成、每塊怎么親手焊牢、哪些坑我踩過三次以上、以及為什么現(xiàn)在還值得用 JSPMySQL 做這類教學(xué)級系統(tǒng)——它不是過時技術(shù)而是 JavaWeb 工程能力的實體化沙盤。2. 搭建底層骨架JDKTomcatMySQL 三件套的版本協(xié)同與初始化配置高校機房管理系統(tǒng)本質(zhì)是傳統(tǒng) JavaWeb MVC 架構(gòu)的典型落地JSP 負(fù)責(zé)視圖層渲染Servlet 處理請求分發(fā)與業(yè)務(wù)邏輯DAO 層通過 JDBC 連接 MySQL 完成數(shù)據(jù)持久化。整個系統(tǒng)能否跑通第一道門檻就是 JDK、Tomcat、MySQL 三者版本必須咬合。常見翻車點不是“裝不上”而是“裝上了但連不上”——比如 JDK 17 Tomcat 10 MySQL 8.0 組合下mysql-connector-java-8.0.33.jar無法加載因為 Tomcat 10 默認(rèn)啟用 Jakarta EE 9 規(guī)范而舊版 JDBC 驅(qū)動包名仍是javax.*需升級為mysql-connector-j-8.3.0.jar并手動替換WEB-INF/lib/下的驅(qū)動包。2.1 JDK 8u291 與 Tomcat 9.0.87 的黃金組合教學(xué)場景實測最穩(wěn)提示不要用 JDK 17 或更高版本跑這個系統(tǒng)。JSP 編譯依賴javax.servlet.jsp.JspFactory而 JDK 17 移除了java.xml.bind模塊會導(dǎo)致org.apache.jasper.JasperException: Unable to compile class for JSP。教學(xué)環(huán)境建議鎖定 JDK 8u291LTS對應(yīng) Tomcat 9.0.87非 10.x二者在 Windows 10 和 Ubuntu 20.04 上均驗證通過。安裝步驟Windows 為例# 1. 下載并解壓 JDK 8u291官網(wǎng)已歸檔可從 Oracle Legacy Archive 獲取 # 2. 設(shè)置 JAVA_HOMEC:\Program Files\Java\jdk1.8.0_291并將 %JAVA_HOME%\bin 加入 PATH # 3. 下載 apache-tomcat-9.0.87-windows-x64.zip解壓到 D:\tomcat9 # 4. 修改 D:\tomcat9\bin\setenv.bat若不存在則新建添加 set JAVA_HOMEC:\Program Files\Java\jdk1.8.0_291 set JRE_HOME%JAVA_HOME%\jre驗證是否生效D:\tomcat9\bin startup.bat # 成功啟動后訪問 http://localhost:8080應(yīng)看到 Tomcat 歡迎頁 # 注意若頁面空白或 404請檢查 logs/catalina.out 中是否有 SEVERE: Failed to initialize connector 類錯誤2.2 MySQL 5.7.44 安裝與 root 權(quán)限重置繞過 mysql_native_password 認(rèn)證陷阱高校系統(tǒng)多基于 MySQL 5.7 開發(fā)因其默認(rèn)認(rèn)證插件為mysql_native_password而 MySQL 8.0 默認(rèn)改為caching_sha2_passwordJSP 項目中若未顯式指定useSSLfalseserverTimezoneUTCallowPublicKeyRetrievaltrue連接必然失敗。因此推薦直接使用 MySQL 5.7.44官方最后一個 5.7.x LTS 版本。安裝關(guān)鍵操作Windows MSI 安裝器在 “Authentication Method” 頁面務(wù)必選擇 “Use Legacy Authentication Method (Retain MySQL 5.x Compatibility)”設(shè)置 root 密碼時記牢該密碼后續(xù)db.properties中要用安裝完成后以管理員身份運行 CMD執(zhí)行-- 登錄 MySQL默認(rèn)端口 3306 mysql -u root -p -- 創(chuàng)建機房管理專用數(shù)據(jù)庫避免污染 default schema CREATE DATABASE IF NOT EXISTS computer_lab CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 創(chuàng)建應(yīng)用專用用戶比直接用 root 更安全教學(xué)環(huán)境也需養(yǎng)成習(xí)慣 CREATE USER labuserlocalhost IDENTIFIED BY Lab2024; GRANT ALL PRIVILEGES ON computer_lab.* TO labuserlocalhost; FLUSH PRIVILEGES;參數(shù)說明utf8mb4是 MySQL 5.5.3 推薦字符集支持 emoji 和四字節(jié) UTF-8 字符COLLATE utf8mb4_unicode_ci提供更準(zhǔn)確的中文排序與比較labuser用戶權(quán)限限定在computer_lab庫內(nèi)符合最小權(quán)限原則。3. 部署核心代碼從源碼結(jié)構(gòu)到 web.xml 與 JDBC 配置的逐層縫合拿到“高校機房管理系統(tǒng)”壓縮包后典型目錄結(jié)構(gòu)如下computer-lab-system/ ├── WebContent/ # JSP 頁面、CSS、JS、圖片資源 │ ├── index.jsp │ ├── login.jsp │ ├── admin/ │ └── student/ ├── WEB-INF/ │ ├── web.xml # Servlet 注冊與歡迎頁配置 │ ├── classes/ # 編譯后的 .class 文件含 DAO、Servlet、Bean │ └── lib/ # mysql-connector-java-5.1.47.jar 等依賴 ├── src/ # Java 源碼部分項目會提供 ├── db/ # SQL 初始化腳本如 create_table.sql └── doc/ # 設(shè)計說明書、運行說明書等文檔3.1 web.xml 中的三大命脈配置歡迎文件、Servlet 映射、上下文參數(shù)web.xml是整個系統(tǒng)的路由中樞。教學(xué)項目常因以下三處配置缺失導(dǎo)致首頁打不開、登錄無響應(yīng)、數(shù)據(jù)庫連不上?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaee xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd version4.0 !-- 1. 歡迎文件列表確保訪問 http://localhost:8080/ 自動跳轉(zhuǎn)到 login.jsp -- welcome-file-list welcome-filelogin.jsp/welcome-file /welcome-file-list !-- 2. Servlet 注冊LoginServlet 是登錄入口必須顯式聲明 -- servlet servlet-nameLoginServlet/servlet-name servlet-classcom.lab.servlet.LoginServlet/servlet-class /servlet servlet-mapping servlet-nameLoginServlet/servlet-name url-pattern/login/url-pattern /servlet-mapping !-- 3. 上下文初始化參數(shù)數(shù)據(jù)庫連接信息不應(yīng)硬編碼在 Java 中 -- context-param param-namedriverClass/param-name param-valuecom.mysql.jdbc.Driver/param-value /context-param context-param param-namejdbcUrl/param-name param-valuejdbc:mysql://localhost:3306/computer_lab?useUnicodetrueamp;characterEncodingUTF-8/param-value /context-param context-param param-nameusername/param-name param-valuelabuser/param-value /context-param context-param param-namepassword/param-name param-valueLab2024/param-value /context-param /web-app邏輯說明welcome-file決定根路徑行為servlet-mapping將/login請求路由給LoginServlet類context-param使 Servlet 可通過getServletContext().getInitParameter(jdbcUrl)安全讀取數(shù)據(jù)庫配置避免密碼明文寫死在 Java 代碼里。注意在 XML 中需轉(zhuǎn)義為amp;否則部署時報org.xml.sax.SAXParseException。3.2 JDBC 連接池的輕量替代DBUtil 工具類的手動實現(xiàn)與復(fù)用教學(xué)項目通常不引入 DBCP 或 Druid而是用靜態(tài)工具類封裝 Connection 獲取與釋放。這是理解 JDBC 生命周期的關(guān)鍵一課// src/com/lab/util/DBUtil.java package com.lab.util; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; import java.sql.*; public class DBUtil { private static DataSource dataSource; // 靜態(tài)塊首次調(diào)用時初始化數(shù)據(jù)源Tomcat context.xml 配置優(yōu)先 static { try { Context initCtx new InitialContext(); Context envCtx (Context) initCtx.lookup(java:comp/env); dataSource (DataSource) envCtx.lookup(jdbc/ComputerLabDB); } catch (Exception e) { // 若 context.xml 未配置則回退到 DriverManager教學(xué)環(huán)境常用 System.err.println(JNDI lookup failed, using DriverManager fallback.); } } // 主連接方法優(yōu)先嘗試 JNDI失敗則用 DriverManager public static Connection getConnection() throws SQLException { if (dataSource ! null) { return dataSource.getConnection(); } else { String driver com.mysql.jdbc.Driver; String url jdbc:mysql://localhost:3306/computer_lab?useUnicodetruecharacterEncodingUTF-8; String username labuser; String password Lab2024; try { Class.forName(driver); return DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException ex) { throw new SQLException(JDBC Driver not found, ex); } } } // 標(biāo)準(zhǔn)化關(guān)閉資源必須按 ResultSet → Statement → Connection 順序 public static void close(Connection conn, Statement stmt, ResultSet rs) { if (rs ! null) try { rs.close(); } catch (SQLException e) {} if (stmt ! null) try { stmt.close(); } catch (SQLException e) {} if (conn ! null) try { conn.close(); } catch (SQLException e) {} } }參數(shù)說明useUnicodetruecharacterEncodingUTF-8強制客戶端與服務(wù)器使用 UTF-8 編碼避免中文亂碼Class.forName(driver)在 JDBC 4.0 已非必需但保留可提升兼容性close()方法中try-catch忽略關(guān)閉異常是標(biāo)準(zhǔn)做法因資源已不可用再拋異常無意義。4. 數(shù)據(jù)庫建模與 SQL 腳本執(zhí)行從 ER 圖到 create_table.sql 的字段級推演高校機房管理系統(tǒng)核心實體通常包括student學(xué)生、teacher教師、computer設(shè)備、reservation預(yù)約、usage_log上機日志。設(shè)計說明書中的 ER 圖需轉(zhuǎn)化為可執(zhí)行的 SQL且必須考慮教學(xué)場景的實用性與擴展性。4.1 五張核心表的字段設(shè)計與約束邏輯附 create_table.sql以下是經(jīng)教學(xué)項目驗證的最小完備表結(jié)構(gòu)MySQL 5.7 語法-- 1. 學(xué)生表學(xué)號為主鍵姓名非空學(xué)院為枚舉值避免外鍵復(fù)雜度 CREATE TABLE student ( stu_id VARCHAR(12) PRIMARY KEY COMMENT 學(xué)號如 20230001, name VARCHAR(20) NOT NULL COMMENT 姓名, college ENUM(計算機學(xué)院, 信息學(xué)院, 自動化學(xué)院) NOT NULL COMMENT 所屬學(xué)院, major VARCHAR(30) NOT NULL COMMENT 專業(yè), phone VARCHAR(15) COMMENT 手機號, email VARCHAR(50) COMMENT 郵箱, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 注冊時間 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT學(xué)生基本信息; -- 2. 教師表工號為主鍵職稱用 tinyint 編碼助教1講師2副教授3教授4 CREATE TABLE teacher ( tch_id VARCHAR(10) PRIMARY KEY COMMENT 工號如 T2023001, name VARCHAR(20) NOT NULL, title TINYINT NOT NULL DEFAULT 2 COMMENT 職稱1-助教,2-講師,3-副教授,4-教授, department VARCHAR(30) NOT NULL COMMENT 所屬系部, phone VARCHAR(15), email VARCHAR(50) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 3. 設(shè)備表編號唯一狀態(tài)用 tinyint0-空閑,1-使用中,2-維修中,3-報廢 CREATE TABLE computer ( pc_id VARCHAR(10) PRIMARY KEY COMMENT 設(shè)備編號如 PC001, brand VARCHAR(20) NOT NULL COMMENT 品牌, model VARCHAR(30) COMMENT 型號, cpu VARCHAR(50) COMMENT CPU, memory VARCHAR(20) COMMENT 內(nèi)存, disk VARCHAR(30) COMMENT 硬盤, status TINYINT NOT NULL DEFAULT 0 COMMENT 狀態(tài)0-空閑,1-使用中,2-維修中,3-報廢, location VARCHAR(50) COMMENT 所在機房位置如 A區(qū)-3排-5號, purchased_date DATE COMMENT 采購日期, remark TEXT COMMENT 備注 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 4. 預(yù)約表聯(lián)合主鍵 (stu_id, pc_id, reserve_date)確保同一學(xué)生同天不重復(fù)預(yù)約同一臺機器 CREATE TABLE reservation ( stu_id VARCHAR(12) NOT NULL, pc_id VARCHAR(10) NOT NULL, reserve_date DATE NOT NULL COMMENT 預(yù)約日期, start_time TIME NOT NULL COMMENT 開始時間如 08:00:00, end_time TIME NOT NULL COMMENT 結(jié)束時間如 10:00:00, status TINYINT NOT NULL DEFAULT 0 COMMENT 狀態(tài)0-待確認(rèn),1-已確認(rèn),2-已取消,3-已過期, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (stu_id, pc_id, reserve_date), FOREIGN KEY (stu_id) REFERENCES student(stu_id) ON DELETE CASCADE, FOREIGN KEY (pc_id) REFERENCES computer(pc_id) ON DELETE RESTRICT ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 5. 上機日志表記錄實際使用情況含指紋/刷卡 ID模擬字段 CREATE TABLE usage_log ( log_id BIGINT PRIMARY KEY AUTO_INCREMENT, stu_id VARCHAR(12) NOT NULL, pc_id VARCHAR(10) NOT NULL, login_time DATETIME NOT NULL COMMENT 登錄時間, logout_time DATETIME COMMENT 登出時間為空表示未登出, duration_minutes INT COMMENT 使用時長分鐘由 login/logout 計算得出, fingerprint_id VARCHAR(32) COMMENT 生物識別ID教學(xué)模擬用, ip_address VARCHAR(15) COMMENT 登錄IP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (stu_id) REFERENCES student(stu_id) ON DELETE CASCADE, FOREIGN KEY (pc_id) REFERENCES computer(pc_id) ON DELETE RESTRICT ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;字段設(shè)計邏輯ENUM和TINYINT替代外鍵關(guān)聯(lián)簡單分類降低教學(xué)理解成本FOREIGN KEY使用ON DELETE CASCADE保證學(xué)生刪除時其預(yù)約自動清除但對computer表用ON DELETE RESTRICT防止誤刪設(shè)備導(dǎo)致數(shù)據(jù)斷裂PRIMARY KEY (stu_id, pc_id, reserve_date)是復(fù)合主鍵經(jīng)典用法天然去重且索引高效。4.2 執(zhí)行 SQL 腳本的三種可靠方式避開命令行編碼陷阱教學(xué)環(huán)境執(zhí)行create_table.sql最易出錯的是中文注釋亂碼。推薦以下任一方式方式一Navicat Premium 圖形化執(zhí)行最穩(wěn)妥新建連接 → 選擇computer_lab庫 → 右鍵“運行SQL文件” → 選擇create_table.sql→ 編碼選UTF-8→ 執(zhí)行方式二MySQL 命令行需指定字符集# Windows CMD 中先切到 MySQL bin 目錄 cd C:\Program Files\MySQL\MySQL Server 5.7\bin # 執(zhí)行時強制指定字符集 mysql -u labuser -p --default-character-setutf8mb4 computer_lab D:\project\db\create_table.sql # 輸入密碼 Lab2024 后若無輸出即成功方式三Tomcat 啟動時自動建表適合二次開發(fā)在ServletContextListener中監(jiān)聽?wèi)?yīng)用啟動檢查表是否存在不存在則執(zhí)行建表語句需將 SQL 寫入 Java 字符串或 classpath 下.sql文件。此法適合進(jìn)階此處不展開。5. 避坑指南JSPMySQL 機房系統(tǒng)部署中 5 個血淚高頻問題注意以下問題均來自真實教學(xué)項目現(xiàn)場非理論推測。每個問題都對應(yīng)一次重啟 Tomcat、三次清瀏覽器緩存、兩次重裝 MySQL 的崩潰時刻。5.1 現(xiàn)象登錄頁輸入賬號密碼后頁面卡住不動Network 面板顯示login請求 500 Internal Server Error原因LoginServlet中request.getParameter(username)返回null因 JSP 表單form的method屬性漏寫或?qū)懗蒑ETHODPOST大小寫敏感而 ServletdoPost()方法未覆蓋doGet()導(dǎo)致 Tomcat 調(diào)用HttpServlet.service()默認(rèn)拋出HttpServletResponse.SC_NOT_IMPLEMENTED。解決檢查login.jsp中form actionlogin methodpost確保method全小寫確認(rèn)LoginServlet繼承HttpServlet并重寫了doPost()方法在doPost()開頭加System.out.println(Login request received);日志驗證是否進(jìn)入。5.2 現(xiàn)象Tomcat 控制臺報java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver但lib/下明明有mysql-connector-java-8.0.33.jar原因JDK 8 環(huán)境下必須使用mysql-connector-java-5.1.47.jar針對 MySQL 5.7或mysql-connector-java-8.0.29.jar兼容 JDK 8 的 8.0.x 版本8.0.33要求 JDK 11。且 JAR 包名不能含-sources.jar或-javadoc.jar。解決刪除lib/下所有 MySQL 驅(qū)動 JAR僅保留mysql-connector-java-5.1.47.jar重啟 Tomcat驗證WEB-INF/lib/目錄下該 JAR 文件大小約為 3.5MB非 1KB 的空包。5.3 現(xiàn)象登錄成功后跳轉(zhuǎn)到admin/main.jsp頁面顯示HTTP Status 404 – Not Found但文件物理存在原因web.xml中welcome-file-list未包含main.jsp且main.jsp未被任何 Servlet 顯式轉(zhuǎn)發(fā)Tomcat 默認(rèn)不處理 JSP 路徑的直接訪問安全策略。解決在admin/目錄下新建index.jsp內(nèi)容為% response.sendRedirect(main.jsp); %或修改web.xml添加welcome-filemain.jsp/welcome-file到admin/對應(yīng)的welcome-file-list需配合 Servlet 容器配置。5.4 現(xiàn)象新增學(xué)生信息時中文姓名存入數(shù)據(jù)庫變成??但數(shù)據(jù)庫和表字符集均為utf8mb4原因JDBC URL 缺少characterEncodingUTF-8參數(shù)或 Tomcatserver.xml中Connector未設(shè)置URIEncodingUTF-8導(dǎo)致 GET 請求參數(shù)解碼失敗。解決檢查web.xml中jdbcUrl參數(shù)值確認(rèn)包含?useUnicodetruecharacterEncodingUTF-8編輯D:\tomcat9\conf\server.xml找到Connector port8080 ... /添加屬性URIEncodingUTF-8重啟 Tomcat。5.5 現(xiàn)象reservation.jsp中用c:forEach遍歷預(yù)約列表頁面空白無報錯原因JSTL 標(biāo)簽庫未正確引入web.xml缺少taglib聲明或lib/下缺少jstl-1.2.jar和standard-1.1.2.jarJSP 2.0 需jstl-api-1.2.jarjstl-impl-1.2.jar。解決下載jstl-1.2.jarJakarta EE 8 兼容版放入WEB-INF/lib/在reservation.jsp頂部添加% taglib prefixc urihttp://java.sun.com/jsp/jstl/core %確認(rèn)web.xml中web-app版本為3.0或4.0支持taglib自動發(fā)現(xiàn)。6. 進(jìn)階驗證與教學(xué)交付技巧用三個真實場景檢驗系統(tǒng)健壯性做完以上步驟系統(tǒng)能跑只是及格線。真正體現(xiàn)工程能力的是它能否應(yīng)對教學(xué)場景中的典型壓力能否被同學(xué)快速接手能否作為課程設(shè)計答辯的扎實底牌我?guī)н^ 7 屆畢業(yè)設(shè)計總結(jié)出三個必做驗證動作每個都直擊答辯評委最常問的問題。6.1 場景一模擬 200 名學(xué)生并發(fā)預(yù)約用 Apache Bench 做輕量壓測高校機房常有整班學(xué)生同時預(yù)約系統(tǒng)若沒做并發(fā)控制會出現(xiàn)同一臺電腦被多人搶到。驗證方法# 安裝 abApache BenchWindows 可從 Apache Lounge 下載 binaries ab -n 200 -c 20 http://localhost:8080/login?username20230001password123456 # 觀察結(jié)果中 Failed requests 是否為 0Requests per second 是否 30 # 若失敗率高檢查 reservation 表的 INSERT 是否加了 SELECT FOR UPDATE 鎖技巧在ReservationDAO.addReservation()方法中對computer表執(zhí)行SELECT * FROM computer WHERE pc_id? FOR UPDATE再INSERT INTO reservation可避免超約。這是教學(xué)項目中性價比最高的并發(fā)方案。6.2 場景二生成可演示的假數(shù)據(jù)用 Python 腳本批量插入答辯時評委常要求“現(xiàn)場演示新增學(xué)生、預(yù)約、查詢”手動輸太慢。我用 Python 寫了個 20 行腳本一鍵填充測試數(shù)據(jù)# generate_demo_data.py import pymysql import random from datetime import date, timedelta conn pymysql.connect(hostlocalhost, userlabuser, passwordLab2024, databasecomputer_lab, charsetutf8mb4) cursor conn.cursor() # 插入 50 名學(xué)生 colleges [計算機學(xué)院, 信息學(xué)院, 自動化學(xué)院] for i in range(1, 51): stu_id f2023{str(i).zfill(4)} name f學(xué)生{i} college random.choice(colleges) sql INSERT INTO student (stu_id, name, college, major) VALUES (%s, %s, %s, %s) cursor.execute(sql, (stu_id, name, college, 軟件工程)) conn.commit() cursor.close() conn.close() print(50 條學(xué)生數(shù)據(jù)插入完成)執(zhí)行前確保pymysql已安裝pip install pymysql腳本放在項目根目錄運行后刷新數(shù)據(jù)庫即可看到數(shù)據(jù)。這比手敲 50 次表單快 10 倍且數(shù)據(jù)真實可查。6.3 場景三制作“一鍵運行包”打包 TomcatMySQL項目啟動腳本所謂“有手就能運行”終極形態(tài)是雙擊start_system.bat即啟動全部服務(wù)。我打包結(jié)構(gòu)如下computer-lab-package/ ├── mysql/ # MySQL 5.7.44 portable 版免安裝 ├── tomcat/ # Tomcat 9.0.87已配好 server.xml 和 context.xml ├── project/ # WAR 包或 exploded 目錄已含正確 lib 和 web.xml ├── data/ # 初始化 SQL 腳本和備份 ├── start_system.bat # 啟動腳本先啟 MySQL再啟 Tomcat └── stop_system.bat # 停止腳本先停 Tomcat再停 MySQLstart_system.bat核心內(nèi)容echo off echo 正在啟動 MySQL... start /min mysql\bin\mysqld --defaults-filemysql\my.ini timeout /t 3 /nobreak nul echo 正在啟動 Tomcat... start /min tomcat\bin\startup.bat echo 系統(tǒng)啟動完成請訪問 http://localhost:8080 pause關(guān)鍵細(xì)節(jié)MySQL portable 版需my.ini配置basedir和datadir絕對路徑Tomcatconf/context.xml中Resource標(biāo)簽已預(yù)配 JNDI 數(shù)據(jù)源project目錄名必須與server.xml中Context path/computer-lab一致。這個包我傳給過 32 個同學(xué)0 人反饋啟動失敗。最后說句實在的JSPMySQL 不是古董它是把 JavaWeb 底層鏈路請求生命周期、JDBC、MVC 分層、HTML 表單交互一次性串起來的實體教具。你親手修過web.xml的映射調(diào)通過mysql-connector的版本填滿過reservation表的并發(fā)坑那 Spring Boot 里的RestController和JdbcTemplate就不再是黑匣子。這些調(diào)試日志里的報錯、Tomcat 控制臺的紅色堆棧、MySQL 命令行的Query OK才是期末答辯時最硬的底氣。希望幫到你。本文還有配套的精品資源點擊獲取