news 2026/10/23 8:00:10

JDK8+Tomcat8.5+MySQL5.7搭建JSP宿舍管理系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JDK8+Tomcat8.5+MySQL5.7搭建JSP宿舍管理系统

简介:这是一套基于 Eclipse、JDK8、JSP、MySQL 并在 Tomcat 下运行的宿舍寝室管理系统完整源码,面向 Java Web 课程设计、毕业设计以及入门练手的学习者;将其导入 IDE 后即可运行调试。管理员端支持学生信息管理(学号、姓名、性别、年龄、政治面貌、班级、登录账号与密码)、宿舍信息维护(房间号、住宿人数、班级、楼号)及公告管理,可设置静校与熄灯时间;学生端提供各宿舍卫生排名查询。压缩包共 248 个文件、约 6.99MB,以 24 个 JSP 页面、24 个 Java 源文件及编译后的 class、79 个 JS 脚本、19 个 CSS 样式和若干图片资源为主,并附 SQL 建库脚本与 jar 依赖,Servlet 与 DAO 分层清晰,便于按模块阅读和二次开发。已有 1341 人学习下载,适合借此理清 JSP 渲染、数据库增删改查与分层设计的完整链路,也可作为课设改造的基础工程。

1. 环境先对齐:JDK8 + Tomcat 8.5 + MySQL 5.7,这套宿舍寝室管理系统为什么不能随手升版本

拿到一份 JSP 写的宿舍寝室管理系统,很多人的第一反应是去官网拉最新版:Tomcat 10、MySQL 8.4、JDK 17 一把梭。装完启动,控制台先甩一堆 jakarta.servlet 找不到,再甩 MySQL 认证插件不匹配,最后 JSP 页面白屏,人就开始怀疑源码是坏的。这套 JDK 8 + Tomcat 8.5 + MySQL 5.7 的组合不是保守,是被 Servlet 命名空间和 JDBC 驱动版本掐住的:Tomcat 10 之后包名从 javax 换成 jakarta,老 JSP 里import javax.servlet.*全部失效,改回来的工作量比重新装一遍环境还大。所以下面按「环境对齐、分件安装、工程导入、建库连库、排错、验证」的顺序走一遍,适合刚拿到源码、想在自己机器上把宿舍寝室管理系统完整跑起来的人。

2. JDK8 与 Tomcat 8.5 的安装:从解压到 startup 正常启动

这一章解决两个东西:JDK 装哪儿、Tomcat 怎么配。它们俩的关系是 Tomcat 启动时要去JAVA_HOME找 JVM,找不到就闪退,找错了就加载到别的版本上,后面编译 JSP 时一堆Unsupported class file major version就是这么来的。我一般把运行环境统一放到一个短路径下,比如C:\env\,绝不放桌面、不放「我的文档」、不放带中文或空格的目录,因为 Tomcat 的启动脚本、JSP 编译临时目录对空格和中文的处理在老版本上并不友好,出了问题日志还很难看出来。

2.1 JDK8 的安装路径与 JAVA_HOME 配置

JDK8 现在官方主推的是 8u202 之后的更新版,商用授权规则有变化,本地学习跑项目用 8u202 或者 OpenJDK 的 8 系列都行,装完只要java -version输出1.8.0_xxx就够。安装包双击一路下一步也行,但我更推荐用解压版,好处是路径可控、卸载干净、多版本共存时随时切。

解压到统一目录后,先配两个环境变量。用管理员权限打开 CMD,逐条执行:

# 设置 JAVA_HOME,注意路径结尾不要带反斜杠 setx JAVA_HOME "C:\env\jdk1.8.0_202" /M # 把 JDK 的 bin 追加到系统 PATH setx PATH "%PATH%;%JAVA_HOME%\bin" /M

setx是永久写环境变量的命令,/M表示写到系统级而不是当前用户级,不加的话换个终端窗口就失效。这里有个必须提醒的点:setx对 PATH 有 1024 字符截断风险,如果你的 PATH 已经很长,先把原值复制到记事本备份一份,再执行,不然截断之后一堆命令全找不到,只能进注册表救。另外%JAVA_HOME%\bin最好放在 PATH 靠前的位置,因为有些机器上装过 Oracle 客户端,会自动塞一个C:\ProgramData\Oracle\Java\javapath进去,那个目录优先级更高,结果你配了 JAVA_HOME,java -version显示的还是另一个版本,这种玄学问题排查起来特别费时间。

