基于SSH框架源程序在线评测系统设计
2014-07-18胡兰兰罗军王清行
胡兰兰 罗军 王清行
摘要:该系统是针对ACM程序设计的在线测评系统,主要采用了J2EE的技术架构并集成SSH开源组合框架以保证系统的性能和稳定性。系统主要实现了用户在线测评、组织竞赛、讨论等功能。在编译运行模块采用了黑盒测试的思想并发的编译和运行,以提高对多用户同时在线评测的效率。
关键词: 源程序;在线测评;B/S;SSH;J2EE
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)13-2974-03
The Design of Source Code Online Evaluation System Based on SSH
HU Lan-lan, LUO Jun, WANG Qing-hang
(Math and Computer Department,Yangtze Normal University,Chongqing 400800, China)
Abstract: The online evaluation system is mainly aimed at ACM program. In order to keep the performance and stability of the system, J2EE SSH open source frame has been adopted in the system. The main function is the user online source code evaluation, taking part in competition, and discussion etc. If many users use the system at the same time, the compile part work as black-box testing can increase the efficiency.
Key words: source code; online evaluation; B/S; SSH; J2EE
ACM/ICPC(ACM国际大学生程序设计竞赛)是全世界大学生计算机程序设计竞赛中最有影响的一项赛事,国内高校在1996年也开始参加。程序设计竞赛是展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的比赛。该文在总结以往系统开发设计经验基础上,设计了一个基于B/S结构的多用户在线测评系统,允许用户在线提交自己的解题代码,系统自动编译运行给出裁判结果,并根据用户解题数和用时排出名次,用户可以和教师一起讨论,教师可以组织比赛。通过本系统,学生可在网上自主进行程序设计训练,有利于提高学生的编程水平,增强实践能力。由于多用户同时提交代码编译并发性非常高,因此本系统采用J2EE技术来设计与实现。
1 项目主要功能介绍
本项目设计了一个适用于普通高校特点的程序设计在线测评系统,用于高校的程序设计课程的作业、课程考核、学科竞赛等。该系统具有丰富的编程题库,学生可以选择某个题目进行训练,提交答案,系统接收答案后,能自动判断答案是否正确,向学生反馈答案的判断结果,同时记录学生答题的过程及结果。管理员管理系统的消息、题库信息、普通用户的注册,也可以随时登录系统查看学生的答题情况,并随时增加新的编程题目或删除过时的题目,还可以在系统上组织考试或竞赛,系统可以自动给出各位学生成绩及排名情况。
2 系统体系结构分析
本系统基于开放式SSH(Spring + Struts +Hibernate)组合框架,该系统采用MVC分层结构设计,分为数据访问层、业务逻辑层、表示层,采用B/S结构,系统体系结构图如图1所示。
图1 系统体系结构图
2.1 表示层设计
表示层主要通过Struts框架来实现,包括视图部分和控制部分,具体是指JSP页面,以及对客户请求进行处理的自定义Action等部分。
2.2 数据访问层设计
Hibernate实现数据访问层,访问层(DAO层)主要完成对数据库的访问,系统中DAO类实现了相应的接口。
2.3 业务逻辑层设计
在业务逻辑中主要包含了业务实体、业务逻辑以及Spring配置文件等内容,ApplicationContext.xml是Spring框架的配置文件,通过这个配置文件可以将系统中的各个组件装配起来,在运行期注入组件之间的依赖关系。
3 系统总体设计
图2 系统功能模块图
系统主要包括以下几大模块:在线测评模块、在线竞赛模块、讨论模块、编译运行模块、后台管理模块,系统功能模块图如图2所示。
在线测评模块:主要实现用户在线提交代码,查看题库,查看排名,查看状态等功能。
在线竞赛模块:主要实现在线参加竞赛,查看并提交赛题等功能。
讨论模块:主要实现用户发帖等功能让用户相互讨论。
编译运行模块:该模块是系统的核心,主要实现恶意代码拦截,并发编译运行,自动测评等功能。
后台管理模块:主要实现用户管理、题库维护管理、赛题管理、分析管理、权限管理等功能。
4 系统的实现方法
4.1 数据库连接池
考虑到用户登录和在线测试提交高峰,大量的访问数据库所带来的负载,系统使用了连接池,将由连接池来管理相关的数据库连接,减少对数据库连接操作。出于最佳性能和稳定性考虑使用了第三方开放源代码的JDBC连接池C3P0。C3P0在从连接池中获取和返回连接的时候,采用了异步的处理方式,使用一个线程池来异步的把返回关闭了(没有真正关闭)的连接放入连接池中。这样就意味着,我们在调用了从C3P0获得的连接的close方法时,不是立即放回池中,而是放入一个事件队列中等待C3P0内部的线程池顺序的处理。
4.2 编译运行处理
编译运行是在线测评系统的核心模块,该模块接受用户提交的各语言代码后系统自动编译及运行,然后根据标准答案对比判断用户提交的正确性。编译系统给出相应的状态信息返回给用户:通过(AC)、答案错误(WA)、时间超过(TLE)、超过输出限制(OLE)、超过内存(MLE)、运行时错误(RE)、格式错误(PE)、或是编译错误(CE),同时返回程序使用的内存、运行时间等信息。编译运行解决的关键问题如图3所示。
4.2.1 代码安全检查
考虑到用户提交的代码可能存在一些非法恶意代码,可能影响系统正常工作或者破坏服务器,因此用户在提交代码时系统首先对代码进行安全检查,过滤一些恶意代码防止破坏服务器,从而影响了网站的正常运行。
4.2.2 编译运行处理
系统接受用户提交代码并运行编译模块,记录编译后的状态,编译成功后系统自动获取待测试数据,然后运行程序得出结果后与标准答案比较并记录状态。编译运行处理流程图如图3所示。
4.2.3 并发处理
系统考虑到多个用户同一时刻提交代码存在的编译运行瓶颈问题,系统为每个编译运行开销一个独立的线程,由编译运行线程控制模块进行合理的调度与分配,实现多任务同时运行。考虑到java运行类名和文件名相同,每个编译任务都新建一个文件夹,所有文件均存放在此文件夹中,避免文件名重复问题。
5 结束语
经测试,本系统在配置为Intel Xeon E5606CPU,4G内存的服务器上,可同时运行50个编译任务。一台服务器可满足一个教学班或者一个集训队的实验、训练、比赛需要。后续将继续研究提高其并发能力的算法,丰富训练题库,优化用户界面,提高软件的易用性。
参考文献:
[1] 康海燕,樊孝忠,汤世平.基于J2EE的在线测评系统的研究与设计[J].开发研究与设计技术,2004(13).
[2] 李春旺.网络环境下学术信息的开放存取[J].中国图书馆学报,2005(155).
[3] 瞿红英,王波.基于C#.NET的在线编译方法的应用与研究[J].两化金融,2010(10).
[4] 胡鹏基.于嵌入式技术的多功能汽车导航系统[J].电脑知识与技术,2010(21).
[5] 王娟.基于Online Judge的高级语言程序设计课程教学改革[J].吉林省教育学院报,2012(10).
[6] 赵磊,吴王培,寥彬.基于ACM/ICPC在线测评系统设计[J].电脑知识与技术,2013(22).
[7] 陈星.程序设计作业批改的几个思考[J].信息与电脑,2013(22).endprint
4.2 编译运行处理
编译运行是在线测评系统的核心模块,该模块接受用户提交的各语言代码后系统自动编译及运行,然后根据标准答案对比判断用户提交的正确性。编译系统给出相应的状态信息返回给用户:通过(AC)、答案错误(WA)、时间超过(TLE)、超过输出限制(OLE)、超过内存(MLE)、运行时错误(RE)、格式错误(PE)、或是编译错误(CE),同时返回程序使用的内存、运行时间等信息。编译运行解决的关键问题如图3所示。
4.2.1 代码安全检查
考虑到用户提交的代码可能存在一些非法恶意代码,可能影响系统正常工作或者破坏服务器,因此用户在提交代码时系统首先对代码进行安全检查,过滤一些恶意代码防止破坏服务器,从而影响了网站的正常运行。
4.2.2 编译运行处理
系统接受用户提交代码并运行编译模块,记录编译后的状态,编译成功后系统自动获取待测试数据,然后运行程序得出结果后与标准答案比较并记录状态。编译运行处理流程图如图3所示。
4.2.3 并发处理
系统考虑到多个用户同一时刻提交代码存在的编译运行瓶颈问题,系统为每个编译运行开销一个独立的线程,由编译运行线程控制模块进行合理的调度与分配,实现多任务同时运行。考虑到java运行类名和文件名相同,每个编译任务都新建一个文件夹,所有文件均存放在此文件夹中,避免文件名重复问题。
5 结束语
经测试,本系统在配置为Intel Xeon E5606CPU,4G内存的服务器上,可同时运行50个编译任务。一台服务器可满足一个教学班或者一个集训队的实验、训练、比赛需要。后续将继续研究提高其并发能力的算法,丰富训练题库,优化用户界面,提高软件的易用性。
参考文献:
[1] 康海燕,樊孝忠,汤世平.基于J2EE的在线测评系统的研究与设计[J].开发研究与设计技术,2004(13).
[2] 李春旺.网络环境下学术信息的开放存取[J].中国图书馆学报,2005(155).
[3] 瞿红英,王波.基于C#.NET的在线编译方法的应用与研究[J].两化金融,2010(10).
[4] 胡鹏基.于嵌入式技术的多功能汽车导航系统[J].电脑知识与技术,2010(21).
[5] 王娟.基于Online Judge的高级语言程序设计课程教学改革[J].吉林省教育学院报,2012(10).
[6] 赵磊,吴王培,寥彬.基于ACM/ICPC在线测评系统设计[J].电脑知识与技术,2013(22).
[7] 陈星.程序设计作业批改的几个思考[J].信息与电脑,2013(22).endprint
4.2 编译运行处理
编译运行是在线测评系统的核心模块,该模块接受用户提交的各语言代码后系统自动编译及运行,然后根据标准答案对比判断用户提交的正确性。编译系统给出相应的状态信息返回给用户:通过(AC)、答案错误(WA)、时间超过(TLE)、超过输出限制(OLE)、超过内存(MLE)、运行时错误(RE)、格式错误(PE)、或是编译错误(CE),同时返回程序使用的内存、运行时间等信息。编译运行解决的关键问题如图3所示。
4.2.1 代码安全检查
考虑到用户提交的代码可能存在一些非法恶意代码,可能影响系统正常工作或者破坏服务器,因此用户在提交代码时系统首先对代码进行安全检查,过滤一些恶意代码防止破坏服务器,从而影响了网站的正常运行。
4.2.2 编译运行处理
系统接受用户提交代码并运行编译模块,记录编译后的状态,编译成功后系统自动获取待测试数据,然后运行程序得出结果后与标准答案比较并记录状态。编译运行处理流程图如图3所示。
4.2.3 并发处理
系统考虑到多个用户同一时刻提交代码存在的编译运行瓶颈问题,系统为每个编译运行开销一个独立的线程,由编译运行线程控制模块进行合理的调度与分配,实现多任务同时运行。考虑到java运行类名和文件名相同,每个编译任务都新建一个文件夹,所有文件均存放在此文件夹中,避免文件名重复问题。
5 结束语
经测试,本系统在配置为Intel Xeon E5606CPU,4G内存的服务器上,可同时运行50个编译任务。一台服务器可满足一个教学班或者一个集训队的实验、训练、比赛需要。后续将继续研究提高其并发能力的算法,丰富训练题库,优化用户界面,提高软件的易用性。
参考文献:
[1] 康海燕,樊孝忠,汤世平.基于J2EE的在线测评系统的研究与设计[J].开发研究与设计技术,2004(13).
[2] 李春旺.网络环境下学术信息的开放存取[J].中国图书馆学报,2005(155).
[3] 瞿红英,王波.基于C#.NET的在线编译方法的应用与研究[J].两化金融,2010(10).
[4] 胡鹏基.于嵌入式技术的多功能汽车导航系统[J].电脑知识与技术,2010(21).
[5] 王娟.基于Online Judge的高级语言程序设计课程教学改革[J].吉林省教育学院报,2012(10).
[6] 赵磊,吴王培,寥彬.基于ACM/ICPC在线测评系统设计[J].电脑知识与技术,2013(22).
[7] 陈星.程序设计作业批改的几个思考[J].信息与电脑,2013(22).endprint