基于Struts的在线考试系统的设计与实现
李爱华
(西南大学育才学院,重庆 401524)
摘 要: 本文介绍了如何采用Struts框架技术结合UML设计和实现一个在线考试系统。本文首先给出了系统的需求分析,用例模型及软件结构图,其次给出了主要功能模块的MVC框架设计,最后介绍了一些关键问题的解决方案和实现代码。
关键词: 在线考试系统;Struts;UML;MVC;JSP
中图分类号:TP311 文献表示码:A
DESIGN AND IMPLEMENTATION OF ONLINE EXAMINATION SYSTEM BASED ON STRUTS
Li Aihua
(Southwest University Yucai Colledge, Chongqing, 401524)
Abstract:
This thesis presents how to design and implement an online examination system by using such technologies
and tools as Struts, MVC (Model, view and controller), UML (Unified modeling language). The thesis first analyses the requirements of online examination system, shows the Use Case Model, Software Structure Diagrams of the system. Then the thesis presents the design of View, Model and Controller of major module. Furthermore, some revolutions are given to somes difficulties.
key words: Online examination system; Struts; UML; MVC; JSP
0 引言
在线考试系统的软件开发是现阶段研究开发的一个热点。采用UML建模已经成为面向对象分析和设计的一种趋势,作为基于MVC模式的Web应用的典型体现,Struts给出了一套框架工具,使开发人员在此框架的支持下就能够快速高效的构建不同的应用。本文介绍了如何将UML与Struts结合在一起,开发一个功能较完备的在线考试系统,对于开发企业级应用有一定的参考价值。
1 需求分析与系统设计
在线考试系统是网络教学的一个重要组成部分,它可以提供一种学生对所学课程进行自我评价的手段,从而找出差距进行重点学习,也可以为教师提供一种评价学生对课程掌握程度的手段,为今后教学提供具有重要参考价值的各种数据。 1.1 系统结构与性能分析
采用基于B\\S模式的三层体系结构。客户端为标准浏览器,中间层为应用服务器,底层为数据库等服务器。采用Struts框架技术,将MVC(Model-View-Controller)模式应用于J2EE应用开发。Struts是基于JSP Model 2之上的,它的底层机制就是MVC。在Struts框架中,对模型(Mode)、视图(View)和控制器(Controller)都提供了现成的实现组件。模型由实现业务逻辑的JavaBean或EJB组件构成,控制器r由ActionServlet和Action来实现,视图由一组JSP文件构成,此外,通常把Struts框架中的ActionForm也划分到视图部分。Struts框架利用ActionForm来进行视图和控制器之间表单数据的传递。
由于采用纯Java技术,使得系统具有很好的可移植性,可以很容易移植到其它操作系统平台上,如Salaris,Linux等。此外,作为一个比较完备的在线考试平台,系统在性能上具备了准确性、灵活性、易用性、低负荷性和安全性等特点。 1.2 需求分析
一个完备的在线考试系统要能够充分利用网络优势,适合网络教学的考试模式和考试环境;有效管理和使用网络资源,更好地指导学生进行学习;形成一套完整的考试体系和质量评价体系。要
1
实现这一要求,除了需要具备一套成熟的题库,还应具备以下功能。
1) 基本的题库管理功能,实现试题添加、删除、修改、查询等操作;试题不只有客观题,还
有主观题,要能囊括各科组卷时所要求的试题类型。
2) 灵活的组卷功能,组卷方式有手动组卷和自动组卷方式两种。自动组卷要实现随机选择试
题功能,随机选题更能体现试卷的客观性,在满足必要的条件下,由系统随机确定选中哪些项目。检索及成卷的条件要能够任意组合,速度要尽量快。
3) 完善的在线考试功能。在线考试时,一方面可以监控学生答卷情况,另一方面若出现断电
等意外,系统要给出妥善的安置。
4) 评分时,要求客观题由系统自动评分,主观题由教师手动评分。 5) 完备的成绩统计和成绩查询功能。 6) 保存考试或练习中错误试题的功能。 1.3 UML建模
正确地捕获需求,对于开发成功的系统并保持其长久的生命力是必不可少的,在UML中,用例建模提供了一种简单、但功能强大的捕获需求的方法。在用例模型中,参与者是用例的主要发起者,并代表系统外部的实体。用例可以认是为获得对参与者有用的东西,而需要执行的步骤序列。在线考试系统的用例模型如图1所示。
<
图1 系统用例模型
2
1.4
系统软件结构及功能模块划分
根据前面系统的分析,划分了如图2所示的三大模块及子模块。三大模块分别是:学生模块、教师模块、管理员模块。
教师模块主要由试题管理、试卷管理以及阅卷评估几部分构成。主要实现试题的添加、查询和维护功能,自动组卷和手动组卷功能,试卷的查询和维护功能,阅卷以及成绩统计的功能。
学生模块主要功能有在线考试、在线练习以及自我诊断几部分。主要实现在线考试、在线练习、成绩查询、错题分析等功能。
管理员模块主要由系统管理和辅助管理两部分组成。系统管理主要包括对一些基本数据的管理,对教师、学生、年级以及学科资料的管理。辅助管理主要包括试卷分配、考场监控、日志管理以及系统设置。试卷分配是指考试之前将指定的试卷分配给要考试的班级,以及在阅卷之前将指定的试卷分配给指定的老师批阅。系统设置是指管理员有权设置受限的或不受限的IP地址的范围,还可以设置系统是否开放,是否对教师开放,对哪些教师开放以及是否对学生开放。
在系统的实现部分,详细介绍试卷管理子模块的实现,因此需要将试卷管理子模块的功能细化。试卷管理子模块,主要包括组卷方案管理、组卷和试卷维护。组卷方案设计主要是对学科、试题类型、难度系数及试题数量等内容进行设定,并能够检查根据这些条件提取题目时题库内容能否满足要求,若不能满足要求,应提示修改组卷方案。进行组卷之前,教师必须按自己的意愿设计组卷方案。设计好组卷方案后,教师可以进行自动组卷。自动组卷,一般是先制定组卷方案或者在现成的组卷方案中选择一个,然后系统完全根据组卷方案自动进行组卷。除了可以选择组卷方案自动组卷之外,也可以采用手动组卷方式进行组卷,即利用现有的试题库,人工选择试题编制试卷。同时,对于已组试卷,教师可以进行查询并维护。
在线考试系统学生模块教师模块管理员模块在线考试在线练习自我诊断阅卷评估试卷管理试题管理辅助管理系统管理
图2 系统软件结构图
2 系统的实现
2.1
开发平台
1. Web服务器:Tomcat 5.0
Tomcat是一个免费的开源的Serlvet容器。在Tomcat中,应用程序的部署很简单,只需将WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压。
2. 数据库:SQL Server 2000
从数据库方面来看,本系统数据量虽然不是太大,但要求有相对较高的安全性。再加上由于在考试(测试)进行中要进行大量数据读写操作,在效率方面要求很高。综合以上因素,本系统采用SQL Server 2000作为后台。
3. 开发工具:JBuilder+Dreamweaver MX
本系统的服务器端程序由JBuilder开发,JSP页面由Dreamweaver MX开发。
3
2.2
试卷管理模块的实现
限于篇幅,本文只介绍试卷管理模块的实现。试卷管理模块MVC各部分的实现如下: 1、视图的实现
ActionForm类和JSP页面共同负责视图的实现,主要用于视图和控制器之间的连接。ActionForm Bean实现了HTML表单提交时,使表单中的数据添装到这个JavaBean中,表单中每一个字段都对应bean中一个属性。当表单被提交时,bean的属性被自动添装,此外表单bean还支持对bean的属性进行自动数据验证和复位。试卷管理模块的ActionForm Bean如表1所示。
表1 试卷管理模块中的ActionForm Bean 类名 FaActionForm SitiActionForm EpActionForm 说明 FaActionForm传递模块视图中的数据到FaAction SitiActionForm临时保存试题信息 EpActionForm传递模块视图中的数据到EpAction SitinumActionForm SitinumActionForm临时保存方案细节信息 2、控制器实现 Action类负责控制器的实现,主要用于控制器和模型之间的连接。试卷管理模块中的Action类如表2所示。
表2 试卷管理模块中的Action类
类名 FaAction 说明 FaAction接收FaActionForm中的数据以及一些请求中的参数并调用模型的业务实现类,完成有关组卷方案以及组卷的处理请求和产生响应的任务。 EpAction接收EpActionForm中的数据以及一些请求中的参数并调用模型的业务实现类,完成有关试卷的处理请求和产生响应的任务。 EpAction 3、模型的实现
JavaBean类和实用类Db负责模型的实现。实用类Db,用于负责建立与数据库的连接并封装了操作数据库的方法。JavaBean类用于封装业务逻辑,试卷管理模块的JavaBean类如表3所示。
表3试卷管理模块中JavaBean类 类名 说明 FaBean实现有关方案和组卷的具体逻辑,操作数据库。本模块用到的方法有:doSearchFa()、doAdd()、doDelete()、doAddEp()、doAuto()、doManuAdd()、doManuRequest()、doViewManuEp()、addManuEp()、doSitiDel()。 EpBean实现与试卷有关的具体的逻辑,操作数据库。本模块用到的方法有doSearch()、viewEp()、delEp()。 FaBean EpBean 2.3
一些关键问题的实现 1、考场监控问题的实现
当学生登录考试系统以后,点击在线考试时,页面显示待考试卷名称列表,学生选定待考的试卷名称,点击其后的进入按钮,进入该试卷的考试环境。此时,将学生的考试信息,如:学号、姓名、试卷、IP地址、考生状态等记录到数据库中。部分代码如下:
//当学生进入考场环境时,记录学生的信息到数据库的tbl_userexam表
public void saveUserInfo(UserActionForm form, HttpServletRequest request, HttpServletResponse response){
String ip = request.getRemoteAddr();
4
String examName = request.getParameter(\
String sql =\tbl_userexam values('\\\
DB db = new DB(); db.executeInsert(sql); db.closeConn(); }
考试进入考试环境时,考场监控系统同时启动。系统管理员管理员可以查看考生的学号、姓名、试卷、IP地址、考生状态。考生状态有未考试、考试中和考试完三种。当考生进入考试环境仍未进行考试时,为未考试状态,设定为”0”;当考生调出试卷,开始考试时,修改为考试中状态,设定为”1”;当考生提交答案时,修改为考试完状态,设定为”2”。通过设置考场监控,还可以看到参加这个考试的学生情况,可以了解参加此次考试的学生名单以及标识缺考学生名单。
2、考试计时问题的解决与实现
在考试系统的开发过程中,有一些需要着重考虑的重要细节,如考试过程中的时间控制。如何灵活地进行考试,并且严格地执行考试时间,成了考试进行中的重中之重。
采用服务器端计时。系统管理员设置开始时间和结束时间,开始时间和结束时间取自服务器端。服务器把开始时间和结束时间传给客户,客户端利用javascipt进行计时并在考试进行中禁止考生刷新页面。禁止考生刷新页面可以通过全屏考试页面和屏蔽鼠标右键来实现。
由于开始考试时间和考试结束时间均以服务器端的时间为标准。客户端无权控制服务器,就算故意更改客户端的计算机时钟,也不存在考试时间被更改的可能。
3、意外中断考试的处理
作为B/S系统,不得不考虑客户端意外或主观中断考试的情况。譬如意外死机造成的考试意外中断情况,考生在遇到难题时,故意关闭系统,等思考好后再登录系统继续考试等主观中断情况。
针对这一问题,如果发生这种情况,不可能让考生重新考试,最好的方式就是能够经过处理,重新登录,继续刚才的考试。要达到这一目的,就要求系统在整个考试进行中能够及时记录该学生当前的答题情况,在这里我们设计系统定时自动交答案。譬如系统每隔1分钟,自动提交考生答题情况到数据库,期间新增的答案添加到数据库,若有修改的答案,就保存修改的当前状况。这样就保证了,当考生断线后,再次登录的时候,是继续刚才的考试,而非重新开始考试。
要实现系统每隔1分钟自动提交考生答题情况,必须要保证提交答案的时候页面不能被刷新,倘若每隔1分钟就刷新一次页面,会造成客户端计时器的功能紊乱,以及不停的刷新页面造成考生无法正常做答题目。因此在处理定时提交答案的问题上,需要采用异步通讯。在此采用Ajax技术,它专用于异步通讯,可以解决不刷新页面就实现定时保存答案。微软的space.live.com和google的地图网站都是用了这个技术。
4、系统安全性问题的实现
任何一个系统的实现,都需要有安全策略。在线考试系统也要采取一定的安全访问控制来实现重要资源信息的保护。为了实现对各个功能模块的安全管理,在该系统中采用的安全设计主要分为访问权限控制、登录日志管理、以及受限IP设置这几个部分,下面进行一一讲述。
1) 访问权限控制
除了登陆时对用户信息,IP以及系统是否开放进行检验外,系统中使用java中的Servlet过滤器来实现访问权限的控制。当用户请求某个Web页面的时候(这个Web页面通常同某个业务功能相关联),可以使用过滤器截获这个请求,然后,判断这个用户是否具备对请求资源的访问权限。如果是,那么,过滤器可以把这个请求放过去,什么都不做,否则,过滤器可以重定向到某个页面,告诉用户不能访问的原因,或者直接抛出异常。 系统定义了4个过滤器,sysFilter应用于系统管理员专有的URL;jiaoFilter应用于教务管理员专有的URL;teaFilter应用于教师专有的URL;stuFilter应用于学生专有的URL。要想让Filter起作用必须要在web.xml中进行配置,以下是sysFilter的代码片段:
5