配完关掉所有 CMD 窗口重新开一个,验证:

java -version javac -version echo %JAVA_HOME%

三条输出里的版本号必须一致。如果java -version是 1.8 但javac -version是 17,说明 PATH 里有多个 JDK 在抢,回到 PATH 里把多余的删掉。javac尤其重要,Eclipse 编译 JSP 生成 Servlet 时用的就是它,只装 JRE 不装 JDK 会报Unable to find a javac compiler。

2.2 Tomcat 8.5 解压版部署:端口、编码、内存三个参数

Tomcat 选 8.5.x 系列任意一个小版本都行,别用 9 以上的大版本去做老 JSP 项目,虽然 9 还保留 javax 命名空间,但部分老标签库和web.xml的 schema 版本对不上,会出现启动正常、页面一访问就 500 的情况。解压到C:\env\apache-tomcat-8.5.xx,目录结构和 JDK 平级,方便统一管理。

第一个要改的是conf/server.xml里的 Connector 节点:

<!-- conf/server.xml,找到 8080 那个 Connector 整段替换 --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" maxThreads="200" redirectPort="8443" />

port是访问端口,如果本机已经跑着别的 Web 服务,改成 8081、9090 都行,改完记得同步改后面访问地址。URIEncoding="UTF-8"决定 GET 请求参数的解码方式,宿舍管理系统里「按楼栋名称查询」这种带中文的 GET 请求,如果这里不是 UTF-8,后端request.getParameter()拿到的就是乱码,而且 POST 请求不受这个参数影响,很容易误判成页面编码问题。maxThreads默认 200,本地开发不用动,写出来是让你知道这个位置在哪,将来并发压测要调的时候别满文件找。

第二个要改的是 JVM 内存参数,正确做法是在bin目录下新建setenv.bat,Tomcat 启动时会自动读它:

# bin/setenv.bat,Windows 下用 set 语法,等号两边不要加空格 set "JAVA_OPTS=-Xms256m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -Dfile.encoding=UTF-8"

-Xms是初始堆,-Xmx是最大堆,本地跑一个宿舍管理系统,512m 完全够。MetaspaceSize是 JDK8 才有的参数,JDK8 已经彻底移除了永久代,如果你从网上抄来的配置里还写着-XX:PermSize=128m,Tomcat 会直接启动失败,报Unrecognized VM option 'PermSize',然后窗口一闪而过,什么都看不到——这是 JDK7 时代的老配置流传最广的一个坑。-Dfile.encoding=UTF-8保证日志和 JSP 编译时的默认编码是 UTF-8,省掉后面一半的乱码排查。

第三个是确认 Tomcat 用对了 JDK。在bin目录下开 CMD 执行:

catalina.bat version

输出里会有一行JVM Version,必须是 1.8.0_xxx。如果显示的不是你刚配的那个版本,检查是不是 Tomcat 的setclasspath.bat里硬编码了JRE_HOME,或者系统里残留了JRE_HOME环境变量抢在JAVA_HOME前面生效。

2.3 首次启动与基础验证

双击bin/startup.bat,会弹出一个黑色窗口,正常启动的最后几行是Server startup in xxx ms。这个窗口不能关,关了服务就停了。浏览器访问http://localhost:8080,能看到 Tomcat 的欢迎页,说明 JDK、端口、目录权限这一层全通了。

如果窗口一闪就没了,别急着重新双击,用 CMD 进到bin目录执行startup.bat,错误信息会留在当前窗口里,这是看启动失败原因最直接的方式。另一种方式是看logs/catalina.YYYY-MM-DD.log,Tomcat 的启动异常基本都落在里面,相当于一个黑匣子,闪退之后第一件事就是翻它。常见的是Address already in use: JVM_Bind,说明 8080 被占了,用netstat -ano | findstr :8080找到 PID,再taskkill /PID xxx /F干掉,或者直接改端口更省事。

3. Eclipse 工程导入:让 JSP 项目在 IDE 里能编译、能部署

