![功能图](files/feature.png)
## 项目所使用技术
- mysql:数据库
- spring boot: 快速开发框架
- spring IOC: 依赖注入
- spring mvc:MVC框架
- spring data jpa:ORM框架
- druid:数据库监控连接池
- freemarker: 模版引擎
- bootstrap:CSS框架
- slf4j+log4j2:日志
- ehcache:缓存
## 亮点
- 性能
> 采用了CDN加速和HTTP压缩技术,减轻服务器压力并提高相应时间,后端采用ehcache缓存经常用到但不常修改的数据,提高响应速度。
```
CDN(index.ftl):
<script src="https://cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<link href="https://cdn.bootcss.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
HTTP压缩(application.yaml):
server:
compression:
min-response-size: 512
enabled: true
mime-types: text/html,text/css,text/javascript,application/javascript,image/gif,image/png,image/jpg
ehcache缓存(ehcache.xml, SubjectServiceImpl)
<cache name="subjects"
maxElementsInMemory="1"
overflowToDisk="false"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="1800"
memoryStoreEvictionPolicy="FIFO"
/>
@Cacheable(value = "subjects", key = "1")
@Override
public List<Subject> getAllSubjects() {
Iterable<Subject> subjectIterable = subjectRepository.findAll();
List<Subject> list = new ArrayList<>();
subjectIterable.forEach(t -> list.add(t));
return list;
}
@Caching(evict = @CacheEvict(value = "subjects", key = "1"))
@Override
public void addSubject(String name) {
int num = subjectRepository.countByName(name);
if (num > 0) {
throw new RuntimeException("error.subject.exist");
}
subjectRepository.save(new Subject(name));
}
```
- 安全性
> 虽然没有使用权限引擎,但请求比较严格遵守restful规范,每次操作该资源时才先代码校验当前用户有无该资源的权限。前端将密码加密,防止密码抓包时可见等
```
密码前端加密,防止密码泄露(login.ftl)
$("#login-button").bind("click",
function() {
var b, a = document.forms[0];
a.action = "/login.do",
b = document.loginForm.passBefore.value,
document.loginForm.password.value = md5(b),
document.loginForm.role.value=getType();
a.method = "post",
a.submit()
})
检查操作权限(PaperServiceImpl)
public void deletePaper(long paperId, long teacherId) {
Paper paper = paperRepository.findOne(paperId);
if (paper == null) {
return;
}
if (paper.getOwnerId() != teacherId) {
throw new CommonException("error.paper.delete.noPermission");
}
paperRepository.delete(paper);
}
```
- 代码分层
> 代码严格分为controller(控制器),service(业务逻辑层),repository(数据操作层)三层。使用JSP会插入java代码,不利于前后端严格分层,因此采用了性能也更高的freemarker模板引擎。
![代码分层](files/code.png)
- 为了确保数据的操作一致性,使用spring的声明式事务@Transactional (TeacherServiceImpl)
```
@Transactional
public void scorePaper(long paperId, long studentId, String scores) {
UserPaperScore userPaperScore = new UserPaperScore();
userPaperScore.setPaperId(paperId);
userPaperScore.setUserId(studentId);
try {
int score = 0;
List<ScoreForm> scoreFormList = mapper.readValue(scores, new TypeReference<List<ScoreForm>>() {
});
for (ScoreForm scoreForm : scoreFormList) {
int exeScore = Integer.parseInt(scoreForm.getScore());
score += exeScore;
UserPaperAnswer userPaperAnswer = userPaperAnswerRepository
.findByUserIdAndExerciseId(studentId, Integer.parseInt(scoreForm.getId()));
if (userPaperAnswer != null) {
userPaperAnswer.setScore(exeScore);
userPaperAnswerRepository.save(userPaperAnswer);
}
}
userPaperScore.setScore(score);
userPaperScoreRepository.save(userPaperScore);
} catch (IOException e) {
e.printStackTrace();
}
}
```
- 答题
> 答题时有倒计时功能,到达结束时间自动提交。为了防止作弊,禁用页面的复制和鼠标右键。
禁用页面的复制和鼠标右键(answer_paper.ftl
```
$(function(){
document.oncontextmenu = function(){
event.returnValue = false;
}
document.onselectStart = function(){
event.returnValue = false;
}
document.oncopy = function(){
event.returnValue = false;
}
timer(intDiff);
});
```
![倒计时](files/time.png)
- 细节
> 为了考虑易用性,比如老师批阅试卷时批改单选题给分的时候只有0分要么全分等。
![单选题](files/choose.png)
- 页面
> 页面简洁美观,采用了较为平面化的设计,且为了适配不同尺寸的显示器,采用了响应式处理。
页面优美
![页面优美](files/beauty.png)
响应式页面
![响应式页面](files/response1.png)
![响应式页面](files/response2.png)
- druid监控网站(DruidDataSourceConfig中配置druid)
![druid](files/druid.png)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
在线考试系统是一种基于互联网的教育技术工具,用于组织、管理和实施在线考试。这种系统通常由软件应用程序支持,为学生和考生提供了在网上参加考试的机会。在线考试系统可以用于各种教育和培训场景,包括学校教育、职业资格认证、招聘考试等。 【主要特点和优势】: 灵活性和便利性:学生和考生可以通过互联网随时随地参加考试,不再受限于特定的地点和时间。 自动化管理:系统能够自动管理考试安排、考生信息、考试成绩等数据。 安全性:在线考试系统通常具有严格的身份验证和防作弊措施。 实时反馈:考试结束后,系统可以立即生成和发布成绩,提供即时反馈。 多样化的题型:系统支持各种题型,包括选择题、填空题、问答题等多种题型。 数据分析:系统可以收集和分析大量的考试数据,帮助教育机构和考试机构更好地了解学生的表现和需求,优化教学和考试内容。 【引流】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
资源推荐
资源详情
资源评论
收起资源包目录
一个基于spring boot的在线考试系统jexam.zip (189个子文件)
gradlew.bat 2KB
bootstrap.min.css 111KB
animate.min.css 55KB
font-awesome.min.css 30KB
style.css 28KB
login-page.min.css 8KB
bootstrap-select.min.css 6KB
per-center.css 4KB
panda-syntax.css 2KB
railscasts.css 1KB
error.css 983B
.DS_Store 8KB
.DS_Store 6KB
fontawesome-webfont.eot 162KB
glyphicons-halflings-regular.eot 20KB
edit_paper.ftl 20KB
exercise.ftl 12KB
answer_paper.ftl 11KB
score_page.ftl 11KB
paper_detail.ftl 8KB
exe_mgr.ftl 8KB
exe_detail.ftl 8KB
les_mgr.ftl 7KB
index.ftl 6KB
paper.ftl 6KB
exercise_page.ftl 5KB
chp_mgr.ftl 5KB
crs_mgr_mod.ftl 4KB
crs_mgr_add.ftl 4KB
manager_paper.ftl 4KB
register.ftl 4KB
correct_paper.ftl 3KB
add_paper.ftl 3KB
exam_page.ftl 3KB
login.ftl 3KB
stu_col_exe.ftl 3KB
add_student.ftl 3KB
stu_join_crs.ftl 3KB
add_subject.ftl 3KB
tea_not_mgr.ftl 3KB
stu_not_mgr.ftl 3KB
error.ftl 454B
bg_dark.gif 118KB
loader.gif 47KB
1350x740.gif 5KB
617x310.gif 5KB
800x600.gif 4KB
617x350.gif 2KB
213x213.gif 783B
114x114.gif 377B
100x100.gif 336B
logo-bw.gif 306B
logo-color.gif 306B
88x88.gif 301B
75x75.gif 270B
64x64.gif 239B
65x65.gif 234B
.gitattributes 84B
.gitignore 126B
build.gradle 4KB
settings.gradle 28B
gradlew 5KB
500.html 379B
401.html 373B
404.html 366B
gradle-wrapper.jar 52KB
ExerciseServiceImpl.java 7KB
TeacherController.java 6KB
DruidDataSourceConfig.java 5KB
StudentServiceImpl.java 5KB
TeacherServiceImpl.java 5KB
FileUtils.java 3KB
JsonUtils.java 3KB
StudentController.java 3KB
Exercise.java 3KB
ExerciseController.java 2KB
PaperServiceImpl.java 2KB
InitServiceImpl.java 2KB
UserController.java 2KB
RequestUtils.java 2KB
PaperController.java 2KB
User.java 2KB
UserSerServiceImpl.java 1KB
SubjectServiceImpl.java 1KB
CtrlExceptionHandler.java 1KB
JexamBeanUtils.java 1KB
UserSecurityInterceptor.java 1KB
CommonUtils.java 1KB
ExerciseService.java 1KB
ExerciseRepository.java 1KB
JexamApplication.java 833B
WebMvcConfig.java 795B
UserRepository.java 760B
Paper.java 720B
TeacherStudent.java 713B
UserPaperAnswer.java 674B
UserPaperAnswerRepository.java 636B
TeacherStudentRepository.java 627B
ExerciseForm.java 626B
UserAuxiliary.java 591B
共 189 条
- 1
- 2
资源评论
枫蜜柚子茶
- 粉丝: 6140
- 资源: 4168
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 锄战三国村 修改:货币使用不减 v1.10(2) 原创 (中文).apk
- 基于python实现的单目双目视觉三维重建+源代码+图像图片(高分课程设计)
- 基于C+++OPENCV的全景图像拼接源码(课程设计)
- 基于Python+OpenCV对多张图片进行全景图像拼接,消除鬼影,消除裂缝+源代码+文档说明+界面截图(高分课程设计)
- 基于C++实现的全景图像拼接源码(课程设计)
- 基于SIFT特征点提取和RASIC算法实现全景图像拼接python源码+文档说明+界面截图+详细注释(95分以上课程大作业)
- 基于matlab实现眼部判别的疲劳检测系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的异常姿势识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 隐藏文件展示工具,用来展示被病毒隐藏的文件
- 基于Matlab的图像分割系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功