> 文档中心 > Java项目:在线考试系统(java+Springboot+jsp+Maven+Mysql)

Java项目:在线考试系统(java+Springboot+jsp+Maven+Mysql)

文章目录

  • 前言
    • 一、框架介绍
    • 1.1、Spring
    • 1.2、SpringMVC
    • 1.3、MyBatis
    • 1.4、SSM整合
    • 二、开发环境
    • 三、系统功能
    • 3.1 考试界面登陆
    • 3.2 选择试题
    • 3.3 试卷界面
    • 3.3 后台管理员主界面
    • 3.4 管理菜单
      • 3.4.1 学员管理
      • 3.4.2 套题管理
      • 3.4.3 试题结构维护
      • 3.4.3 题库管理
      • 3.4.5 成绩查询
      • 3.4.6 考试报告
    • 四、部分代码展示
      • 4.1.login.jsp
    • 4.2 修改学员信息
      • 4.2 .1 Controller
      • 4.2.2 Service
      • 4.2.3 ServiceImpl
      • 4.2.4 dao
      • 4.2.5 UserMapper
    • 五 、框架其他配置
    • 5.1 数据库配置
    • 5.2、配置spring-mvc.xml
    • 5.3 Log4j的配置
    • 5.4 数据库表结构

前言

最近正好在带徒弟做项目,也有很多网友再问,能否个共享一些框架,所以整理了下 把最近部署上线的一套学Spring+SpringMVC+MyBatis的在线考试系统框架分享给各位网友 希望给各位大学僧,网友一些帮助,我是一个乐于分享的人,大家点赞关注哈


体系化学习MySQL,请查看以下博客:
MySQL从入门到精通

一、框架介绍

1.1、Spring

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架

1.2、SpringMVC

  Spring MVC属于SpringFrameWork的后续产品,  已经融合在Spring Web Flow里面。  Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,  这种分离让它们更容易进行定制。

在这里插入图片描述

1.3、MyBatis

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

1.4、SSM整合

这次整合我分了2个配置文件,分别是spring-mybatis.xml,包含spring和mybatis的配置文件,还有个是spring-mvc的配置文件,此外有2个资源文件:jdbc.propertis和log4j.properties。

完整目录结构如下:
在这里插入图片描述

二、开发环境

开发语言:Java技术:JavaWeb【Servlet】数据库:MySQL架构:B/S源码类型: Web编译工具:Idea、Eclipse、MyEclipse (选其一)其他:jdk1.8、Tomcat5.7 、Navicat使用框架的版本:Spring 3.2.12 RELEASESpring MVC 4.0.2 RELEASEMyBatis 3.2.6

三、系统功能

3.1 考试界面登陆

在这里插入图片描述
在这里插入图片描述

3.2 选择试题

在这里插入图片描述
在这里插入图片描述

3.3 试卷界面

在这里插入图片描述在这里插入图片描述

3.3 后台管理员主界面

在这里插入图片描述

3.4 管理菜单

在这里插入图片描述

3.4.1 学员管理

在这里插入图片描述

3.4.2 套题管理

在这里插入图片描述

3.4.3 试题结构维护

在这里插入图片描述

3.4.3 题库管理

在这里插入图片描述

3.4.5 成绩查询

在这里插入图片描述

3.4.6 考试报告

在这里插入图片描述

四、部分代码展示

4.1.login.jsp

登录 -${websitemap.web.company}-${websitemap.web.title}function enterSubmit(event) {var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;if (keyCode == 13) {$("#loginForm").submit();return false;}}

在线考试后台管理系统

验证码,点击图片更换

${message}

4.2 修改学员信息

4.2 .1 Controller