环境装好只是地基,真正让新手卡住的是 Eclipse 里那个红叉——明明 Tomcat 单独跑得好好的,一导入工程就满屏报错。原因是 JSP 工程依赖三样东西:JDK、Servlet API(由 Tomcat 提供)、项目自己的 jar 包,Eclipse 需要你把这三样显式告诉它,它不会自动猜。这一章把工程导入、运行时绑定、编译级别、编码四件事一次配齐。

3.1 Eclipse 版本选择与 Tomcat 运行时绑定

Eclipse 版本别追新。2022-06 之后的版本要求用 JDK 11 以上启动 IDE 本身,你机器上只装了 JDK8 的话,双击直接报「必须使用 1.11 或更高版本」,然后开始怀疑人生。稳妥的选择是 Eclipse IDE for Enterprise Java Developers 2020-06 或 2021-03,这两个版本用 JDK8 就能启动,同时内置的 Web 工具链足够完整。下载页面上一定要选名字里带 Enterprise 的那个包,普通 Java 版没有 Server 视图,也没有 Dynamic Web Project。

装好之后先绑定 Tomcat:

Window > Preferences > Server > Runtime Environments > Add > Apache > Apache Tomcat v8.5 > Tomcat installation directory: C:\env\apache-tomcat-8.5.xx > JRE: 选择 jdk1.8.0_202(不要选 jre 目录)

这里JRE那一栏默认会让你选 JRE,一定要点「Installed JREs」手动指到 JDK 根目录。选成<tomcat>/jre或者系统里的独立 JRE,编译 JSP 时就没有 javac,报错信息还挺隐蔽。绑定完成之后,Servers视图里会出现一个 Tomcat 8.5 的服务器实例,双击它能打开配置页,Server Locations建议选「Use Tomcat installation」,让 Eclipse 直接往你的 Tomcat 目录里部署,这样 IDE 里跑出来的效果和单独启动 Tomcat 完全一致;如果选默认的「Use workspace metadata」,工程会被扔到.metadata里一个很深的临时目录,手动去webapps找 war 包会找不到。

3.2 导入工程与 Project Facets 校准

拿到源码先看目录结构。有.project和.classpath的,直接File > Import > General > Existing Projects into Workspace选根目录导入;没有这两个文件的,用File > New > Dynamic Web Project建一个同名工程,再把src、WebContent(或web、WebRoot)的内容拷进去,注意别把.settings一起拷。

导入之后第一步不是急着运行,是校准 Project Facets,这是整个 Eclipse 里最容易出错的地方:

右键工程 > Properties > Project Facets Dynamic Web Module 勾选,版本 3.1 Java 勾选,版本 1.8 > Java Build Path > Libraries 确认 JRE System Library 是 jdk1.8.0_xxx Add Library > Server Runtime > Apache Tomcat v8.5 > Targeted Runtimes 勾选 Apache Tomcat v8.5 > Java Compiler Compiler compliance level 设为 1.8

Dynamic Web Module 的版本必须和 Tomcat 对上:3.0 对应 Servlet 3.0(Tomcat 7),3.1 对应 Servlet 3.1(Tomcat 8/8.5),4.0 对应 Servlet 4.0(Tomcat 9)。这个版本号会直接写进web.xml的根节点,版本写高了 Tomcat 启动时报The required Server component failed to start,写低了有些注解式 Servlet 又扫不到。Java 版本和 Compiler compliance level 两处必须都是 1.8,只改一处的话,Eclipse 会用 1.8 语法检查但按别的版本编译,lambda或者try-with-resources就会出现莫名其妙的红波浪线。

Targeted Runtimes这一项经常被漏掉。它决定 Eclipse 部署时把哪个 Tomcat 的 jar 加进 classpath,不勾的话,JSP 里所有javax.servlet.*下面的类在编辑器里全是红的,但项目其实能跑——这种「红着能跑」的状态最误导人,会让人误删代码。

3.3 JSP 编码、编译级别与部署目录确认

编码要一次配三处,缺一处就会有中文乱码:

Window > Preferences > General > Workspace > Text file encoding = UTF-8 Window > Preferences > Web > JSP Files > Encoding = ISO 10646/Unicode(UTF-8) Window > Preferences > General > Content Types > Text > JSP > Default encoding = UTF-8

