Java+MySQL网上作业批改系统部署避坑指南

发布时间:2026/11/2 8:58:38
Java+MySQL网上作业批改系统部署避坑指南 简介这是一套基于Java与MySQL开发的网上作业批改系统源码包面向Java Web课程设计、毕业设计及需要练习增删改查与后台权限管理的初中级学习者。系统以简洁页面和友好错误提示为设计重点管理员端覆盖班级、教师、学生、公告、留言、资料及管理员自身信息管理支持录入、查询、删除、打印等常规操作并兼顾基本的安全防护适合用作教学演示、二次开发或课程作业参考。压缩包共265个文件约1.93MB包含45个jsp页面、24个java源文件与24个class编译文件、9个js脚本、6个css样式及1个sql数据库脚本另有gif、png、jpg界面素材和少量doc、docx说明文档结构完整便于理解前后台交互与数据库设计。目前已有1615人学习下载可作为Java Web入门项目拆解与功能扩展的实践样本。1. 版本先对齐网上作业批改系统这套 Java MySQL 组合八成翻车在版本上上周帮 A 同学看他那套网上作业批改系统的安装问题zip 解压出来目录完整配置文件也在可 Tomcat 窗口一闪就关浏览器敲 8080 只给一个 404。他前后重装了三次以为是包损坏最后发现是机器上留着两个 JDKJAVA_HOME 指到了 17老项目的 class 文件按 52.0 编译容器加载时直接抛 Unsupported major.minor version。这类 Java MySQL 的作业批改系统在学校课程设计里实在太常见——教师端发作业、学生端提交、后台打分统计功能不复杂但对运行环境相当挑剔。装不好不是打不开首页那么简单而是数据库连不上、中文全变问号、附件传上去打不开一个比一个耗时间。下面这套流程是我按“先对齐版本、再跑容器、再落数据库、最后调项目”的顺序整理出来的适合第一次接触这类项目、手里只有一个 zip 包的人照着走。2. 装 JDK 8 和 Tomcat 9先把容器跑起来别急着碰项目代码这一章的思路很明确在碰项目之前先让一个空容器能正常返回页面。很多人反过来做上来就把 war 包丢进去出错时根本分不清是环境的问题还是项目的问题排查起来像开黑匣子。先把 JDK 和 Tomcat 单独验证通过后面所有报错都能定位到项目层面。版本上我的建议是 JDK 8 配 Tomcat 8.5 或 9。这类基于 Servlet/JSP 的批改系统绝大多数是五六年前的教学代码结构用的还是javax.servlet包名迁到 Tomcat 10 会直接因为包名改成jakarta.servlet而全线报 ClassNotFoundException。数据库那边对应 MySQL 5.7 最稳8.0 也能跑但驱动类和连接串参数得跟着改后面单独说。2.1 JDK 8 落地路径、JAVA_HOME 和三个写错就白干的细节安装包一路下一步没问题问题全在环境变量。我一般把 JDK 装到一个不含空格、不含中文的路径下比如D:\env\jdk1.8.0_202或/opt/jdk1.8.0_202。默认的C:\Program Files\Java\...在部分老脚本里会因为空格被截断属于那种平时没事、关键时刻坑你一下的隐患。Linux 或 macOS 下环境变量写在~/.bashrc或/etc/profile里# JDK 8 环境变量装在 /opt/jdk1.8.0_202 export JAVA_HOME/opt/jdk1.8.0_202 export PATH$JAVA_HOME/bin:$PATH # 老项目里偶尔有按 CLASSPATH 找 jar 的写法一并补上更保险 export CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar改完执行source ~/.bashrc让它生效。这三行的作用分别是JAVA_HOME是给 Tomcat 的启动脚本读的Tomcat 的setclasspath.sh会拿它去拼tools.jar和 JRE 路径这一项没设Linux 下启动脚本会直接退出PATH是为了让java、javac命令在任何目录下都能敲CLASSPATH现在多数情况用不上但一些老的教学项目会在代码里硬写相对路径加载资源补上不吃亏。Windows 下不要手敲命令走「此电脑 → 属性 → 高级系统设置 → 环境变量」新建系统变量JAVA_HOME值填D:\env\jdk1.8.0_202注意不要带结尾反斜杠也不要带\bin——这是最常见的两个写错法带了\bin之后 Tomcat 会去找D:\env\jdk1.8.0_202\bin\bin\java.exe报错信息还特别含糊。配完必须开一个新的命令行窗口验证老窗口读的是旧环境变量java -version # 期望输出java version 1.8.0_202 javac -version # 期望输出javac 1.8.0_202两条命令的版本号必须一致。如果java -version是 1.8 而javac -version是 17说明 PATH 里还有另一个 JDK 排在前面去where javaWindows或which javaLinux看一眼顺序把多余的那条删掉。这种“版本打架”是最典型的玄学问题来源表现是编译能过、运行报错或者反过来。2.2 Tomcat 9 解压式安装端口、URIEncoding 与启动脚本Tomcat 不需要安装解压即用。我习惯解到D:\env\apache-tomcat-9.0.x或/opt/tomcat9同样避开空格和中文。解压后第一件事不是启动是改conf/server.xml里的 Connector!-- conf/server.xml找到 8080 那个 Connector -- Connector port8080 protocolHTTP/1.1 connectionTimeout20000 URIEncodingUTF-8 redirectPort8443 /这里只加了一个URIEncodingUTF-8。别小看这一行Tomcat 8 之后 GET 请求默认解码用的是 UTF-8但不少老配置文件是从 Tomcat 7 时代抄过来的里面写着URIEncodingISO-8859-1结果就是表单 POST 提交的中文正常地址栏带参数的查询、搜索框里的中文全变问号。批改系统里按学生姓名搜索作业是高频操作这个坑基本必踩。port如果 8080 被占用后面章节会讲怎么查可以改成 8081、9090但改完记得同步项目里所有写死端口的配置包括一些硬编码的图片地址。启动脚本Windows 用bin\startup.batLinux 用bin/startup.sh。Linux 下还需要给脚本加执行权限chmod x /opt/tomcat9/bin/*.sh /opt/tomcat9/bin/startup.sh # 查看启动日志确认最后出现 Server startup in xxx ms tail -f /opt/tomcat9/logs/catalina.outstartup.sh实际上会去调catalina.sh start它依赖JAVA_HOME或JRE_HOME两个都没有就会打印Neither the JAVA_HOME nor the JRE_HOME environment variable is defined然后退出。看到这句话不用怀疑 Tomcat 包坏了回去检查第 2.1 节的环境变量。catalina.out是整个部署过程中最重要的文件几乎所有启动异常、数据库连接失败、类找不到的堆栈都会落在这里。养成部署前先tail -f开着它的习惯比事后翻日志省一半时间。2.3 用一张静态页验证容器别用项目本身试错Tomcat 起来后先别放项目放一张自己写的测试页。在webapps下建目录webapps/probe里面放一个index.jsp% page contentTypetext/html;charsetUTF-8 languagejava % % // 打印当前 JVM 与容器信息确认跑的是哪个 JDK、哪个 Tomcat out.println(JVM: System.getProperty(java.version) br/); out.println(编码: response.getCharacterEncoding() br/); out.println(中文测试作业批改系统); %访问http://127.0.0.1:8080/probe/index.jsp。这一页能同时验证四件事容器是否启动成功、JSP 是否被正确编译、当前 JVM 版本是否真的是 1.8、中文是否正常显示。如果 JSP 里那行中文变成了??????说明response的编码链路有问题但至少容器是活的问题范围就缩小到了编码配置。用127.0.0.1而不是localhost也有讲究。某些机器上localhost会先解析到 IPv6 的::1而 Tomcat 默认只在 IPv4 的 0.0.0.0 上监听结果是浏览器转半天最后连接被拒。这个现象特别迷惑人因为 ping localhost 是通的。遇到“Tomcat 明明启动了但浏览器打不开”先换127.0.0.1试一次能省下半小时。三件事都通过容器这一层就算干净了。后面项目出任何问题都可以放心地怀疑项目配置而不是环境。3. MySQL 5.7 落地建库、导脚本、开账号三步走数据库这一层是这类项目最容易埋雷的地方。批改系统的数据表不算多——用户表、作业表、提交记录表、评分表撑死十几张——但脚本里往往带着建库语句、字符集声明和初始账号数据一个环节对不上登录就进不去。我的做法是安装完先改配置再用命令行导脚本最后单独开一个业务账号三步都不省。3.1 安装后的第一件事把字符集和时区写进配置文件装完 MySQL 5.7先找到配置文件。Windows 下通常是安装目录里的my.iniLinux 下是/etc/my.cnf。在[mysqld]段落下补这几行[mysqld] # 服务端默认字符集utf8mb4 才是真正的四字节 UTF-8 character-set-serverutf8mb4 collation-serverutf8mb4_general_ci # 时区固定为东八区避免 Java 取到的时间差 8 小时 default-time-zone08:00 # 关闭严格模式之外不用动但大小写敏感要注意 lower_case_table_names1 [client] default-character-setutf8mb4逐条说明。character-set-server选utf8mb4而不是utf8因为 MySQL 里的utf8其实是三字节的残废版本存不下 emoji 和部分生僻字。学生提交作业时如果带了这些字符插入会直接报Incorrect string value整条记录写不进去。utf8mb4_general_ci里的ci表示比较时不区分大小写登录账号密码校验依赖这个行为换成_bin会导致大小写不一致的账号登不进去。default-time-zone08:00这一行是血泪经验。MySQL 默认用系统时区容器化环境或某些云主机上系统时区是 UTCJava 端new Date()拿到的是本地时间写进库里再读出来就差了 8 小时。表现是学生下午三点提交的作业教师端显示成早上七点按时间排序的全乱了。加这一行比在连接串里写serverTimezone更彻底。lower_case_table_names1让表名比较不区分大小写。SQL 脚本里写的是HomeworkJava 代码里查的是homework在 Linux 上 MySQL 默认区分大小写直接就报表不存在。这个参数必须在初始化数据目录之前设定装完再改需要重装实例属于“没有后悔药”的配置第一次装就写上。改完配置必须重启服务net stop mysql net start mysqlWindows或systemctl restart mysqldLinux。然后验证SHOW VARIABLES LIKE character_set_server; SHOW VARIABLES LIKE time_zone; SHOW VARIABLES LIKE lower_case_table_names;三行查询的返回值分别应该是utf8mb4、08:00、1。对不上就是配置文件没被读到——Windows 下常见原因是配置文件放在了错误目录MySQL 实际读的是C:\ProgramData\MySQL\MySQL Server 5.7\my.ini可以用SELECT datadir;定位。3.2 导入 .sql 脚本命令行比双击可靠zip 包里通常有个db或sql目录放着建库建表的.sql文件。我见过太多人用图形工具双击打开再点执行结果中文注释变乱码、部分语句被跳过的。命令行导一遍可控性高得多。先看一眼脚本开头有没有CREATE DATABASE# 大致扫一下脚本结构确认是否自带建库语句、用的什么字符集 head -n 30 homework_db.sql grep -i create database\|charset homework_db.sql | head -n 5如果脚本自带CREATE DATABASE直接导即可如果没有先自己建库再导# 建库显式指定字符集和 3.1 的配置保持一致 mysql -uroot -p -e CREATE DATABASE homework_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; # 导入脚本--default-character-set 必须写否则按客户端默认字符集解析 mysql -uroot -p --default-character-setutf8mb4 homework_db homework_db.sql--default-character-setutf8mb4这个参数不能省。它决定了 MySQL 客户端如何解释脚本文件的字节流不写的话客户端可能用 GBK 或 latin1 去解析一个 UTF-8 编码的脚本结果是表建出来了但初始的管理员账号名、班级名称全是乱码登录时怎么输都提示密码错误——因为用户名字段本身就是乱码和你输入的对不上。导入完成后验证表数量和数据USE homework_db; SHOW TABLES; -- 表数量应该和脚本里的 CREATE TABLE 条数一致 SELECT COUNT(*) FROM t_user; -- 随便查一张有初始数据的表看中文是否正常 SELECT * FROM t_user LIMIT 5;如果SHOW TABLES出来的表名是乱码或者表是空的但脚本明明有 INSERT 语句回去检查脚本文件本身的编码。用file -i homework_db.sql看它到底是不是 UTF-8有些包里的脚本是从 Windows 记事本另存的带 BOM 头MySQL 客户端解析第一行会报语法错误用sed -i 1s/^\xEF\xBB\xBF// homework_db.sql去掉 BOM 再导一次。3.3 给项目开一个专用账号别让 root 裸奔连接串里直接写 root 是这类项目的通病本地跑没事一旦放到共享环境就是事故。我的习惯是建一个只对业务库有增删改查权限的账号-- 建业务账号host 用 localhost 表示只允许本机连接 CREATE USER hw_applocalhost IDENTIFIED BY Hw2024#app; -- 只给业务库的 DML 权限不给 DROP、ALTER GRANT SELECT, INSERT, UPDATE, DELETE ON homework_db.* TO hw_applocalhost; FLUSH PRIVILEGES;参数上要说清楚几点。hw_applocalhost中的 host 部分决定了允许从哪连写localhost走的是 Unix socket 或命名管道写127.0.0.1走 TCP写%允许任意来源。Java 的 JDBC 驱动走的是 TCP所以连接串里如果写127.0.0.1账号的 host 就必须是127.0.0.1或%否则报Access denied for user hw_applocalhost——注意报错里的 host 会变成 localhost因为驱动反查了。这个错在部署时出现的频率极高遇到先查账号的 host 匹配。只给四个 DML 权限是有意为之。批改系统正常运行不需要改表结构万一代码里有地方误执行了DROP TABLE没权限直接失败比事后恢复数据划算。但要注意如果项目带自动建表逻辑有些框架启动时会执行 schema 脚本第一次启动会因为缺CREATE权限失败这种情况临时补一条GRANT CREATE, ALTER, INDEX ON homework_db.* TO hw_applocalhost;跑起来之后可以再收回去。密码里带#或这类特殊字符时在连接串里要么 URL 编码要么干脆换成纯字母数字加下划线。#在 properties 文件里会被当成注释起始符写进去之后密码后半截直接被吞掉报的还是“密码错误”查半天查不出来。验证账号能连mysql -uhw_app -pHw2024#app -h127.0.0.1 -P3306 homework_db -e SELECT 1;能返回一行1就说明账号、host、权限、端口全对上了。这一步单独验证比等部署完项目再去猜连接串有没有问题高效得多。4. 部署配置jdbc.properties 的四个参数与 war 包落地环境层通了剩下的是把项目接上去。批改系统的部署配置集中在两个地方数据源配置文件和 war 包的放置方式。前者改错一个字符就连不上库后者放错位置就是 404。4.1 数据源四行参数改错的都是细节项目里通常有个jdbc.properties或db.properties在src/main/resources或WEB-INF/classes下。内容大致是这样# 驱动类名MySQL 5.7 用 com.mysql.jdbc.Driver jdbc.drivercom.mysql.jdbc.Driver # 连接串库名、时区、编码、SSL 四个参数都要照顾到 jdbc.urljdbc:mysql://127.0.0.1:3306/homework_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue jdbc.usernamehw_app jdbc.passwordHw2024#app逐段拆开看。com.mysql.jdbc.Driver是 MySQL 5.1.x 驱动的类名如果用的是 8.0 的驱动 jar类名要换成com.mysql.cj.jdbc.Driver否则启动时报Loading class com.mysql.jdbc.Driver. This is deprecated之后连接失败。判断用哪个的办法很简单看WEB-INF/lib下那个 mysql-connector 的 jar 文件名带5.1的用老类名带8.0的用新类名。连接串里的useUnicodetruecharacterEncodingutf8是一对缺一个都可能出现写入正常、读取乱码的情况。useSSLfalse在 MySQL 5.7 上不写会打一堆警告在 8.0 上不写可能因为证书握手失败直接连不上。serverTimezoneAsia/Shanghai配合库端的default-time-zone双重保险只配一边也够但两边都配能避免容器时区漂移带来的问题。allowPublicKeyRetrievaltrue只在 MySQL 8.0 的caching_sha2_password认证方式下才需要5.7 写了也无害。改这个文件有两个原则。第一是备份原文件改成.bak放旁边出问题直接换回来。第二是注意WEB-INF/classes下也可能有一份编译后的旧配置如果项目是别人打好包给你的改完src里的不生效很可能是容器加载的是classes下那份。这种情况我一般直接把两边都改一遍省得排查。4.2 打包成 war 丢进 webapps还是 IDE 里配 Tomcat两种部署方式看手里有没有源码。有源码、用 Maven 管理的话命令行打包最干净cd /opt/project/homework-system # 跳过测试教学项目里的单元测试经常连的是写死的库跑不过 mvn clean package -Dmaven.test.skiptrue # 打出来的 war 在 target 下复制到 webapps 并改名 cp target/homework-system-1.0.war /opt/tomcat9/webapps/homework.war改名的意义在于访问路径。war 包名就是上下文路径叫homework.war就访问http://127.0.0.1:8080/homework/叫homework-system-1.0.war就得访问/homework-system-1.0/长且容易输错。改成短名省事。Tomcat 启动时会自动解压 war 包成同名目录日志里出现Deploying web application archive [/opt/tomcat9/webapps/homework.war]就说明在部署了。没有源码、只有 war 包的话更简单直接丢进去重启。但要注意删掉旧的解压目录# 重新部署前先清掉旧的解压目录否则新 war 可能不生效 rm -rf /opt/tomcat9/webapps/homework rm -rf /opt/tomcat9/work/Catalina/localhost/homework cp homework.war /opt/tomcat9/webapps/work目录下放的是 JSP 编译后的 servlet 源码和 class不清的话改了 JSP 页面刷新还是老的。这是“改了代码没反应”最常见的原因比缓存还顽固。用 IDE 的话配置 Tomcat 运行时指向解压目录部署方式选 exploded artifact好处是改 JSP 立即生效不用反复打包。但 IDE 里的配置和命令行启动的配置是两套环境变量、catalina.base都可能不同出问题时先确认自己到底是哪套在跑。4.3 附件上传目录与日志目录两个部署后才想起来的地方批改系统必然有附件上传——学生交的作业文档、教师批改后的回传文件。这类目录的坑在于在 IDE 里跑的时候路径是相对工程目录的打成 war 部署后当前工作目录变成了 Tomcat 的bin路径全错。常见做法是在配置文件里单独指定一个绝对路径比如# 上传根目录部署后必须存在且可写 upload.root/opt/homework/upload # 单文件大小上限单位 MB upload.maxSize20然后建目录并给权限mkdir -p /opt/homework/upload # Tomcat 以哪个用户跑就给哪个用户写权限 chown -R tomcat:tomcat /opt/homework/upload chmod 755 /opt/homework/upload权限不对的表现很有特点页面上传按钮点了没反应或者提示“上传成功”但列表里没有文件去catalina.out里能找到java.io.FileNotFoundException: /opt/homework/upload/xxx (Permission denied)。Windows 下没有权限概念但会有另一个问题——路径里写反斜杠在 properties 文件里被当成转义字符吃掉D:\upload变成D:upload目录不存在。统一用正斜杠D:/upload就没事。日志目录同样要单独看。Tomcat 的日志在logs/下分好几个文件catalina.out是标准输出和错误的汇总localhost.log是应用级异常localhost_access_log是访问记录。项目里如果配了 log4j 或 logback日志可能落到WEB-INF/logs或者某个绝对路径下部署后找不到日志别急着说没日志先find / -name *.log -mmin -10扫一遍最近修改过的。5. 避坑记录五个把我按在工位上重装的现象下面这五条是我在装这类批改系统时反复遇到的。每条按现象、原因、解决三段写遇到对应症状可以直接对号。5.1 现象一登录页中文全是问号英文正常现象页面能打开布局正常但所有中文标签显示成??????或登录。原因编码链路中有一环没对齐。可能是 JSP 页面没写pageEncoding可能是 Tomcat 的 Connector 没配URIEncoding也可能是数据库连接串缺characterEncoding还可能是响应头里的Content-Type没带 charset。这四环任意一环错中文就废。解决按链路顺序查。先看浏览器开发者工具里响应头的Content-Type有没有charsetUTF-8没有就查 JSP 顶部的% page contentTypetext/html;charsetUTF-8 %。然后看 POST 表单提交的中文是否正常正常说明请求编码没问题GET 参数乱码则回到server.xml补URIEncodingUTF-8。最后查数据库SHOW VARIABLES LIKE character_set%看服务端、连接、结果三个字符集是不是都为utf8mb4有latin1的按第 3.1 节改配置重启。5.2 现象二Communications link failure服务明明起着现象项目启动时报Communications link failure或Could not create connection to database server但用命令行mysql -u... -p能正常连上。原因三个可能。一是 JDBC 连接串里的端口写错比如写成 3306 但实际实例跑在 3307二是账号的 host 匹配不上命令行走 socket、JDBC 走 TCPhw_applocalhost有时候不放行 TCP 连接三是 MySQL 8.0 的认证插件caching_sha2_password与老驱动不兼容。解决先确认端口SHOW VARIABLES LIKE port;查一下真实端口。再把账号 host 改成127.0.0.1或%试一次能连上就说明是 host 匹配问题。还不行就看驱动版本WEB-INF/lib下的 connector 是 5.1.x 而库是 8.0 的话要么换 8.0 驱动要么把账号认证方式改回mysql_native_passwordALTER USER hw_applocalhost IDENTIFIED WITH mysql_native_password BY Hw2024#app;。报错堆栈里如果带Public Key Retrieval is not allowed在连接串补allowPublicKeyRetrievaltrue即可。5.3 现象三404 和 500 白页处理方式完全不同现象访问地址后要么是 Tomcat 自带的 404 页面要么是 500 白页只有一行HTTP Status 500 - Internal Server Error。原因404 是路径问题容器根本没找到这个应用或这个资源。常见于 war 包名和访问路径不一致、web.xml里的url-pattern写错、或者部署目录没解压成功。500 是应用内部抛异常代码或配置执行到一半崩了容器已经把请求交给应用了。解决404 先看webapps目录下有没有解压出来的同名文件夹没有就看catalina.out里有没有Deploying失败的记录常见是 war 包损坏或web.xml语法错误。确认目录存在但还 404检查访问路径的大小写Linux 下路径区分大小写。500 直接去localhost.log和catalina.out里找Caused by:从最下面那条开始看通常第一条只是包装异常根因在最后。5.4 现象四Tomcat 窗口一闪而过或者 8080 起不来现象Windows 下双击startup.bat黑窗口闪一下就没了Linux 下启动脚本执行完ps里没有 java 进程。原因闪退基本是环境变量问题JAVA_HOME没设或指向错误。8080 起不来则是端口被占用或者 Connector 配置语法错误导致解析失败。解决闪退不要双击开一个 cmd 窗口cd到bin目录手动执行startup.bat错误信息会留在窗口里。看到Neither the JAVA_HOME nor the JRE_HOME environment variable is defined就回去配环境变量。端口问题用netstat -ano | findstr :8080Windows或lsof -i:8080Linux查占用进程杀掉或者改端口。还有一种情况是权限问题Linux 下非 root 用户不能绑 1024 以下端口但 8080 不受此限这条一般不成立别被误导。5.5 现象五交作业时间差 8 小时附件传上去打不开现象学生提交作业后教师端列表里显示的时间比实际早了 8 小时或者文件上传显示成功点下载提示 404 或文件损坏。原因时间问题是数据库时区和 JVM 时区不一致一个 UTC 一个东八区。附件问题通常是上传目录用了相对路径运行时的当前目录不是预期的那个或者文件大小超过 Tomcat 的maxPostSize被截断后仍然返回成功。解决时间问题按第 3.1 节在my.ini里固定default-time-zone08:00同时连接串带serverTimezoneAsia/Shanghai两处对齐。附件问题先把上传路径统一定义成绝对路径再检查server.xml的 Connector 是否配了maxPostSize默认 2MB作业文档轻松超需要写成maxPostSize52428800表示 50MB同时maxSwallowSize-1避免大文件被容器吞掉。改完重启再传一次 20MB 的文档验证。6. 装完怎么验证从登录到批改三条链路依次打通环境都配好之后很多人打开首页看到登录框就认为装完了结果一用就出问题。我的习惯是按业务链路走一遍从下往上验证每条链路都留一个明确的成功标志。第一条链路是数据库到应用。不看页面直接看容器日志项目启动后catalina.out里应该出现连接池初始化的记录没有Communications link failure、没有Access denied。如果用的是 Druid 或 HikariCP日志里会有initialSize相关的行。这条链路过了才说明第 3、4 章的配置真的生效了。第二条链路是账号到权限。用初始管理员账号登录能进后台就说明用户表读到了、密码校验逻辑通了、会话写进去了。然后立刻做一件容易被忽略的事新建一个学生账号用它登录提交一份带中文文件名和中文内容的作业。这一步同时验证了写入权限、字符集、上传目录三件事比单独测每一项效率高得多。第三条链路是完整业务流。教师账号登录发布一条作业设置截止时间学生账号提交教师端看到提交记录打分写评语学生端看到分数和评语。这条走完整个系统才算真的跑通。验证项操作通过标准失败时先查容器存活访问/probe/index.jsp显示 JVM 1.8、中文正常catalina.out启动日志数据库连通重启 Tomcat无连接异常堆栈连接串、账号 host、端口登录初始管理员登录进入后台首页t_user表数据、密码加密方式中文写入学生提交中文作业教师端显示原文无乱码库字符集、JSP 编码、Connector附件上传传一个 20MB 文档可下载且内容完整上传目录权限、maxPostSize时间显示提交后看列表时间与本地时间一致库时区、serverTimezone批改闭环教师打分写评语学生端可见评分表关联字段有一件事我吃过亏验证完不要立刻把probe目录和测试账号删掉。系统跑一段时间后如果出问题这两个东西是最好的对照物——probe能立刻判断是容器挂了还是应用挂了测试账号能判断是权限问题还是数据问题。留着它们成本几乎为零。从那以后我每次装这类 Java MySQL 的批改系统都强制把这三条链路走一遍再交付哪怕对方催得再急。跳过验证省下的二十分钟后面往往要用两个晚上来还。希望这套流程能帮你少走几段弯路。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询