1. 项目概述与背景
宿舍管理系统是高校信息化建设中的重要组成部分,传统手工管理方式存在效率低下、数据易丢失、统计困难等问题。基于JavaWeb技术栈开发的宿舍管理系统能够有效解决这些痛点,实现宿舍资源的数字化管理。
本项目采用经典的JSP+Servlet架构,结合MySQL数据库,实现了包含系统管理员、楼宇管理员和学生三种角色的完整宿舍管理解决方案。系统后端使用Servlet处理业务逻辑,Struts框架进行请求分发,前端采用JSP渲染页面,JavaScript增强交互体验。
2. 技术选型与架构设计
2.1 技术栈解析
后端技术栈:
- Servlet 3.0+:作为核心控制器处理HTTP请求
- Struts 2:MVC框架,实现请求路由和拦截器
- JDBC:数据库连接和操作
- MySQL 5.7:关系型数据库存储系统数据
前端技术栈:
- JSP:动态页面渲染
- JavaScript:客户端交互逻辑
- CSS:页面样式设计
2.2 系统架构设计
系统采用典型的三层架构:
- 表示层:JSP页面负责UI展示
- 业务逻辑层:Servlet处理业务规则
- 数据访问层:DAO模式封装数据库操作
code复制客户端浏览器 → JSP页面 → Servlet控制器 → DAO → MySQL数据库
这种分层设计使得系统各模块职责清晰,便于维护和扩展。
3. 数据库设计与实现
3.1 数据库表结构
系统主要包含以下核心表:
-
学生表(student)
- Student_ID (主键)
- Student_Username (学号)
- Student_Password
- Student_Name
- Student_Sex
- Student_Class
- Student_State (入住状态)
-
楼宇表(building)
- Building_ID (主键)
- Building_Name
- Building_Introduction
-
宿舍表(domitory)
- Domitory_ID (主键)
- Domitory_BuildingID (外键)
- Domitory_Name
- Domitory_Type
- Domitory_Number (床位数量)
- Domitory_Tel
-
入住记录表(checkin)
-
迁出记录表(checkout)
-
缺勤记录表(absence)
3.2 数据库连接实现
数据库连接通过DBHelper类实现单例模式管理:
java复制public class DBHelper {
private static final String driver = "com.mysql.jdbc.Driver";
private static final String url = "jdbc:mysql://localhost:3306/dormitory_db";
private static final String username = "root";
private static final String password = "123456";
private static Connection conn = null;
// 获取数据库连接
public static Connection getConnection() {
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
// 关闭连接
public static void closeAll(Connection conn, Statement stmt, ResultSet rs) {
// 关闭逻辑...
}
}
4. 核心功能模块实现
4.1 用户登录模块
登录流程采用Session管理用户状态:
java复制public class LoginAction extends ActionSupport {
private String username;
private String password;
private String userType; // 1-管理员 2-楼宇管理员 3-学生
public String execute() {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
// 验证逻辑
if(userType.equals("1")) {
Admin admin = AdminDAO.validate(username, password);
if(admin != null) {
session.setAttribute("admin", admin);
return "admin";
}
}
// 其他用户类型验证...
return "login";
}
}
4.2 宿舍管理模块
宿舍管理包含增删改查功能,核心代码如下:
java复制public class DomitoryAction extends ActionSupport {
private List<Domitory> domitoryList;
// 获取宿舍列表
public String list() {
domitoryList = DomitoryDAO.getAllDomitories();
return SUCCESS;
}
// 添加宿舍
public String add() {
Domitory domitory = new Domitory();
// 设置属性...
DomitoryDAO.addDomitory(domitory);
return SUCCESS;
}
}
4.3 学生入住管理
学生入住涉及状态变更和记录创建:
java复制public class CheckInAction extends ActionSupport {
public String execute() {
// 1. 验证学生是否已入住其他宿舍
Student student = StudentDAO.getById(studentId);
if(!"未入住".equals(student.getState())) {
return ERROR;
}
// 2. 检查宿舍是否有空床位
Domitory domitory = DomitoryDAO.getById(domitoryId);
if(domitory.getCurrentNum() >= domitory.getMaxNum()) {
return ERROR;
}
// 3. 更新状态和记录
student.setState("已入住");
StudentDAO.update(student);
CheckInRecord record = new CheckInRecord();
// 设置记录属性...
CheckInDAO.add(record);
return SUCCESS;
}
}
5. 系统部署与配置
5.1 环境准备
- JDK 1.8+:配置JAVA_HOME环境变量
- Tomcat 8+:建议使用8.5.x版本
- MySQL 5.7:创建数据库和用户
- IDE:Eclipse/IntelliJ IDEA
5.2 部署步骤
- 创建MySQL数据库:
sql复制CREATE DATABASE dormitory_db CHARACTER SET utf8mb4;
- 导入SQL脚本:
bash复制mysql -u root -p dormitory_db < dormitory.sql
- 修改数据库配置:
java复制// 修改DBHelper.java中的连接参数
private static final String url = "jdbc:mysql://localhost:3306/dormitory_db";
private static final String username = "your_username";
private static final String password = "your_password";
- 部署到Tomcat:
- 将项目导出为WAR文件
- 复制到Tomcat的webapps目录
- 启动Tomcat服务
6. 系统功能展示
6.1 管理员功能界面
- 楼宇管理:添加、编辑、删除楼宇信息
- 宿舍管理:分配、调整宿舍资源
- 学生管理:学生信息CRUD操作
- 统计报表:入住率、缺勤率等数据可视化
6.2 楼宇管理员功能界面
- 学生查询:按条件筛选学生
- 缺勤记录:登记和查询缺勤情况
- 宿舍巡查:记录宿舍检查情况
6.3 学生功能界面
- 个人信息查看
- 缺勤记录查询
- 宿舍调换申请
7. 开发经验与优化建议
7.1 开发中的关键问题
- 并发控制:
- 宿舍分配时可能出现并发问题
- 解决方案:使用数据库乐观锁或同步代码块
java复制// 使用同步方法保证线程安全
public synchronized boolean assignDomitory(Student student, Domitory domitory) {
// 分配逻辑...
}
- 性能优化:
- 大量数据查询时使用分页
- 频繁访问的数据使用缓存
java复制// 使用分页查询
public List<Student> getStudentsByPage(int pageNo, int pageSize) {
String sql = "SELECT * FROM student LIMIT ?,?";
// 执行查询...
}
7.2 安全建议
- 密码安全:
- 存储使用MD5+salt加密
- 传输使用HTTPS协议
java复制// 密码加密示例
public static String encrypt(String password) {
String salt = "random_salt";
return DigestUtils.md5Hex(password + salt);
}
- SQL注入防护:
- 使用PreparedStatement
- 输入参数严格校验
java复制// 使用预编译语句
String sql = "SELECT * FROM student WHERE username = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
8. 扩展与改进方向
- 移动端适配:
- 开发微信小程序或APP版本
- 实现扫码签到等便捷功能
- 物联网集成:
- 对接门禁系统
- 水电表数据自动采集
- 数据分析:
- 学生行为分析
- 宿舍资源利用率分析
- 微服务改造:
- 将系统拆分为多个微服务
- 使用Spring Cloud架构
这个宿舍管理系统虽然采用了传统的JSP+Servlet技术栈,但结构清晰、功能完整,非常适合作为JavaWeb学习的实战项目。在实际开发中,可以根据需求逐步引入新技术,如使用Spring Boot简化配置、MyBatis替代JDBC等,不断提升系统的可维护性和扩展性。