基于SSM框架的在线教学系统的设计

2019-05-05 03:31郑逸凡
长沙大学学报 2019年2期
关键词:字段页面框架

郑逸凡

(福州外语外贸学院理工学院,福建 福州 350202)

随着科技的发展与社会的变迁,仅依靠传统的课堂教学方式已无法帮助学生充分利用时间,保障高效学习.本研究基于Spring+SpringMVC+MyBatis框架开发一套在线教学系统.这一系统使得学生可以提前预习相应课程内容,课后及时地巩固和复习已经学过的知识,更好地与老师和其他同学交流和互动,具有很好的实用价值.

1 系统功能模块划分

本系统为广大学生搭建一个在线学习交流的平台,分为后台管理和前台教学这两个子系统.后台管理系统的主要功能模块有:管理员用户管理、权限管理、角色管理、学科管理、班级管理、学习卡管理、篇章管理、段落管理;前台教学系统的主要功能模块有:用户注册登录、查看学习卡、学习课程、查看问题、提问问题、回答问题、系统消息通知.

2 系统技术架构

根据系统的功能、业务、用途、规模等特点,在数据存储访问方面,在经典的MySQL关系数据库的基础上增加Redis缓存服务器,并且把文件的存储、访问交给专门的文件服务器,视频课程管理也交给专门的视频服务器[1].

系统使用maven管理项目结构,把整个项目拆分为7个工程模块:第一个是parent模块,该模块是pom工程,主要用来统一管理依赖jar的版本,其他模块都继承此模块;第二个是pojo模块,该模块是jar工程,包含了项目用到的pojo类;第三个是common模块,该模块是jar工程,主要包含工具类以及其他通用的类;第四个是mapper模块,该模块是jar工程,实现DAO层的功能;第五个是service模块,该模块是jar工程,实现service层的功能;第六个是admin模块,该模块是war工程,同时也是后台管理系统,包括controller层、jsp页面、前端组件等;第七个是front模块,该模块是war工程,同时也是前台系统,包括controller层、jsp页面、前端组件等.

系统整体采用Spring+SpringMVC+MyBatis开发框架,前端主要采用Bootstrap、UEditor、layer、laypage等框架和组件,另外系统还采用了pageHelper、云存储、云视频等技术.

3 数据库设计

在本系统中,数据库设计遵循统一的设计规范:每张表都有一个逻辑主键列id,即id bigint primary key auto_increment;使用中间表来表示两张表的多对多关联关系;对中间表的关联关系进行外键约束;对非中间表使用isDeleted列进行软删除[2].比如权限管理模块的相关表设计如下:

管理员用户表T_AdminUsers(id,account,passwordSalt,password,isDisabled,isDeleted);

角色表T_Roles(id,name,description,isDeleted);

权限表T_Permissions(id,path,description,isDeleted);

管理员用户和角色关联表T_AdminUserRoles(id,adminUserId,roleId);

角色和权限关联表T_RolePermissions(id,roleId,permissionId).

4 项目SSM框架整合

系统admin模块和front模块均为war工程,继承parent模块,依赖service模块,传递依赖common、mapper、pojo模块,主要包含controller层的类、jsp页面、前端组件、配置文件等.系统使用MyBatis作为持久层框架,配置文件为mybatis-config.xml;使用Spring作为bean容器,配置文件为beans.xml;使用SpringMVC作为前端MVC框架,配置文件为dispatcher-servlet.xml;在web.xml中初始化Spring和SpringMVC;使用log4j2作为日志实现.例如,在web.xml中配置Spring容器的代码如下:

contextConfigLocation

classpath:beans.xml

org.springframework.web.context.ContextLoaderListener

5 系统功能模块实现

整个项目采用统一的utf-8编码,服务器采用tomcat8,在整个系统开发之前统一设置编码过滤器,具体的操作是:在web.xml文件中配置Spring框架提供的CharacterEncodingFilter过滤器,对用户的post请求和响应进行统一的字符编码[3].

5.1 parent模块实现

该模块是pom工程,是其他模块的父工程,主要用来管理依赖jar的版本,管理JDK编译器版本等,例如pom.xml文件中MyBatis和Spring整合的依赖配置如下:

5.2 common模块实现

该模块是jar工程,主要包含一些通用的工具类和工具方法,其他模块可以方便地共享这些工具类和方法,主要包括AjaxResult、ImageCodeUtils、EmailUtils、JsonUtils、JedisUtils、UploadUtils、CommonUtils等工具类.例如,JsonUtils类中的toJson方法可以把bean对象转换为json字符串,核心代码如下:

private staticObjectMapper objectMapper = new ObjectMapper();

public static StringtoJson(Object obj) {

objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

objectMapper.setSerializationInclusion(Include.NON_NULL);

try {

returnobjectMapper.writeValueAsString(obj);

} catch (JsonProcessingException e) {

throw newRuntimeException(e);

}

}