第一处管 Java 源文件读写,第二处管 JSP 文件本身,第三处管新建 JSP 时的默认编码。三处统一之后,工程里每个 JSP 文件头部的<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>才有意义。很多老项目里pageEncoding写的是GBK,文件本身是 GBK 存的,你在 Eclipse 里改成 UTF-8 之后,原有中文注释全变问号,页面输出也跟着乱——这种情况不要全局改,先把文件用文本编辑器转码保存成 UTF-8,再统一声明,顺序反了就是白干。

部署验证走一遍Servers视图:右键 Tomcat 实例 >Add and Remove,把工程加进去,启动服务器。启动日志里会打出工程的 Context Path,通常是工程名。浏览器访问http://localhost:8080/工程名/首页.jsp。如果访问根路径http://localhost:8080/工程名/报 404,但带文件名能打开,说明web.xml里没配<welcome-file-list>,老项目常见,补上index.jsp就行:

<!-- WebContent/WEB-INF/web.xml --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>login.jsp</welcome-file> </welcome-file-list>

welcome-file是按顺序找的,第一个不存在才找第二个,所以把登录页放前面更符合这个系统的实际入口。补完记得在Servers视图里右键 Tomcat >Clean,让 Eclipse 重新发布,不然改的web.xml还在旧副本里。

4. MySQL 5.7 建库与 JDBC 连接:字符集、认证插件、驱动三件事

宿舍寝室管理系统的数据模型通常不复杂,无非是楼栋、寝室、床位、学生、入住记录这几张表,真正费时间的是连不上、乱码、字段超长这三类问题。它们全都来自三个地方:数据库的字符集、root 的认证插件、JDBC 驱动 jar 的位置。逐个说。

4.1 MySQL 5.7 安装与 root 认证方式调整

装 MySQL 5.7 的时候,安装器会问端口、root 密码、服务名,端口保持 3306,密码记牢,服务名默认MySQL57就行,装完在服务列表里能看到自动启动。这一步没什么坑,坑在装完之后:MySQL 8.0 开始默认认证插件是caching_sha2_password,而大量 JSP 老工程配的是mysql-connector-java-5.1.4x驱动,这个驱动根本不认识新插件,连上去会直接抛Unable to load authentication plugin 'caching_sha2_password'。反过来,你在 5.7 上跑,认证插件是mysql_native_password,但如果驱动 jar 用的是 8.0 版本,类名从com.mysql.jdbc.Driver变成了com.mysql.cj.jdbc.Driver,Class.forName就会找不到类。版本对齐比什么都重要。

确认并统一认证插件,用 root 登录 MySQL 命令行执行:

-- 查看当前 root 的认证插件 SELECT user, host, plugin FROM mysql.user WHERE user = 'root'; -- 如果是 caching_sha2_password,改成 native 方式 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES;

mysql_native_password是 5.7 时代的默认值,5.1.x 驱动只认它。FLUSH PRIVILEGES刷新权限表,让改动立刻生效,不加的话有时候要重启服务才认。如果你不想动 root,也可以给项目单独建个账号,权限只给到dorm这一个库,这在实际部署里是更规范的做法:

CREATE USER 'dorm_app'@'localhost' IDENTIFIED WITH mysql_native_password BY 'App@123456'; GRANT SELECT, INSERT, UPDATE, DELETE ON dorm_db.* TO 'dorm_app'@'localhost'; FLUSH PRIVILEGES;

只给增删改查,不给 DDL 权限,防止程序里某段建表语句把线上表结构改坏。

4.2 建库、导入 SQL 脚本与字符集选择

建库这一步的字符集必须一次定死,中途改代价很大:

CREATE DATABASE dorm_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE dorm_db;

utf8mb4而不是utf8,因为 MySQL 里的utf8其实是utf8mb3,最多 3 字节,存不下 emoji 和部分生僻字。宿舍管理系统里学生姓名如果出现生僻字,用utf8会插入失败或者变成问号。utf8mb4_general_ci里的ci是不区分大小写,登录账号查询、楼栋名匹配都用得上,除非你的业务明确要求区分大小写,否则别选_bin。

导入工程自带的.sql脚本,用命令行而不是图形工具,方便看报错:

# 先建空库,再导入,导入时显式指定字符集 mysql -uroot -p --default-character-set=utf8mb4 dorm_db < C:\env\sql\dorm.sql

--default-character-set=utf8mb4是关键。如果你的 sql 脚本是 UTF-8 编码,但客户端连接默认字符集是 GBK,导进去的中文会全部变成乱码,而且导完不报错,等到页面上显示出来才发现,那时候数据已经脏了,只能删库重导。导入完成后一定抽查一张表:

SELECT table_name, table_collation FROM information_schema.tables WHERE table_schema = 'dorm_db';

所有表的 collation 都应该是utf8mb4_general_ci。如果脚本里写了ENGINE=InnoDB DEFAULT CHARSET=utf8,表会被建成 utf8mb3,和库级字符集不一致,后面 join 或者存生僻字都会出问题,稳妥的做法是把脚本里的CHARSET=utf8批量替换成CHARSET=utf8mb4再导。

4.3 JDBC 驱动放置与连接串参数

驱动 jar 放哪儿,是 JSP 项目翻车率最高的一步。放的位置有两个选择:工程的WebContent/WEB-INF/lib目录,或者 Eclipse 的Java Build Path。正确答案是必须放WEB-INF/lib,Build Path只是让编译器不报错,部署的时候 Eclipse 不会把 Build Path 里的第三方 jar 复制到 Tomcat 的WEB-INF/lib下,运行期自然找不到类,报java.lang.ClassNotFoundException: com.mysql.jdbc.Driver。我踩过这个坑不止一次,编辑器里一路绿灯,一访问页面就 500。

操作上,把mysql-connector-java-5.1.4x.jar直接复制到WebContent/WEB-INF/lib,然后右键工程 >Refresh,Eclipse 会自动把它加到 Web App Libraries 里,不需要手动 Add to Build Path。接着写连接工具类:

// src/com/dorm/util/DBUtil.java public class DBUtil { // 5.1.x 驱动的类名,8.0 驱动是 com.mysql.cj.jdbc.Driver private static final String DRIVER = "com.mysql.jdbc.Driver"; // useUnicode + characterEncoding 管中文,useSSL 关掉省掉证书警告 private static final String URL = "jdbc:mysql://127.0.0.1:3306/dorm_db" + "?useUnicode=true&characterEncoding=utf8&useSSL=false" + "&allowPublicKeyRetrieval=true"; private static final String USER = "dorm_app"; private static final String PWD = "App@123456"; public static Connection getConn() throws Exception { Class.forName(DRIVER); // 加载驱动,只需一次,放在这里够用 return DriverManager.getConnection(URL, USER, PWD); } }

useUnicode=true&characterEncoding=utf8告诉驱动用 UTF-8 和数据库通信,和库的utf8mb4是兼容的,不用改成utf8mb4,因为 5.1 驱动不认这个值。useSSL=false关掉 SSL 握手,本地开发没证书,不关会打一堆警告日志。allowPublicKeyRetrieval=true是给 8.0 驱动准备的,5.1 驱动会忽略它,留着不碍事,将来换驱动不用再改连接串。如果你非要用 8.0 驱动,类名和连接串都要换:com.mysql.cj.jdbc.Driver,再加上&serverTimezone=Asia/Shanghai,否则时间字段取出来会差 8 小时,入住登记时间全部对不上。

5. 常见问题排查:JSP 能启动但跑不通的几类坑

这一章记的是实际装这套东西时反复出现的故障,每一条都按「现象、原因、解决」写清楚,遇到时对号入座就行。

5.1 启动与页面访问类故障

现象一:Tomcat 窗口一闪而过,手工执行 startup.bat 报Unrecognized VM option 'PermSize'。

原因:setenv.bat或者catalina.bat里残留了 JDK7 时代的内存参数。JDK8 移除了永久代,PermSize、MaxPermSize全部作废,JVM 启动时直接拒绝。

解决:把-XX:PermSize和-XX:MaxPermSize删掉,换成-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m。改完先用catalina.bat version验证 JVM 能起来,再startup.bat。

现象二:访问项目路径报 404,但http://localhost:8080的 Tomcat 欢迎页正常。

原因:工程没有真正部署到 Tomcat,或者 Context Path 和你以为的不一样。Eclipse 默认用工程名作为上下文路径,如果Servers视图里没执行Add and Remove,工程根本没发布。

解决:打开Servers视图,双击 Tomcat,看Modules标签页里有没有你的工程、Path 是不是/工程名。没有就Add and Remove加进去。也可以反过来在工程上右键Run As > Run on Server,Eclipse 会自动完成注册。

