多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Java+JSP+MySQL宿舍管理系统:课程设计项目实战与避坑指南

Java+JSP+MySQL宿舍管理系统:课程设计项目实战与避坑指南 简介这是一套面向Java Web初学者与课程设计需求的完整学生宿舍管理系统源码基于JSP、Servlet与MySQL实现适合作为毕业设计、课程作业或Java Web综合练习的参考方案。系统区分管理员与学生两种角色管理员可对学生信息、卫生登记、综合宿舍信息进行增删查改并处理宿舍维修状况学生则可查看与修改个人信息、提交维修报修、查看卫生评比结果功能闭环较为完整。压缩包共137个文件约3.39MB包含44个java源文件与44个class编译文件、26个jsp页面、3个css样式、1个sql建库脚本及若干gif、js、jar等资源并附E-R图与说明文档便于理解数据库设计与代码结构。该资源已有3001人学习下载经多次测试运行无误读者可据此快速搭建环境、梳理Servlet与JSP的协作流程并在此基础上进行二次开发或功能扩展。1. 从一份能跑通的 JSP 宿舍管理系统说起它到底能解决什么如果你正在做 JavaWeb 课程设计或者需要一套能直接跑起来的 JSP 项目来对照学习这套「JavaJSPMySQL 实现 Web 学生宿舍管理系统」值得先看结构再决定要不要动手。它不是一个空壳 Demo而是把管理员端和学生端两条业务线都铺开了管理员负责学生信息、宿舍信息、卫生登记、维修处理的增删查改学生端则能查看和修改个人信息、提交报修、查看卫生评比结果。换句话说它覆盖了宿舍管理里最高频的几类操作适合拿来当课程设计底稿也适合刚学完 Servlet 和 JSP 想找一个完整项目练手的人。下面我按「先看懂结构、再跑起来、最后避坑」的顺序拆一遍。2. 系统结构与技术栈拆解为什么是 JSP Servlet MySQL2.1 分层逻辑与类文件对应关系这套系统走的是经典 JavaWeb 三层结构没有上 Spring 那套框架所以对新手来说反而更容易看清请求从浏览器到数据库的完整链路。从项目正文给出的类文件能反推出它的组织方式Dormitory.class、Student.class、Health.class、Repairs.class、Admin.class是实体类对应宿舍、学生、卫生、维修、管理员五张核心表UpdateDorServlet、UpdateHelServlet、QueryDorServlet、QueryHelServlet、DeleteHelServlet则是 Servlet 控制器分别处理宿舍更新、卫生更新、宿舍查询、卫生查询、卫生删除这几类动作。这种命名方式很直白基本看到类名就知道它负责哪张表、做哪种操作。实体类里通常就是私有字段加 getter/setterServlet 里则是doGet/doPost拿到参数、调用 JDBC、再转发到 JSP 页面。JSP 页面负责展示Servlet 负责逻辑MySQL 负责存储分工清楚。常见做法是每个实体配一个 DAO 类来封装 SQL如果项目里没有单独 DAO而是把 JDBC 写在 Servlet 里那维护起来会累一些但作为学习项目不影响运行。2.2 数据库表设计与 E-R 关系系统含 E-R 图和 SQL 语句这是它比很多只给代码不给库的项目强的地方。按摘要描述的业务反推核心表至少包括学生表学号、姓名、性别、班级、宿舍号、联系方式、宿舍表宿舍号、楼栋、床位数、已住人数、卫生表宿舍号、检查日期、评分、备注、维修表报修编号、宿舍号、报修内容、状态、提交时间、管理员表账号、密码。E-R 图里学生和宿舍是多对一宿舍和卫生、维修是一对多。建库时字符集建议统一用utf8mb4否则学生姓名里的生僻字或备注里的特殊符号容易变问号。下面是一段建库建表的参考写法字段名按你实际 SQL 文件调整CREATE DATABASE dorm_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE dorm_db; CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, sno VARCHAR(20) NOT NULL UNIQUE COMMENT 学号, name VARCHAR(50) NOT NULL, gender VARCHAR(4), class_name VARCHAR(50), dorm_no VARCHAR(20), phone VARCHAR(20) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE dormitory ( id INT PRIMARY KEY AUTO_INCREMENT, dorm_no VARCHAR(20) NOT NULL UNIQUE, building VARCHAR(20), beds INT DEFAULT 4, occupied INT DEFAULT 0 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;逻辑说明student表用sno做唯一约束防止重复录入学号dormitory表用dorm_no唯一occupied记录已住人数方便判断是否满员。参数上VARCHAR长度按学校实际学号位数调整一般 20 够用beds默认 4 是常见本科宿舍配置改成 6 或 8 都行。注意外键约束如果加上删除宿舍前要先处理关联学生否则会报Cannot delete or update a parent row。2.3 请求流转从浏览器到 Servlet 再到 JSP以「更新卫生信息」为例流程是JSP 页面表单提交到UpdateHelServletServlet 用request.getParameter取字段拼UPDATE语句执行然后response.sendRedirect回列表页。查询走QueryHelServlet删除走DeleteHelServlet。这套流转没有过滤器做编码统一的话中文参数很容易乱码所以下面这一步必须做。// 在 Servlet 的 doPost 开头统一设置编码 request.setCharacterEncoding(UTF-8); response.setContentType(text/html;charsetUTF-8);逻辑说明setCharacterEncoding只对 POST 请求体生效GET 请求的中文参数要在 Tomcat 的server.xml里给 Connector 加URIEncodingUTF-8。参数上这两行要放在取任何参数之前放到后面等于没写。很多人翻车就翻在这里页面显示乱码却以为是数据库问题其实是请求编码没设。3. 本地跑通全流程环境、导入与验证3.1 环境版本与目录放置这套项目依赖 JDK、Tomcat、MySQL 三样。JDK 用 8 或 11 都行Tomcat 建议 8.5 或 9MySQL 用 5.7 或 8.0。注意 MySQL 8.0 的驱动类名是com.mysql.cj.jdbc.Driver5.7 是com.mysql.jdbc.Driver用错会报ClassNotFoundException。项目目录按标准 Web 结构放src下是 Java 源码WebContent或webapp下是 JSP 和WEB-INFWEB-INF/lib放mysql-connector-java的 jar 包。导入步骤先在 IDE 里新建 Dynamic Web Project把源码拷进srcJSP 拷进webappjar 放进lib并 Add to Build Path然后在 MySQL 里执行项目自带的 SQL 文件建库建表最后改数据库连接配置部署到 Tomcat 启动。3.2 数据库连接配置与修改点连接配置一般写在某个工具类或db.properties里。如果是硬编码在 Java 里找到类似下面的片段改掉public static Connection getConnection() throws Exception { Class.forName(com.mysql.cj.jdbc.Driver); String url jdbc:mysql://localhost:3306/dorm_db?useSSLfalseserverTimezoneAsia/ShanghaicharacterEncodingutf8; return DriverManager.getConnection(url, root, 你的密码); }逻辑说明useSSLfalse去掉启动时的 SSL 警告serverTimezoneAsia/Shanghai解决 MySQL 8.0 时区报错characterEncodingutf8保证连接层编码。参数上3306是你本机 MySQL 端口dorm_db换成你实际建的库名密码填自己的。如果启动报Public Key Retrieval is not allowed在 url 后面再加allowPublicKeyRetrievaltrue。3.3 启动验证与功能自测顺序启动 Tomcat 后先访问登录页用管理员账号进后台按「学生管理 → 宿舍管理 → 卫生登记 → 维修处理」的顺序点一遍。每步都做一次增、查、改、删确认数据库里数据同步变化。学生端则用学生账号登录测试查看个人信息、修改联系方式、提交一条报修、查看卫生评比。验证时重点看三处列表页数据是否完整、提交后是否跳转正常、删除后刷新是否真的没了。如果某一步白屏先看 Tomcat 控制台有没有NullPointerException多半是参数名和 Servlet 里取的不一致。4. 避坑与常见问题排查这几处最容易翻车4.1 中文乱码现象、原因、解决现象是表单提交后数据库里存的是问号或乱码。原因通常是请求编码没设、数据库字符集不是 utf8mb4、或 JSP 页面pageEncoding没写。解决分三步Servlet 里加request.setCharacterEncoding(UTF-8)JSP 顶部加% page contentTypetext/html;charsetUTF-8 pageEncodingUTF-8 %建库时用utf8mb4。三处都对了才不会乱。4.2 驱动报错现象、原因、解决现象是启动就抛ClassNotFoundException: com.mysql.jdbc.Driver。原因是 MySQL 8.0 换了驱动类名或者 jar 包没放进WEB-INF/lib。解决是把驱动类改成com.mysql.cj.jdbc.Driver并确认mysql-connector-java的 jar 在 lib 目录且被项目引用。用 Maven 的话在pom.xml里加对应依赖即可。4.3 时区与 SSL 警告现象、原因、解决现象是连接时提示The server time zone value is unrecognized或一堆 SSL 警告。原因是 MySQL 8.0 默认时区和 SSL 配置与旧驱动不匹配。解决是在 JDBC url 里加serverTimezoneAsia/ShanghaiuseSSLfalse需要时再加allowPublicKeyRetrievaltrue。这几项加上基本就安静了。4.4 删除关联数据失败现象、原因、解决现象是删除宿舍或学生时报外键约束错误。原因是表之间建了外键被引用的一方不能直接删。解决有两种一是先删关联的从表记录再删主表二是不建物理外键靠业务代码保证一致性。学习项目里我一般建议先不建外键逻辑清晰后再按需加。4.5 部署后 404现象、原因、解决现象是访问页面提示 404。原因是访问路径和web.xml或注解里的url-pattern对不上或者项目没真正部署到 Tomcat 的webapps。解决是核对 Servlet 映射路径确认 Tomcat 启动日志里项目已加载访问时带上正确的上下文路径比如http://localhost:8080/项目名/login.jsp。5. 进阶用法把 E-R 图用起来做一次真正的数据校验拿到这套系统后别只停在「能跑」。E-R 图和 SQL 语句最大的价值是让你能反过来验证业务逻辑是否自洽。我一般会做一件事按 E-R 关系写几条校验 SQL跑一遍看数据有没有对不上的地方。比如检查已住人数和实际学生数是否一致SELECT d.dorm_no, d.occupied, COUNT(s.id) AS real_count FROM dormitory d LEFT JOIN student s ON s.dorm_no d.dorm_no GROUP BY d.dorm_no, d.occupied HAVING d.occupied COUNT(s.id);逻辑说明这条查询把宿舍表的occupied字段和实际关联的学生数做对比HAVING只留下不一致的记录。参数上dorm_no是两表关联键如果你的学生表用dorm_id关联把ON条件换掉即可。跑出来有结果说明要么入住登记没同步要么删除学生时没减人数这正是业务代码要补的地方。再进一步可以给维修表加一个状态流转校验确认「已处理」的报修都有处理时间SELECT * FROM repairs WHERE status 已处理 AND handle_time IS NULL;这条能帮你发现状态改了但时间没写的脏数据。把这两条校验跑通你对这套系统的理解就不只是「能跑」而是知道它在哪些边界上会出问题。从那以后我每次拿到带 E-R 图的项目都会先写几条这样的校验 SQL 跑一遍比直接点页面靠谱得多。希望帮到你。本文还有配套的精品资源点击获取
返回列表