基于javaweb的课程在线学习与测试系统(java+ssm+redis+bootstrap+tomcat+mysql)

这是一个基于Java Web的课程在线学习与测试系统,采用SSM(Spring,SpringMVC,Mybatis)框架,结合Redis缓存,MySQL数据库,Bootstrap和Tomcat。适用于课程设计、项目练习等场景。系统实现了用户登录权限控制,密码MD5加密,前后端分离,并使用了多种前端插件。此外,还集成了Redis来处理用户登录信息,通过过滤器和拦截器实现登录有效期管理和权限校验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于javaweb的课程在线学习与测试系统(java+ssm+redis+bootstrap+tomcat+mysql)

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

20220519000951

20220519000952

20220519000954

20220519000955

20220519000956

20220519000957

20220519000958

基于javaweb+SpringBoot的课程在线学习与测试系统(java+SSM+redis+Bootstrap+Tomcat+mysql)

基于B/S架构的课程在线学习与测试系统

启动说明

项目为maven管理,最近集成了redis,所以在运行项目是先要下载redis并启动客户端,方可正常运行项目,由于只需要下载redis,无需其他配置,这里就不做过多说明。

最近更新

集成redis来保存用户登录信息,添加过滤器重置用户登录有效期。拦截器实现统一登录和权限校验(相关重构还未完成)。

修改配置文件:com.bs.commonn.RedisPool 地址、端口号

pool = new JedisPool(config,“127.0.0.1”,6379,1000*2);

修改数据库配置文件,导入项目bs.sql文件

学生账号测试:lwj 123456

教师测试账号:lwj 123456

管理员测试账号:admin admin

项目采用前后端分离技术实现


  • 框架:SSM(Spring,SpringMVC,Mybatis)

  • 缓存:redis

  • 数据库:MySQL

  • IDE:Intellij IDEA/Eclipse

  • 其他:Maven,Git

项目亮点


  1. 前后端分离。

  2. 用户登录权限区分和控制。

  3. 防止横向越权和纵向越权。

  4. 密码MD5明文加密。

  5. 设计高复用的服务器响应对象。

  6. guava缓存。

  7. pojo,vo抽象模型。

  8. 数据绑定对象。

  9. Mybatis分页

  10. Bootstrap。

  11. artTemplate,artDialog,iframe前端模板使用。

  12. select2、toastr、sweetalert等等前端插件的使用。

  13. redis缓存。

  14. 全局异常处理,拦截器权限统一检验。

班级管理控制层:

@Controller

@SuppressWarnings(“all”)

public class ClassInfoHandler {

@Autowired

private ClassInfoService classInfoService;

@Autowired

private GradeInfoService gradeInfoService;

@Autowired

private TeacherInfoService teacherInfoService;

@Autowired

private TeacherInfo teacher;

@Autowired

private ClassInfo classInfo;

@Autowired

private Gson gson;

private Logger logger = Logger.getLogger(ClassInfoHandler.class);

/**

  • 获取所有班级

  • @param gradeId

  •        系部编号
    
  • @param className

  •        班级名称 可用于模糊查询
    
  • @param classId

  •        班级编号
    
  • @return

*/

@RequestMapping(value = “/classes”, method = RequestMethod.GET)

public ModelAndView getClasses(@RequestParam(value = “gradeId”, required = false) Integer gradeId,

@RequestParam(value = “className”, required = false) String className,

@RequestParam(value = “classId”, required = false) Integer classId) {

ModelAndView model = new ModelAndView();

ClassInfo classInfo = new ClassInfo();

/* 处理查询条件 */

if (gradeId != null) {

GradeInfo gradeInfo = new GradeInfo();

gradeInfo.setGradeId(gradeId);

classInfo.setGrade(gradeInfo);

if (classId != null)

classInfo.setClassId(classId);

if (className != null) {

if (className.trim() != “”)

classInfo.setClassName(className);

List classes = classInfoService.getClasses(classInfo);

model.setViewName(“admin/clazz/classes”);

model.addObject(“classes”, classes);

return model;

/**

  • 预添加班级处理

  • @return

*/

@RequestMapping(“/preAddClass”)

public ModelAndView preAddClass(@RequestParam(name = “gid”,required = false,defaultValue = “”)Integer gid) {

ModelAndView model = new ModelAndView();

// 获取系部信息

List grades = gradeInfoService.getGrades();

model.setViewName(“admin/clazz/classedit”);

model.addObject(“grades”, grades);

// 获取不是班主任的教师

teacher.setIsWork(0);

Map<String, Object> map = new HashMap<String, Object>();

map.put(“startIndex”, null);

map.put(“pageShow”, null);

map.put(“teacher”, teacher);

List teachers = teacherInfoService.getTeachers(map);

model.addObject(“teachers”, teachers);

model.addObject(“editClass”, new ClassInfo());

model.addObject(“gid”,gid);

return model;

/**

  • 添加班级

  • @param classInfo

  •        班级信息
    
  • @param request

  • @return

*/

@RequestMapping(value = “/class”, method = RequestMethod.POST)

public String isAddClass(ClassInfo classInfo, HttpServletRequest request) {

//判断班级名是否存在

ClassInfo byClassName = classInfoService.findByClassName(classInfo.getClassName());

if(byClassName!=null){

request.setAttribute(“error”, “该班级名称已存在!”);

return “error”;

// 修改教师班主任状态

String returnMsg = isChangeTeacherWork(1, classInfo.getTeacher().getTeacherId());

if (returnMsg != null) {

request.setAttribute(“error”, “修改教师班主任状态 对应教师编号有误”);

return “error”;

// 添加

int row = classInfoService.isAddClass(classInfo);

if (row < 1) {

request.setAttribute(“error”, “班级 " + classInfo.getClassName() + " 添加失败,请稍后再试!”);

return “error”;

return “redirect:/classes”;

/**

  • 删除班级

  • @param classId

  •        班级编号
    
  • @param request

  • @return

*/

@RequestMapping(value = “/del/class/{classId}”, method = RequestMethod.DELETE)

public String isDelClass(@PathVariable(“classId”) Integer classId, HttpServletRequest request) {

logger.info("删除班级 " + classId);

// 将删除班级对于之前班主任改为 非班主任状态

// 需要在删除班级之前修改,如果先删除了班级,再根据班级获取教师编号,就不能获取

ClassInfo delClass = classInfoService.getClassById(classId);

String returnMsg = isChangeTeacherWork(0, delClass.getTeacher().getTeacherId());

if (returnMsg != null) {

request.setAttribute(“error”, “修改教师班主任状态 对应教师编号有误”);

return “error”;

// 删除

int row = classInfoService.isDelClass(classId);

if (row < 1) {

logger.error(“班级 " + classId + " 删除失败”);

request.setAttribute(“error”, “班级删除失败,请稍后再试!”);

return “…/error”;

return “redirect:/classes”;

/**

  • 预修改班级处理

  • @param classId

  •        班级编号
    
  • @return

*/

@RequestMapping(value = “edit/class/{classId}”, method = RequestMethod.GET)

public ModelAndView preUpdateClass(@PathVariable(“classId”) Integer classId) {

logger.info(“预修改班级处理”);

ModelAndView model = new ModelAndView();

// 获取要修改班级

ClassInfo classInfo = classInfoService.getClassById(classId);

model.setViewName(“/admin/clazz/classedit”);

model.addObjec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值