现象三:JSP 页面里javax.servlet.http.HttpServletRequest报红,或者运行时报NoClassDefFoundError: javax/servlet/http/HttpServlet。

原因:两种情况。一是Targeted Runtimes没勾,Eclipse 没把 Tomcat 的 jar 加进编辑期 classpath;二是你误用了 Tomcat 10,它的包名是jakarta.servlet.*,javax下的类一个都没有。

解决:前者进Properties > Targeted Runtimes勾上 Tomcat 8.5;后者最省事的就是把 Tomcat 换成 8.5 或 9,别在老 JSP 工程上折腾 jakarta 迁移,改一遍 import 还要重配web.xml的 schema,性价比极低。

5.2 数据库与中文编码类故障

现象四:访问登录页直接 500,堆栈里是java.lang.ClassNotFoundException: com.mysql.jdbc.Driver。

原因:驱动 jar 只加到了Java Build Path,没放WEB-INF/lib,编译期能找到、运行期找不到。

解决:把 jar 复制进WebContent/WEB-INF/lib,Refresh工程,Servers视图里Clean一次重新发布。判断标准很简单:去 Tomcat 的webapps/工程名/WEB-INF/lib目录下看一眼,jar 在不在,不在就是没配对。

现象五:登录不进去,日志里Access denied for user 'dorm_app'@'localhost',但密码明明是对的。

原因:账号的 host 不匹配,或者认证插件不对。'dorm_app'@'localhost'和'dorm_app'@'%'是两个不同账号,从 127.0.0.1 连过来时 MySQL 的匹配规则有时候会让你以为用的是同一个。认证插件不对的话,报错信息会是Unable to load authentication plugin,不是 access denied,注意区分。

解决:先SELECT user, host, plugin FROM mysql.user;把账号全列出来,确认 host 和 plugin。缺'dorm_app'@'127.0.0.1'就补一个,插件是caching_sha2_password就ALTER USER ... IDENTIFIED WITH mysql_native_password BY ...。

现象六:页面能打开,但插入的寝室名、学生姓名在数据库里全是问号。

原因:链路上有任意一环不是 UTF-8。可能的点包括 JSP 的pageEncoding、request.setCharacterEncoding("UTF-8")没调、连接串缺characterEncoding、库表是 utf8mb3、MySQL 服务端character_set_server是 latin1。五处任何一处不一致都会乱,而且表现为「有的页面乱有的不乱」,特别迷惑。

解决:别一处一处猜,直接查服务端变量定位:

SHOW VARIABLES LIKE 'character_set%';

character_set_server、character_set_database、character_set_connection三个都应该是utf8mb4。不是的话,在my.ini的[mysqld]段加上character-set-server=utf8mb4和collation-server=utf8mb4_general_ci,重启服务。程序侧再补一个过滤器统一设编码,比在每个 Servlet 里写一行setCharacterEncoding靠谱:

// src/com/dorm/filter/EncodingFilter.java public class EncodingFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { req.setCharacterEncoding("UTF-8"); // 只管 POST 体,GET 靠 Tomcat 的 URIEncoding resp.setCharacterEncoding("UTF-8"); chain.doFilter(req, resp); } }

过滤器要在web.xml里注册,并且<filter-mapping>放最前面,保证它在所有 Servlet 之前执行。GET 请求的中文在 Tomcat 8 之后默认就是 UTF-8,但如果server.xml里显式写了别的URIEncoding,会被覆盖,回头查一遍第 2 章那段配置。

6. 装完怎么验证:从登录到宿舍分配走一遍完整链路

环境装完、工程跑起来,不代表这套宿舍寝室管理系统就通了。我习惯做一次端到端验证,把「读」和「写」都覆盖到,因为只打开登录页看不出连接池、事务、字符集这些问题。验证按下面这张表逐项过,每项都有明确的通过标准:

验证项操作路径通过标准
JSP 编译访问登录页页面正常渲染,Tomcat 日志无 JasperException
数据库连接输入正确账号密码登录跳转首页,不出现 500
查询功能寝室列表按楼栋筛选列表有数据,中文楼栋名不乱码
写入功能新增一条寝室记录数据库里能查到,字段值完整
中文往返新增带中文的寝室名再查出来页面显示与输入一致
时间字段查看入住登记时间与系统时间一致,不差 8 小时