/** * 修改学员信息 */@RequestMapping("/updateUserInfo")@ResponseBodypublic Map updateUserInfo(HttpServletRequest request,@ModelAttribute("user") User user) {Map json = new HashMap();try {if (user.getUserId() > 0) {if (user.getShowName() == null || user.getShowName() == "") {json = this.setJson(false, "姓名不能为空!", null);return json;}if (user.getEmail() != null&& user.getEmail().trim().length() > 0&& !WebUtils.checkEmail(user.getEmail(), 50)) {json = this.setJson(false, "请输入正确的邮箱号", null);return json;}if (user.getMobile() != null&& user.getMobile().trim().length() > 0&& !WebUtils.checkMobile(user.getMobile())) {json = this.setJson(false, "请输入正确的电话号", null);return json;}SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String startDate=user.getStartDate();user.setShiftTime(sdf.parse(startDate));userService.updateUser(user);json = this.setJson(true, "学员修改成功", null);} else {json = this.setJson(false, "修改失败", null);}} catch (Exception e) {this.setAjaxException(json);logger.error("udpateUser()--error", e);}return json;}

4.2.2 Service

public interface UserService {/** * 创建用户 * @param user * @return 返回用户ID */public int createUser(User user);/** * 通过用户ID查询用户 * @param userId 用户不D * @return User */public User queryUserById(int userId);/** * 检测用户工号是否存在  * @param username 工号 * @return  true存在 false不存在  */public boolean checkuserName(String username);/** * 检测手机是否存在  * @param mobile 手机号 * @return true存在 false不存在  */public boolean checkMobile(String mobile);

4.2.3 ServiceImpl

@Service("userService")public class UserServiceImpl implements UserService{@Autowiredprivate UserDao userDao;@Autowiredprivate SysDictService sysDictService;@Autowiredprivate UserGroupService userGroupService;public int createUser(User user) {return userDao.createUser(user);}public User queryUserById(int userId) {return userDao.queryUserById(userId);}public boolean checkMobile(String mobile) {int count = userDao.checkMobile(mobile);if(count>0){return true;}return false;}public boolean checkuserName(String username) {int count = userDao.checkuserName(username);if(count>0){return true;}return false;}

4.2.4 dao

public interface UserDao {/** * 创建用户 * @param user * @return 返回用户ID */public int createUser(User user);/** * 通过用户ID查询用户 * @param userId 用户不D * @return User */public User queryUserById(int userId);/** * 检测手机是否存在  * @param mobile 手机号 * @return 返回记录数 */public int checkMobile(String mobile);/** * 检测工号是否存在  * @param username 工号 * @return 返回记录数 */public int checkuserName(String username);/** * 检测邮箱号是否存在  * @param email 邮箱号 * @return 返回记录数 */public int checkEmail(String email);

4.2.5 UserMapper

SELECT  FROM EDU_USER 0">EDU_USER.IS_AVALIBLE=#{e.isavalible}    AND (EDU_USER.USERGROUP LIKE CONCAT('%',#{e.usergroup},'%'))AND (EDU_USER.MOBILE LIKE CONCAT('%',#{e.keyWord},'%') OR EDU_USER.EMAIL LIKE CONCAT('%',#{e.keyWord},'%') OR EDU_USER.USER_NAME LIKE CONCAT('%',#{e.keyWord},'%') OR EDU_USER.SHOW_NAME LIKE CONCAT('%',#{e.keyWord},'%'))AND EDU_USER.CREATE_TIME >= #{e.beginCreateTime}AND <![CDATA[EDU_USER.CREATE_TIME SELECT COUNT(1) FROM EDU_USER 0">EDU_USER.IS_AVALIBLE=#{e.isavalible}    AND (EDU_USER.USERGROUP LIKE CONCAT('%',#{e.usergroup},'%'))AND (EDU_USER.MOBILE LIKE CONCAT('%',#{e.keyWord},'%') OR EDU_USER.EMAIL LIKE CONCAT('%',#{e.keyWord},'%') OR EDU_USER.USER_NAME LIKE CONCAT('%',#{e.keyWord},'%') OR EDU_USER.SHOW_NAME LIKE CONCAT('%',#{e.keyWord},'%'))AND EDU_USER.CREATE_TIME >= #{e.beginCreateTime}AND <![CDATA[EDU_USER.CREATE_TIME SELECT  FROM EDU_USEREDU_USER.USER_NAME = #{value}UPDATE EDU_USER SET EDU_USER.IS_AVALIBLE=#{isavalible} WHERE EDU_USER.USER_ID=#{userId}UPDATE EDU_USER SET EDU_USER.SHOW_NAME=#{showName},EDU_USER.USERGROUP=#{usergroup},EDU_USER.SECTION=#{section},EDU_USER.EMAIL=#{email},EDU_USER.MOBILE=#{mobile},EDU_USER.SEX=#{sex},EDU_USER.AGE=#{age},EDU_USER.SHIFT_DATE=#{shiftTime},EDU_USER.FREQUENCY=#{frequency}WHERE EDU_USER.USER_ID=#{userId}UPDATE EDU_USER SET EDU_USER.PIC_IMG=#{picImg}WHERE EDU_USER.USER_ID=#{userId}UPDATE EDU_USER SET BANNER_URL=#{bannerUrl} WHERE USER_ID=#{userId}SELECT COUNT(1) FROM EDU_USERSELECT  FROM EDU_USER WHERE EMAIL=#{value} OR MOBILE=#{value} LIMIT 1selectfrom EDU_USER where EDU_USER.USER_ID in   #{item}       selectfrom edu_user 0 ">AND EDU_USER.USER_ID = #{e.userId}AND EDU_USER.EMAIL like CONCAT('%',#{e.email},'%')AND EDU_USER.MOBILE like CONCAT('%',#{e.mobile},'%')AND EDU_USER.USER_NAME like CONCAT('%',#{e.userName},'%')AND EDU_USER.SHOW_NAME like CONCAT('%',#{e.showName},'%') 0 ">AND EDU_USER.SEX=#{e.sex}order by EDU_USER.USER_ID descselectcount(1)from edu_user 0 ">AND EDU_USER.USER_ID = #{e.userId}AND EDU_USER.EMAIL like CONCAT('%',#{e.email},'%')AND EDU_USER.MOBILE like CONCAT('%',#{e.mobile},'%')AND EDU_USER.USER_NAME like CONCAT('%',#{e.userName},'%')AND EDU_USER.SHOW_NAME like CONCAT('%',#{e.showName},'%') 0 ">AND EDU_USER.SEX=#{e.sex}DELETE FROM EDU_USER WHERE EDU_USER.USER_ID = #{value}

五 、框架其他配置

5.1 数据库配置

project.properties

#数据库主机地址jdbc.host=localhost#数据库名jdbc.database=learn#用户名jdbc.username=root#密码jdbc.password=root#项目路径contextPath=http://localhost:80

5.2、配置spring-mvc.xml

配置里面的注释也很详细,主要是自动扫描控制器,视图模式,注解的启动这三个。

<!--  -->json=application/jsonxml=application/xml50485760004096/WEB-INF/view/common/403/common/error

5.3 Log4j的配置

为了方便调试,一般都会使用日志来输出信息,Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程
log4j.rootLogger=INFO,Console,File  #定义日志输出目的地为控制台  log4j.appender.Console=org.apache.log4j.ConsoleAppender  log4j.appender.Console.Target=System.out  #可以灵活地指定日志输出格式,下面一行是指定具体的格式  log4j.appender.Console.layout = org.apache.log4j.PatternLayout  log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n    #文件大小到达指定尺寸的时候产生一个新的文件  log4j.appender.File = org.apache.log4j.RollingFileAppender  #指定输出目录  log4j.appender.File.File = logs/ssm.log  #定义文件最大大小  log4j.appender.File.MaxFileSize = 10MB  # 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志  log4j.appender.File.Threshold = ALL  log4j.appender.File.layout = org.apache.log4j.PatternLayout  log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

5.4 数据库表结构

在这里插入图片描述

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