1. 项目概述:SSM公开课记录管理系统
去年在给某高校开发教务系统时,我接手了一个公开课管理模块的需求。校方要求实现一个能够完整记录公开课信息、支持多角色协同操作的系统。经过技术选型,最终采用SSM(Spring+SpringMVC+MyBatis)框架组合开发了这套公开课记录管理系统。
这个系统主要解决三个核心问题:
- 教务人员需要统一管理全校公开课信息
- 教师需要便捷地记录和查询听课情况
- 校领导需要宏观掌握公开课开展情况
系统采用B/S架构,前端使用JSP+HTML5+JavaScript,后端基于Java 8开发,数据库选用MySQL 5.7。下面我将从技术实现角度详细解析这个项目的开发过程。
2. 系统设计与技术选型
2.1 架构设计思路
系统采用典型的三层架构:
- 表现层:JSP+HTML+JavaScript
- 业务逻辑层:Spring MVC
- 数据访问层:MyBatis
选择SSM框架组合主要基于以下考虑:
- Spring的IoC容器管理对象生命周期,AOP支持事务管理
- Spring MVC的注解驱动开发模式简化Controller编写
- MyBatis的SQL与代码分离,便于复杂查询优化
2.2 数据库设计
数据库包含8张核心表:
- 用户表(user):存储系统用户信息
- 公告表(notice):管理系统公告
- 教室表(classroom):记录教室信息
- 课程表(course):存储课程基本信息
- 听课记录表(curelation):记录教师听课情况
- 课程评价表(coursecomment):存储课程反馈
- 角色表(role):定义系统角色
- 权限表(power):管理系统权限
关键表关系说明:
- 用户与角色是多对一关系
- 课程与听课记录是一对多关系
- 用户与听课记录是一对多关系
3. 核心功能实现
3.1 用户认证模块
采用基于Session的认证机制,核心代码如下:
java复制@RequestMapping("/Login")
public ModelAndView login(HttpServletRequest request,String id,String password) {
User user = userService.selectByPrimaryKey(id);
if(user!=null && user.getPassword().equals(password)){
request.getSession().setAttribute("user", user);
return new ModelAndView("Main");
}
return new ModelAndView("login","error","用户名或密码错误");
}
安全注意事项:
- 密码采用MD5加盐存储
- 登录失败不提示具体错误原因
- Session设置合理过期时间
3.2 听课记录管理
核心功能包括记录添加、修改和查询:
java复制@RequestMapping("update2")
public String updateRecord(HttpServletRequest request,Course course){
User user = (User) request.getSession().getAttribute("user");
Curelation record = new Curelation();
record.setUserid(user.getId());
record.setCourseid(course.getId());
// 检查是否已存在记录
List<Curelation> records = curelationService.queryAll(record);
if(records.isEmpty()){
record.setId(UUID.randomUUID().toString());
record.setType("1");
curelationService.insert(record);
}else{
Curelation existRecord = records.get(0);
existRecord.setStatus("1"); // 标记为已听课
curelationService.updateByPrimaryKey(existRecord);
}
return "redirect:/Course/student";
}
3.3 Excel数据导入导出
系统支持将听课记录导出为Excel:
java复制@RequestMapping("/export")
public void export(HttpServletResponse response, User user) throws Exception {
response.setContentType("application/vnd.ms-excel");
String fileName = "听课记录_" + new SimpleDateFormat("yyyyMMdd").format(new Date());
response.setHeader("Content-disposition", "attachment;filename=" +
new String(fileName.getBytes("gbk"),"iso8859-1") + ".xls");
String[] titles = {"记录ID","教师姓名","课程名称","听课时间"};
courseService.export(titles, response.getOutputStream(), user);
}
导入功能采用jxl库解析Excel:
java复制@RequestMapping("/import")
public String importExcel(MultipartFile file) throws Exception {
Workbook workbook = Workbook.getWorkbook(file.getInputStream());
Sheet sheet = workbook.getSheet(0);
for(int i=1; i<sheet.getRows(); i++){ // 跳过标题行
Cell idCell = sheet.getCell(0,i);
Cell scoreCell = sheet.getCell(1,i);
Curelation record = new Curelation();
record.setId(idCell.getContents());
record.setScore(scoreCell.getContents());
curelationService.updateByPrimaryKey(record);
}
return "redirect:/Course/list";
}
4. 系统部署与配置
4.1 环境要求
- JDK 1.8+
- MySQL 5.7+
- Tomcat 8+
- 内存:1GB以上
4.2 部署步骤
- 数据库准备:
sql复制CREATE DATABASE course_manager;
USE course_manager;
SOURCE course_manager.sql;
- 修改数据库配置:
yaml复制# application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/course_manager
username: root
password: yourpassword
driver-class-name: com.mysql.jdbc.Driver
- 项目打包部署:
bash复制mvn clean package
cp target/course-manager.war $TOMCAT_HOME/webapps/
5. 开发经验与优化建议
5.1 性能优化实践
- MyBatis二级缓存配置:
xml复制<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<cache eviction="LRU" flushInterval="60000" size="512"/>
- 数据库连接池配置:
yaml复制spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
idle-timeout: 30000
5.2 常见问题解决
- 中文乱码问题:
- 确保JSP页面设置:
<%@ page contentType="text/html;charset=UTF-8" %> - Tomcat配置server.xml:
<Connector URIEncoding="UTF-8"/>
- 事务管理:
java复制@Transactional
public void updateCourse(Course course) {
courseMapper.update(course);
// 其他数据库操作
}
- 跨域问题处理:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*");
}
}
6. 系统扩展方向
在实际使用过程中,可以考虑以下扩展:
- 增加微信小程序端,方便移动办公
- 集成第三方认证(如LDAP)
- 添加数据分析模块,生成听课统计报表
- 实现自动提醒功能(邮件/短信)
- 支持微服务架构改造
这个项目完整实现了公开课管理的核心需求,代码结构清晰,采用主流技术栈,适合作为JavaWeb学习的参考项目。在开发过程中,特别要注意事务管理和性能优化,这些经验对后续开发其他管理系统也很有帮助。