第六项最容易被忽略。如果用的是 8.0 驱动又没配serverTimezone,时间会整体偏 8 小时,本地测试看不太出来,一上线就出问题。验证时直接往数据库插一条记录,对比SELECT NOW()和页面显示的时间,差 8 小时就回去补连接串参数。

写入验证之后一定要回数据库确认,别只看页面提示「保存成功」:

-- 验证写入,同时确认中文没有变成问号 SELECT id, room_no, building, capacity, create_time FROM dorm_room ORDER BY id DESC LIMIT 5;

room_no和building如果是???或者空串,说明写入链路上还有编码问题,回第 5 章第 6 条排查。如果create_time是0000-00-00,检查表字段有没有设默认值,以及 Java 侧传的是java.util.Date还是LocalDateTime——5.1 驱动对LocalDateTime支持不好,会静默失败,这种不报错的问题最难查。

最后一步是把工程打成 war 包,脱离 Eclipse 单独部署一次:

# 在工程根目录执行,产物丢到 Tomcat 的 webapps 下 jar -cvf dorm.war -C WebContent .

然后用startup.bat启动 Tomcat,访问http://localhost:8080/dorm/,能正常登录就说明这个工程不依赖 Eclipse 的元数据,可以交付了。这一步是很多人的盲区:IDE 里跑得好好的,war 包一部署就 500,八成是WEB-INF/lib漏了 jar,或者classes目录没打进去。有一条血泪经验——从那以后我每次拿到一份 JSP 源码,都先把 JDK 小版本、Tomcat 大版本、驱动版本这三行写在便签上贴屏幕边上,装一步核一步,再也不敢「先跑起来再说」。版本这种看起来最枯燥的东西,往往就是那个让你折腾一整晚的坑。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 7:58:18

AI 外呼防封线路技术方案全拆解

一套 30 坐席的外呼团队月外呼约 13 万通&#xff0c;纯外呼模式下号码存活率通常不足 7 天&#xff0c;采用 AXB回拨组合方案后单号存活周期可延长到 30 天以上&#xff0c;月防封综合成本约 1.4-3.4 万元&#xff0c;折合每通 0.1-0.26 元。工信部 2018 年发布的《综合整治骚…

作者头像 李华
网站建设 2026/10/23 7:57:45

安捷伦 X 系列 信号分析仪 面板介绍

适用型号PXA 信号分析仪 N9030A MXA 信号分析仪 N9020A EXA 信号分析仪 N9010A CXA 信号分析仪 N9000A面板介绍前面板PXA、 MXA 和 EXACXA前面板介绍后面板目前的 PXA、 MXA 和 EXA老款 MXA 和 EXACXA &#xff08;序列号在 MY/US/SG49370546 之前且不带选件 PC3&#xff09;CX…

作者头像 李华
网站建设 2026/10/23 7:56:19

基于 YOLOv8 的钢材表面缺陷检测系统

本项目是一套基于 YOLOv8 的钢材表面缺陷检测系统&#xff0c;以 NEU-DET 钢材表面缺陷数据集为数据基础&#xff0c;面向龟裂、夹杂、斑块、点蚀表面、压入氧化皮和划痕六类缺陷完成模型训练、评估与系统应用。系统提供 Web 端和 PyQt6 桌面端&#xff0c;支持图片、视频和摄像…

作者头像 李华
网站建设 2026/10/23 7:52:40

小白程序员必看:拆解AI Agent工程师JD,揭秘大模型“全栈”能力地图

本文通过分析一份真实的AI Agent岗位JD和一个Agent项目方案&#xff0c;将“看起来很散”的技术名词拆解成一套能真正落到项目里的能力地图。文章重点介绍了AI Agent岗位的核心技术栈&#xff0c;包括Python/TypeScript后端开发、LLM应用开发、RAG、Agent、Memory、数据与存储、…

作者头像 李华
网站建设 2026/10/23 7:51:35

状态更新与 reducer:用 Annotated 做累加

个人主页&#xff1a;> for_ever_love__ <&#xff08;欢迎各位大佬莅临&#x1f60a;&#xff09; 其他栏目: > 大模型开发从0到1 < 其他栏目: > iOS项目总结大全 < 其他栏目: > 我想学python了 < 其他栏目: > iOS UI < 文章目录状态更新与 red…

作者头像 李华