5.3 pojo模块实现

每张数据库表对应一个pojo类,表中的列和pojo类中的字段一一对应(isDeleted字段除外);pojo类中基本数据类型的字段使用包装类型进行声明;pojo类实现Serializable,并且使用id字段生成hashCode()和equals()方法;对于外键列对应的类的字段的类型,使用基本类型(包装类型);pojo类的字段类型不使用关联的pojo类,也不使用集合类型的字段[4].

5.4 mapper模块实现

首先声明一个通用的IMapper接口,提供对数据库表基本的增删改查操作;然后声明一个通用的IManyToManyMapper接口继承自IMapper,提供对中间表的其他基本操作.非中间表的pojo类对应的mapper接口直接继承自IMapper接口,而中间表的pojo类对应的mapper接口继承自IManyToManyMapper接口.每个pojo类的mapper映射文件与mapper接口一一对应,主要提供了具体的数据库操作实现,比如SubjectMapper映射文件的主要内容如下:

5.5 service模块实现

首先声明一个BaseService通用类,提供基本的增删改查分页排序功能;然后声明一个ManyToManyBaseService通用类,继承自BaseService,提供对中间表的其他功能;每个pojo类对应一个Service类.

BaseService类的成员变量mapper会自动根据泛型T的具体值注入对应的mapper对象,PageHelper是开源的分页组件,BaseService类的部分代码如下:

public classBaseService {

@Autowired

privateIMapper mapper;

public ListselectList(T pojo, String orderBy) {

PageHelper.orderBy(orderBy);

returnmapper.select(pojo);

}

}

5.6 admin模块实现

该模块主要完成的是系统的后台管理,包括权限管理、学习卡管理、篇章和段落管理,总的设计思路是采用MVC的设计思想:首先利用前端框架制作页面的静态效果页,然后在控制器中编写相应的方法处理各种请求,当请求处理完成后将响应结果传递给视图页面进行渲染[5].

例如,当要进行学习卡的添加操作时,需要读取数据库中现有的所有学习卡,首先制作出学习卡的列表页面cardList.jsp,然后,在学习卡控制器CardController中编写addPage方法,从数据库中获取学习卡对象集合,最终传递给cardList.jsp视图页,addPage方法具体实现代码如下:

@RequestMapping(value = "/add.do", method = RequestMethod.GET)

publicModelAndView addPage() {

ListsubjectList = subjectService.selectList();

ModelAndView modelAndView = new ModelAndView("card/add");

modelAndView.addObject("subjectList", subjectList);

returnmodelAndView;

}

admin模块中学习卡管理的最终页面效果如图1所示:

图1 admin模块最终效果图

5.7 front模块实现

该模块主要完成的是系统的前台功能,包括个人信息的管理、学习进度的跟踪、学生和老师之间的互动等功能,该模块总的设计思想与admin模块相似,也是采用MVC设计思想.其中文件上传的功能采用的是云存储技术,目的是为了降低主应用服务器的处理压力.利用云存储进行文件上传的实现步骤是:首先获得云存储服务器的AccessKey和SecretKey,然后根据获取的存储空间所在区域创建相应的配置对象,接着根据配置信息创建文件上传管理对象,最后调用put方法把用户选择的文件上传到云服务器上.文件上传到云服务器的主要代码如下:

Setting bucket =settingService.selectOneByName("upload_bucket");

SettingaccessKey = settingService.selectOneByName("upload_accessKey");

SettingsecretKey = settingService.selectOneByName("upload_secretKey");

Authauth = Auth.create(accessKey, secretKey);

Zone z =Zone.autoZone();

Configuration c = new Configuration(z);

UploadManager uploadManager = new UploadManager(c);

Response res =uploadManager.put(file, file.getName(), auth.uploadToken(bucket));

front模块为学生提供了在线提问等功能,方便学生与老师实现互动交流,比如学生在线提问的最终页面效果如图2所示:

图2 front模块中学生在线提问页面效果图

基于Spring+SpringMVC+MyBatis技术极大地提高了web系统的开发效率,对系统进行分模块设计有利于系统的扩展性和可维护性.在线教学系统的最终呈现效果,页面简洁、风格统一,系统操作简单,能够提供在线的学习和交流的功能.在线学习平台不仅轻松解决了学习资料的共享问题,而且极大地方便了学生利用碎片化的时间进行学习和提高,师生之间的互动性也明显增强.

猜你喜欢
字段页面框架
刷新生活的页面
图书馆中文图书编目外包数据质量控制分析
有机框架材料的后合成交换
框架
答案
K-框架和紧K-框架的算子扰动的稳定性
关于原点对称的不规则Gabor框架的构造
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述
关于CNMARC的3--字段改革的必要性与可行性研究