附件5:
毕业论文(设计)外文资料译文
论文题目 在线考试系统 .
学生姓名: 年级(学号): .
二级学院: 专业:
指导教师: 职称: .
填表日期: 20 年 月 日
杭 州 师 范 学 院 教 务 处 制
附件6:
毕业论文(设计)开题报告
论文题目 在线考试系统 .
学生姓名: 年级(学号): .
二级学院: 专业:
指导教师: 职称: .
填表日期: 20 年 月 日
附件7:
毕业论文(设计)评审答辩成绩表
二级学院名称(盖章): 专业:计算机科学与技术
(后附“毕业论文〈设计〉答辩纪录”)
附页:毕业论文(设计)答辩纪录
毕业论文(设计)文献综述
论文题目: 基于J2EE架构的在线考试系统
学生姓名: 年级(学号):
二级学院: 专业:
指导教师: 职称: .
填表日期: 20 年 月 日
目录
摘要:3:3:3
Abstract:4
1 引言55
2 在线考试系统构架55
2.1 在线考试系统一般需求分析55
2.2 当前在线考试系统现状分析66
2.3 基于J2EE的在线考试系统架构介绍及拥有的优势66
2.3.1 结构总体介绍66
2.3.2 客户层组件77
2.3.2.1 Applets7
2.3.2.2 应用程序客户端77
2.3.3 WEB层组件77
2.3.4 业务层组件77
2.3.5 企业信息系统层88
2.3.6 J2EE架构的优势88
2.3.7 Visual Basic .NET4
2.3.8 SQL Server 20005
2.39 Web服务5
2.4.0 Web服务的概念5
2.4.1 Web服务的优点6
2.4.4NET对Web服务的支持6
2.4.3 考试系统的运行平台6
2.4.4硬件平台6
2.4.5软件平台6
第三章 考试系统的数据库设计、构成模块及特点7
3.1 考试系统的数据库设计7
3.2考试系统的构成模块9
3 测试系统具体设计99
3.1 基于J2EE的E-nettest在线考试系统构架概要99
3.1.1 E-nettest系统结构99
3.1.2 E-nettest数据流程1010
3.2 E-nettest考试系统环境设置1111
3.3 E-nettest总体功能介绍1111
3.4 E-nettest模块设计1111
3.5 E-nettest数据库设计1313
4 关键技术1414
4.1 tomcat数据库连接池介绍与配置1414
4.2 applet数字签名技术1616
4.3 如何调用java外部程序1717
5 总结与展望1818
参考文献1919
基于J2EE架构的在线考试系统
摘要:
目前国内基于B/S、C/S结构的在线考试系统产品已经有许多,本文首先介绍了这些考试系统的形成和发展过程,大致结构。然后通过仔细分析,提出了目前的这些系统还存有系统更新和维护等种种弊端,仍不够成熟。基于对现有产品的思考,结合J2EE的成熟技术,我们想到了是否可以将该技术运用在在线考试系统中,提出了一个基于J2EE架构的在线考试系统。通过将该架构与已有结构的在线考试系统进行比较,分析了该架构的优势,重点介绍了该框架的整体构造以及相关的概念和技术。并通过设计了一个基于J2EE架构的在线考试系统对该架构做了一个比较深入的剖析。最后,对J2EE技术做了一个总结性的展望,认为该技术有着良好的发展空间和广阔的前景。
关键词:J2EE,在线考试系统,b/s,JavaBean,jsp,数据池
Abstract:
At present, there are many b/s, c/s structure examination systems based on-line, this paper first introduced most of these systems’ formed and developed process, and structures. Then, analysis these systems, and pointed out that there still have many defects about them, just like the update and the service to these systems .Thinking based on these produces, and now the J2EE technical is becoming mature, we thinking about is this technical can be used in examination systems, so we mentioned a on-line system based on J2EE structure. Compared to other systems, and also analysis its’ advantages, we introduced this structure’s construction and technical as emphasize. Finally, make J2EE technical a expectation and it can progress quiet great and have a nice foreground.
Keywords: J2EE, Examination system on-line, b/s, JavaBean, jsp, data pool
1 引言
现阶段,学校与社会上的各种考试大都采用传统的考试方式,在此方式下,组织一次考试至少要经过五个步骤,即出卷、考生考试、阅卷、成绩评估和试卷分析。显然,随着考试类型的不断增加及考试要求的不断提高,教师的工作量将会越来越大,并且其工作将是一件十分繁琐和非常容易出错的事情,可以说传统的考试方式已经不能适应现代考试的需要。随着计算机应用的迅猛发展,网络应用不断扩大,如远程教育和虚拟大学的出现等等,且这些应用正逐步深入到千家万户。人们迫切要求利用这些技术来进行在线考试,以减轻教师的工作负担及提高工作效率,从而提高了考试的质量,使考试更趋于公证、客观、激发学生的学习兴趣。例如目前许多国际著名的计算机公司所举办的各种认证考试绝大部分采用这种方式。
为了适应新形势的发展,目前国内有很多公司团体研究开发了基于Web的考试系统。而我们知道网络应用软件运行的模式主要有二类:Client/Server模式、Browser/Server模式。前者主要的缺点是维护、升级较麻烦,后者是近几年伴随Internet迅速发展而应运而生的一种技术,在这种模式下,客户端需要一个浏览器,服务器端是Web Server ,而Web Server是与数据库和应用服务器的紧密结合,可见,这种模式是瘦客户端,即对客户端的要求不高.如今,很多部门的业务系统、企业的MIS系统纷纷采用这种模式,它的主要优点是便于扩充应用、升级维护简便。然而,随着技术的发展,更先进的模式纷纷被提出并时兴起来,其中J2EE就是比较成熟的一种。
2 在线考试系统构架
2.1 在线考试系统一般需求分析
在线考试系统应具有以下要求:
1)由于考试对应的是特定的对象,所以系统需要经过有效的身份验证才可以登陆。并且系统需要有可以管理会话的功能。以便在考试过程中全程跟踪考试状态。
2)系统的权限一般分为两种:管理员和学生。不同的身份使用不同的权限和功能。
3)管理员需要对试题和考生进行有效的管理,负责试题的录入及更新和修改,对试题的分类,每次考试前,需要对试场环境和考生状态进行考前初始化工作。要注意的是, 鉴于考试环境一般为机房,考试者之间的距离很近,为了在线考试做到规范,对于每个应试者来说,试卷的试题和题量都应是相同的,但试题并不相同。
系统要有良好的试卷上传和回收功能,确保信息传送的正确性。系统要有一个友善的界面,确保考生考试的顺利进行。因为试卷中的主观题需要老师批改,可能需要一段时间才能查询到成绩。但如果试卷是由客观题型组成的,考生就可以在考试结束后查询到自己的成绩了。系统提供对考生成绩的统计和查询等管理功能。系统应具有良好的安全性管理。
2.2 当前在线考试系统现状分析
当前考试系统中,仍有许多是基于c/s模式的,每一次伴随着系统的升级,都要在每个客户端更新软件,耗时耗力。可喜的是,随着技术的发展,基于b/s模式的在线考试系统越来越多,逐渐占据了主导地位。它克服了c/s模式下的许多缺点,从传统的基于C/S模式的考试系统转变到基于B/S模式的考试系统,可以使用户在任何一台电脑上,只要可以上网,就可以使用该服务,大大简化了操作,为用户提供了方便。另一方面,也为教师的管理和批阅工作提供了方便,提高了效率。但是据我多方的观察和研究,发现大多数的在线考试系统都是采用基于页面的模式开发,每个页面中都包含了要用到的所有功能逻辑,导致代码重复率高,结构不够清晰,维护升级起来也很费时间和人力。鉴于这种情况,所以我们将J2EE的概念加入到在线考试系统中来,使得该系统更易于升级和维护。
2.3 基于J2EE的在线考试系统架构介绍及拥有的优势
2.3.1 结构总体介绍
J2EE使用多层的分布式应用模型,应用逻辑按功能划分为组件,各个应用组件根据他们所在的层分布在不同的机器上。事实上,sun设计J2EE的初衷正是为了解决两层模式(client/server)的弊端,在传统模式中,客户端担当了过多的角色而显得臃肿,在这种模式中,第一次部署的时候比较容易,但难于升级或改进,可伸展性也不理想,而且经常基于某种专有的协议――通常是某种数据库协议。它使得重用业务逻辑和界面逻辑非常困难。现在J2EE 的多层企业级应用模型将两层化模型中的不同层面切分成许多层。一个多层化应用能够为不同的每种服务提供一个独立的层,以下是 J2EE 典型的四层结构:
运行在客户端机器上的客户层组件运行在J2EE服务器上的Web层组件运行在J2EE服务器上的业务逻辑层组件运行在EIS服务器上的企业信息系统(Enterprise information system)层软件
图1 J2EE 典型的四层结构
2. 3.2 客户层组件
J2EE应用程序可以是基于web方式的,也可以是基于传统方式的。J2EE规范中指出,客户层组件有两种,它们是应用客户端程序和applets客户端。
2.3.2.1 Applets
从Web层接收的一个Web页面可以包含内嵌的applet。一个applet是一个用Java编程语言编写的小的客户端应用程序,它在安装在Web浏览器中的Java虚拟机中运行。然而,为了在Web浏览器中成功地运行applet,客户端系统很可能需要Java插作和安全策略文件。
Web组件是用来建立一个Web客户端程序的首选的API,因为这样在客户端系统中就不需要插件和安全策略文件。同样的,使用Web组件可以有效地改善应用程序设计,因为它们提供了一个将应用程序设计和Web页面设计有效分离的途径。Web页面的设计者可以不必关心Java编程语言的语法就能很好地完成自己的工作。
2.3.2.2 应用程序客户端
一个J2EE应用程序客户端运行在客户端机器上,它使得用户可以处理需要比标记语言所能提供的更丰富的用户界面的任务。具有代表性的是用Swing或抽象窗口工具包(AWT)API建立的图形用户界面(GUI),但是一个命令行界面也是当然可能的。
应用程序客户端直接访问运行在商业层的enterprise bean。然而,如果应用程序需要授权, 一个J2EE应用程序客户端可以打开一个HTTP连接来与一个运行在Web层的servlet建立通信。
2.3.3 WEB层组件
J2EE web层组件可以是JSP 页面或Servlets.按照J2EE规范,静态的HTML页面和Applets不算是web层组件。
正如下图所示的客户层那样,web层可能包含某些 JavaBean 对象来处理用户输入,并把输入发送给运行在业务层上的enterprise bean 来进行处理。
图2 Web层组件
2.3.4 业务层组件
业务层代码的逻辑用来满足银行,零售,金融等特殊商务领域的需要,由运行在业务层上的enterprise bean 进行处理. 下图表明了一个enterprise bean 是如何从客户端程序接收数据,进行处理(如果必要的话), 并发送到EIS 层储存的,这个过程也可以逆向进行。有三种企业级的bean: 会话(session) beans, 实体(entity) beans, 和消息驱动(message-driven) beans。 会话bean 表示与客户端程序的临时交互. 当客户端程序执行完后, 会话bean 和相关数据就会消失. 相反, 实体bean 表示数据库的表中一行永久的记录。当客户端程序中止或服务器关闭时, 就会有潜在的服务保证实体bean 的数据得以保存.消息驱动 bean 结合了会话bean 和 JMS的消息监听器的特性, 允许一个业务层组件异步接收JMS 消息。
图3 业务层组件
2.3.5 企业信息系统层
企业信息系统层处理企业信息系统软件包括企业基础建设系统例如企业资源计划 (ERP), 大型机事务处理, 数据库系统,和其它的遗留信息系统. 例如,J2EE 应用组件可能为了数据库连接需要访问企业信息系统。
2.3.6 J2EE架构的优势
J2EE为搭建具有可伸缩性、灵活性、易维护性的系统提供了良好的机制:
1)保留现存的IT资产: 由于技术需求的不断更新,在线考试系统必须可以适应新的要求,利用已有的对考试系统方面的投资,而不是重新制定全盘方案。这样,一个以渐进的(而不是激进的,全盘否定的)方式建立在已有考试系统之上的服务器端平台机制是学校和单位所需求的。J2EE架构可以充分利用用户原有的投资,这之所以成为可能是因为J2EE拥有广泛的业界支持和一些重要的'企业计算'领域供应商的参与。每一个供应商都对现有的客户提供了不用废弃已有投资,进入可移植的J2EE领域的升级途径。由于基于J2EE平台的产品几乎能够在任何操作系统和硬件配置上运行,现有的操作系统和硬件也能被保留使用。
2)高效的开发: J2EE允许客户把一些通用的、很繁琐的服务端任务交给中间件供应商去完成。这样开发人员可以集中精力在如何创建商业逻辑上,相应地缩短了开发时间。高级中间件供应商提供以下这些复杂的中间件服务:
① 状态管理服务 -- 让开发人员写更少的代码,不用关心如何管理状态,这样能够更快地完成程序开发。
② 持续性服务 -- 让开发人员不用对数据访问逻辑进行编码就能编写应用程序,能生成更轻巧,与数据库无关的应用程序,这种应用程序更易于开发与维护。
③ 分布式共享数据对象服务 -- 让开发人员编制高性能系统,极大提高整体部署的伸缩性。
3)支持异构环境: J2EE能够开发部署在异构环境中的可移植程序。基于J2EE的应用程序不依赖任何特定操作系统、中间件、硬件。因此设计合理的基于J2EE的程序只需开发一次就可部署到各种平台。由于考试系统很多时候需要提供给许多不同的学校和单位使用,这些学校和单位的软件硬件环境存在有较大的差异,所以能支持异构环境这点就十分关键。同时J2EE标准也允许客户订购与J2EE兼容的第三方的现成的组件,把他们部署到异构环境中,节省了由自己制订整个方案所需的费用。
4)伸缩性: 学校和单位必须要选择一种服务器端平台,这种平台应能提供极佳的可伸缩性去满足可能不断增多的在他们系统上进行考试的大批新的考生。基于J2EE平台的应用程序可被部署到各种操作系统上。例如可被部署到高端UNIX与大型机系统,这种系统单机可支持64至256个处理器。(这是NT服务器所望尘莫及的)J2EE领域的供应商提供了更为广泛的负载平衡策略。能消除系统中的瓶颈,允许多台服务器集成部署。这种部署可达数千个处理器,实现可高度伸缩的系统,满足未来系统升级和规模扩大的需要。
5)稳定的可用性: 虽然在线考试系统不象一般企业的服务器端平台必须能全天候运转以满足公司客户、合作伙伴的需要,但起码必须保证考生考试的这段时间内不发生意外停机等故障,从而影响到考生考试。J2EE部署到可靠的操作环境中,他们支持长期的可用性。一些J2EE部署在WINDOWS环境中,客户也可选择健壮性能更好的操作系统如Sun Solaris、IBM OS/390。最健壮的操作系统可达到99.999%的可用性或每年只需5分钟停机时间。这是对在线考试系统,特别对于那些比较重要的考试的理想选择。
该考试系统用Microsoft Visual 进行开发,数据库采用SQL Server 2000。由于系统采用三层结构,即数据库服务器、Web服务器、客户浏览器,为了实现可用子网内的任何一台服务器作为数据库服务器的需求,本系统采用Web服务技术,即把Web服务装在Web服务器中,通过访问Web服务来进行数据库的访问。下面分别对Microsoft Visual 、SQL Server 2000和Web服务技术进行介绍。
2.1 Visual Basic .NET
Microsoft Visual 是 Microsoft Visual Basic 6.0 的后续版本,它是基于 .NET 框架直接创建的,因此可以使用所有的平台特性,并能够与其他 .NET 语言协同工作。
2.1.1 Visual Basic 6.0
Visual Basic 6.0 有限的面向对象的特性,特别是缺乏继承,使之不适合于开发面向对象的架构。正由于这一点,对于某些类型的开发,特别是大型、复杂应用程序的开发,与C++或Java开发人员相比,Visual Basic 6.0开发人员会处于不利的地位。另外,Visual Basic 6.0没有多线程能力;错误处理能力差,与其他语言如C++的集成能力差;对于基于Internet的应用程序,没有生动有效的用户界面等缺点。
2.1.2 Visual
Visual 对于IT业来说,它可能是一个小的前进,但是对VB开发人员来说,它是一个巨大的进步!Visual Basic .NET并不只是向核心技术添加和修改了技术特性的VB新版本,它打破了模式的框框!实际上它是一种新编程语言,基于新的核心技术——.NET范例。在Visual Basic .NET之中,技术变化是如此之多,以致VB开发人员可以与C#,C++和Java开发人员相竞争。
在许多方面Visual Basic .NET都与它以前的版本不同。它具有更高的一致性和类型安全级别。用Visual Basic .NET我们更容易写出控制性、可读性很高的代码。虽然它有时要求你习惯于那些编译时额外的检查,但它将在你测试和调试时,为你节约宝贵的时间。
的语法与VB 6.0已经有了根本性的差别,与其说是VB 6.0的升级,不如说是C#的Basic版本。由于采用了CLI的结构,将很难兼容以前的VB 6.0的代码,大量的VB代码无法顺利地转移到.NET上,不过开发人员仍然可以在.NET平台下,将原有的COM组件进行重新包装,形成.NET平台下的Web服务组件,而且.NET的整个平台、开发工具的高集成性和友好的开发环境还是会给开发人员留下深刻印象。在Java领域中,无论是Borland的JBuilder 6,还是Sun的Forte for Java,或是IBM的WebShpere Studio Application Developer、VisualAge for Java都无法达到VB. NET的生产效率。
2.2 SQL Server 2000
SQL Server是一个功能强大的后台数据库管理系统,它可以帮助各种规模的企业用来管理数据,以可伸缩性的商业解决方案、强大的数据仓库以及与Microsoft Office和Microsoft BackOffice的紧密集成为企业提供额外的商业便利,日益为广大用户所喜爱。到目前为止,SQL Server 2000是Microsoft公司推出的数据库管理系统的最新版本。它不但继承了原来版本的许多优点,而且又增加了很多更先进的功能。
Microsoft SQL Server 2000使用了最先进的数据库架构,具有完全的Web功能,通过对高端硬件平台以及最新的网络和存储技术的支持,可以为较大的Web站点和企业级的应用提供很好的解决方案。SQL Server 2000扩展了SQL Server 7.0版的性能,并增加了几种新的功能,使得用户能够更方便、更快捷地管理数据库和开发应用程序。因此它已成为大规模联机事务处理(OLTP)、数据仓库和电子商务应用程序的优秀数据库平台。
2.3 Web服务
随着Internet和网络化的日渐成熟,无论是属于单个组织的计算机还是属于多个组织的计算机都想通过Internet彼此交流。借助更基本的Internet通信协议,可能需要几个月的时间和大量的资本开发自己的系统。而且当使用该系统和另一个组织的系统进行通信时,两个系统之间的转换也许并不容易,甚至是不可能的,最后得到的只是一团糟。过去人们引入分布式架构系统以解决这个问题。大多数系统本身的缺点甚至妨碍了它们在企业范围内的部署,更别说在全球的部署。为此带来了Web服务。
2.3.1 Web服务的概念
从表面上看,Web服务就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。Web服务内在的含义是基于XML的通信流通过HTTP协议在一个公共网络(Internet)上传送。Web服务平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web 服务 ,只要我们可以通过Web服务标准对这些服务进行查询和访问。
2.3.2 Web服务的优点
Web服务最大的特性也许是使用XML支持的跨平台的兼容性。即使我们假设一个组织内部使用的都是相同的操作系统、软件等,我们也不可能期望其他的组织使用相同的设备。而Web服务不作此类的要求, 它不依赖于任何平台或公司。它的部分吸引力在于,不管是在Solaris,UNIX,Mac还是在Windows上部署Web服务,所有用户都可以连接并使用。这和一般Web站点是一样的,不必关心要访问的Web站点运行于什么平台,只要它能够正常工作就行。
Web服务需要使用一种平台中立的方法来描述数据和交换数据,为此它使用XML(可扩展标记语言)。XML使用标准化的文本格式以一种简单的方法格式化数据(无论数据有多复杂)。最初,开发人员对XML嗤之以鼻,认为它只不过是书写脚本的另一种方式而已。然而这些惯于从事数据库管理和开发的开发人员不久便意识到,XML是能在双方之间提供数据而无须依赖于专门方案的一种技术。
2.4 .NET对Web服务的支持
.NET从一开始就深深打上了Web服务技术的烙印,在它的市场推广活动中,无时无刻不凸显其作为Web服务的开发和部署平台的特征。可以说,.NET天生就是为Web服务准备的开发和部署平台。
.NET是一个全新的架构,它的整个平台、开发工具的高集成性和友好的开发环境给开发人员留下深刻印象。在Java领域中,任何一种语言都无法达到VS .NET的生产效率。开发工具是.NET的一大优势。.NET正是为进行基于Web服务模型的应用程序开发而度身定做的新一代开发工具和基本结构。.NET构建块服务、新增的.NET设备支持以及即将到来的.NET用户体验,使人们能够充分利用Web服务模型,如愿以偿地开发出新一代应用程序。
平台内建了对Web服务的支持,包括Web服务的构建和使用。与其它开发平台不同,使用.NET平台,你不需要其他的工具或者SDK就可以完成Web服务的开发了。.NET Framework本身就全面支持Web 服务,包括服务器端的请求处理器和对客户端发送和接受SOAP消息的支持。利用Visual ,你可以不必了解HTTP、XML、SOAP、WSDL等底层协议,同样能开发和使用Web服务。
2.5 考试系统的运行平台
2.5.1 硬件平台
Web服务器和数据库服务器可共用一台或分别用一台专用服务器或高档PC机,联网设备可采用交换机或HUB,带宽为10M--100M。
2.5.2 软件平台
操作系统服务器端采用Windows 2000 SERVER ,客户端采用Windows即均可。Web服务器
目前,市场上有很多Web服务器软件,如IIS、Netscape Enterprise Server、Apache等,各有千秋,其中微软的IIS 具有对系统硬件要求低、功能强、配置简便且与Windows 紧密集成等优点,比较适合各院校和中学的网络硬、软件环境,因此我们选用IIS 5.0。数据库服务器
数据库服务器与 Web服务器应有较紧密的结合,Windows 、IIS均为微软的产品,其数据库也有相应的产品,即SQL Server,所以我们选用SQL Server 2000 为数据库服务器。浏览器
IE浏览器(建议版本5.5以上)
第三章 考试系统的数据库设计、构成模块及特点
3.1 考试系统的数据库设计
考试系统离不开数据库系统的支持,不论是试题、答案,还是考生信息都需要存放在数据库中,而且数据库独立于程序而存在,具有较好的安全性。本系统使用的数据库软件为SQL Server 2000。首先建立一名为ksxt的数据库,主要表格介绍如下:
3.1.1 考生信息表(stuinfo)
该表主要存放考生的信息,其中Id表示考生的准考证号;Name表示考生的姓名;State表示考生状态,分为三种:已交卷、未交卷(正在考试中)、缺考。考生登录的时候输入准考证号,从该表中检查是否存在该准考证号,如果存在,显示该考生姓名,允许进入考试界面;否则显示“无此考生”。State字段有助于统计缺考人数。
3.1.2 各类试题表(xuanze,tiankong,panduan,chengxtk,chengxts,chengxsj)
主要包括选择题表、判断题表、概念填空题表、程序填空题表、程序调试题表、程序设计题表共6张表,每张表中存放了各类试题的题号和题目。下面以程序设计题表为例说明:
其中TH表示该试题在第几套题目中;XTH表示该试题的题号,即这套题目中的2个程序设计题中的第几题;TM表示该试题的题目描述;Ole字段存放的为考试时要读出来,解压,供考生下载的压缩文件。如果是选择题表,还有A、B、C、D四个字段分别表示该试题四个选项的内容。除了程序设计题以外,其他试题表没有Ole字段。之所以设TH字段,是因为试题是按套分的,每一套中又有若干题目。每套中的题目事先就定好的,但是每次抽到该套题目时,试题的顺序是打乱的,以减少出现一模一样试卷的概率。
3.1.3 考试信息表(testresult01—testresult99)
考试信息表共有99张,根据考生准考证号后两位来决定把该考生的考试信息放入哪张表中,比如该考生准考证号末两位为28,则放入表testresult28中。其中Id表示考生的准考证号;Xuanzth、pandth、Tiankth、Chengxtkth、Chengxtsth、Chengxsjth分别表示选择题、判断题、概念填空题、程序填空题、程序调试题、程序设计题的题号;Xuanzda、pandda、Tiankda、Chengxtkda、Chengxtsda、Chengxsjda分别表示选择题、判断题、概念填空题、程序填空题、程序调试题、程序设计题的正确答案。Lasttime用于记录考试时间,如果时间到了还没有交卷,则回收答案,停止考试。
3.1.4 回收表(reclaim,result)
回收表共有两张,一张记录回收的答案,另一张记录回收是否成功。
表1
这张表主要用来记录回收的答案,其中Xuanzth、Pandth、Tiankth、Chengxtkth、Chengxtsth、Chengxsjth分别表示选择题、判断题、概念填空题、程序填空题、程序调试题、程序设计题的题号,Xuanzda、Pandda、Tiankda、Chengxtkda、Chengxtsda、Chengxsjda分别表示考生的选择题、判断题、概念填空题、程序填空题、程序调试题、程序设计题的答案,可与考试信息表中各题的正确答案做比较。
表2
这张表主要用来判断回收是否成功。其中Id表示考生的准考证号;Name表示考生的姓名;Xuanze、Pand、Tiank、Chengxtk、Chengxts、Chengxsj分别表示选择题、判断题、概念填空题、程序填空题、程序调试题、程序设计题是否回收成功,如果成功,则为OK,否则为空。
3.1.5管理表(setting)
其中Dbname表示数据库名称;Servername表示服务器名称;Sqlpwd表示SQL Server服务器密码;Testdir表示考试目录;Testtype表示考试类型;Relaimdir表示回收目录;redopwd表示重做密码。有些考生考试时可能会因为误操作而退出了系统,这时候要再次进入系统进行考试,就需要输入密码,以防止作弊行为。重做密码是在考生第一次进入系统时从该表中获得的。
3 测试系统具体设计
3.1 基于J2EE的E-nettest在线考试系统构架概要
3.1.1 E-nettest系统结构
我们的系统结构是针对了J2EE的四层架构进行设计的
图4 系统结构
如图所示,客户层负责提供用户界面接口,包括试题的显示和考生答案的输入。
Web层负责将得到的考生登陆和题目上传的信息送交给业务层,同时,将从业务层处得到考试的相关信息输出到html页面为考生提供相关服务。
业务层负责系统的具体逻辑实现,主要是得到数据池中的数据源,向数据库中提交和获得数据等。
信息系统层主要采用了Microsoft sql2000数据库对数据进行存贮管理。
3.1.2 E-nettest数据流程
考生首先进入登陆页面,输入用户名和密码,系统将该用户名和密码与数据库中考生表的用户名密码一一核对,如果存在该考生且未登陆,则弹出一个考试的主页面正常进入考试,并将该考生置为考试状态。否则会跳到出错页面要求考生重新登陆。
进入考试页面后,有许多分类的试题要求考生分别完成,考生点击相应页面的超链接,进入做题,在每个分页面的顶部,都将会有对该部分试题的操作提示和注意事项,考生阅读完相关事项后进行做题,每做完该部分试题都必须保存,系统将收集到的考生做题信息上传到数据库中,考生则继续做其他部分试题。
完成所有考试后,考生点击交卷标记,系统保存考生所有的答题信息后正常他退出,并将考生置于离线状态。
具体流程见下图:
图5 系统流程
3.2 E-nettest考试系统环境设置
本系统运行环境如下:
服务器端:软件环境:win2000/nt Tomcat,jsdk用以支持jsp网页,sql server数据库服务器
硬件环境:p3 1.0以上cpu,256M Rom
客户端: 软件环境:win9x/2000/xp,ie5.0以上浏览器
硬件环境:p2 233以上cup,32M 以上内存
3.3 E-nettest总体功能介绍
客户端
登陆服务:负责用户的登陆的输入,与服务器端的验证,如果是重登陆的,需重登陆密码。
题目下载:负责从数据库中读取试题数据,下载到客户端。
用户答题:负责在客户的浏览器中显示下载的题目,供用户做题。
题目上传:负责将客户所答题目的答案上传到服务器端。
管理端
生成试题:负责从试题源中生成当场考试的相应试题。
试题初始化:负责在每场考试前清空试题回收信息。
考生监控:负责在考试期间管理监控各考生的考试状态。
试卷回收:负责在考试结束后,将考生提交的答案上传到数据库服务器中。
试卷批阅:负责自动化批阅回收试卷(客观题)。
数据库连接服务:负责从各共性服务层模块接收相关数据库连接,查询,修改等服务,并返回相关数据。
数据访问层异常管理:负责数据库连接服务出现的异常。
3.4 E-nettest模块设计
各模块的详细介绍:
1)考生登陆模块:
在客户层,考生通过主登陆页面输入用户名与密码。
在web层,将从用户输入处得到的用户名和密码与从业务层返回的相应用户名和密码作比较,如果用户存在密码正确且还未登陆就登陆考试主页面,否则跳到出错页面要求重新登陆。
在业务层,获得与mssql数据库的连接,并取出所有的用户名和密码信息。将该信息传入web层。
在EIS层,对应的是mssql数据库中的students表格。
2)做题模块:
(1)选择题:
在客户层,浏览器中显示每个考生所对应的考试题目,要求考生输入考试答案。并有一个提交按钮供考生做完题目后上传题目。
在Web层,jsp负责从业务层中获得题目,并将题目组织在一起向客户端显示。
在业务层,获得与数据库的连接,并且取出选择题题目。
在EIS层,对应的是数据库中choose表格。
(2)word题:
在客户层,在浏览器中applet的textarea区域显示word题的要求,并利用applett数字签名技术,突破访问本地文件系统的限制,打开word做题。
在Web层,利用servlet的文件上传下载技术,将读出的word文件下载到本地磁盘。
在业务层,获得数据库连接,并取出word题目,word题是以二进制流的方式将word文件存贮在数据库。
在EIS层,对应的是数据库中word表格。
3)答案上传模块:
在客户层,在浏览器中单击提交按钮将做完的答案提交制相应页面
在Web层,将用户提交的答案提交给相应的javabean组件,并在客户端显示提示信息。
在业务层,将提交上来的答案存入相应的数据库中。
在EIS层,数据库中students表格,有两个相应字段用来存放该用户所对应的提交答案。
图6 系统模块
3.5 E-nettest数据库设计
由于目前市场上存在有许多的数据库产品,较流行的有oracle,Mssql,Access,等,oracle数据库多用于大企业中,稳定性最好,但价格也较高,且系统要求也较高,而Access数据库不支持网络功能,一般只对个人或小型的系统适用,而对于本系统来说,采用Msssql则是一个较为合适的选择,Mssql是微软网络数据库的主打产品,支持网络功能,日志记录等多种方便的服务,并且有着较为稳定的性能和可靠的管理。下面是数据库表的设计:
Students table:
id, char, 10,notnull;
password, char, 10,null;
number, char, 10,notnull;
sex, char, 1,null;(1=男,0=女)
chooseans, char, 60,null;
wordans, image,16,null;
status, char, 1,notnull;(1=在线,0=离线)
choose table:
QNUM, INT, 4,notnull;
QCON, TEXT, 16, notnull;
QANSA, TEXT, 50, notnull;
QANSB, TEXT, 50,notnull;
QANSC, TEXT, 50,notnull;
QANSD, TEXT, 50,notnull;
QANSE, TEXT, 50,notnull;
QANS, TEXT, 1,notnull;
Word table:
Topic_Number , nvarchar, 2,notnull;
Question_Title, text, 16,notnull;
Question_Content,image, 16,notnull;
4 关键技术
4.1 tomcat数据库连接池介绍与配置
数据库连接池概述:数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
以下介绍一下连接池配置关键几个环节:
1)首先在$CATALINA_HOME/conf/server.xml中, 配置应用程序的路径
<Context path="/DBTest" docBase="DBTest"
debug="5" reloadable="true" crossContext="true">
2)然后配置资源名,用以在jndi中进行查询
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"/>
3)定义各连接参数,用户名,密码,数据库驱动以及数据源的查找路径
<parameter><name>username</name><value>javauser</value></parameter>
<parameter><name>password</name><value>javadude</value></parameter>
<parameter><name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver </value></parameter>
<parameter><name>url</name>
<value>jdbc:mysql://localhost:3306/javatest?autoReconnect=true</value>
</parameter>
</ResourceParams>
</Context>
4)由于系统是一个web应用程序,被布署在tomcat容器中,所以需要在$CATALINA_HOME/webapps/quality/WEB-INF/web.xml里设置被引用的资源:
下面是配置代码,必须放在<web-app>和</web-app>里。
<!-- Database Config start -->
<resource-ref>
<description>connectDB test</description>
<res-ref-name>jdbc/connectDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<!-- Database Config end -->
5)最后,将第3方的驱动都保存在$CATALINA_HOME/common/lib/*.jar中,如我们这里连接的是mssql,则将mssql的驱动程序msbase.jar, mssqlserver.jar, msutil.jar放入其中。
4.2 applet数字签名技术
实现applet数字签名,使得applet可以突破默认安全限制,读取本地文件系统。
在Java2的安全体系下,1个Applet开发和运行的过程如下:
在代码的分发端:
1)开发Java源程序并对其进行编译。
2)用JAR工具对类文件和资源文件进行封装。
3)用keytool创建公钥和密钥,生成X。509V1签名证书,输出证书。
4)通过jarsigner工具用生成的密钥对JAR文件进行数字签名。
在代码的接收端:
1)用keytool输入证书视其为可信任。
2)用policytool创建和修改安全性策略配置文件,授权请求的访问权限。
3)从网络取得字节码,用公钥验证数字签名证书和文档代码的完整性。
4)验证字节码的合法性,根据策略文件分配相应权限。
5)执行代码,完成后被垃圾回收器回收内存。
在用公钥验证数字签名证书之前,接收方需要确认公钥自身的可靠性,因此通常情况是提供一个包含公钥的证书而不是公钥自身。1个证书包括:
1)1个公钥。
2)1个唯一的名字实体(个人或公司),它是证书的所有者,包含用户名字、公司、组织、城市、地址、国家代码、省份等信息。
3)数字签名:1个证书被1个分发者的实体签名,保证证书确实包含另1个实体(所有者)的公钥。
4)分发者的标识名信息。
对于接收者可以用分发者的公钥来验证他的数字签名,检查证书的合法性。然而公钥可能包含在另一个证书中,而数字签名需要用另一个证书的分发者的公钥来验证,这样嵌套下去,直到一个公钥被接收者确认是可信任的。如果接收者不能建立信任链,例如:1个分发者的证书不合法,那么可以用keytool-import命令来计算指纹,每个指纹是一个相关的短数字,它唯一可靠地标识证书(指纹是一个用信息摘要算法计算的证书信息的哈希值),接收者可以呼叫证书的所有者,并比较发出的证书和接收证书的指纹,如果指纹相同,则证书不同。因此能够保证证书在传递的过程中未被修改。另一个潜在的问题是发送者身份的标识,有时一个证书是自签名的,即使用证书中的公钥相对应的密钥进行签名,如果接收者已经知道或信任发送者,那么就没有任何问题。否则发送者需要从一个可信任的第3方得到证书,这个第3方通常是一个证书的授权机构CA,那么首先发送一个自签名的证书签名请求CSR给CA,由CA验证CSR的签名及发送CSR的身份、许可证以及其它信息。然后CA通过一个用CA的密钥进行签名的证书,授权CSR的发送者作为公钥的所有者,任何人只要信任CA的公钥,都可以用之来验证证书的签名,很多情况下CA自身有一个来自更高一级的CA的证书,从而构成证书链。所有信任的证书实体都可以作为信任证书被引入钥匙库,每个证书中的公钥都可以用来验证用相应的密钥生成的签名。
发送者在发送签名的代码和文档时还相应提供包含与签名的密钥相应的公钥证书。用keytool-export命令或API函数可以从钥匙库中输出证书到文件中,然后将这个文件发送给需要的接收者,由接收者用keytool-import命令或API函数将其引入钥匙库中。如果用jarsigner工具为JAR文件生成签名,他会从钥匙库中取出证书及证书链,并和签名一起放入JAR文件。
密钥和相应的公钥证书存放在一个由口令保护的数据库中,称为钥匙库(keystore)。1个钥匙库包含2种类型的条目,可信任的证书条目,钥匙和证书条目,每个都包含1个密钥和与密钥相应的公钥证书,在钥匙库中的每个条目都有1个别名进行标识。1个钥匙库的所有者在钥匙库中可以有多个钥匙,可以通过不同的别名进行访问,每个别名通常是用钥匙库的所有者使用的钥匙的特定角色来命名,别名也可以标识钥匙的目的。例如:SignPersonalEmail可以被用来标识1个钥匙库的条目,它的密钥用于签名个人邮件,SignJarFiles用于标识1个条目,它的密钥用于签名JAR文件。
4.3 如何调用java外部程序
在系统中,由于涉及到需要调用word程序进行word试题的考试,因此需要用到调用java外部程序的功能,java.lang.Runtime 类提供了exce()方法来完成对外部可执行程序的调用。注意:在这里exce()方法调用的其实是java解释器这个可执行程序,外部类文件Invoked.class只不过是作为java解释器的参数出现。事实上,exce()方法还可以直接调用其它的可执行文件,而不仅仅是java解释器。具体代码见下:
String path = "C:/word.doc";
try {
Runtime.getRuntime().exec("cmd /c start winword \"" + path + "\"");
} catch (IOException e) {
e.printStackTrace();
}
5 总结与展望
在传统的两层体系下,业务逻辑在客户端和服务器端都有分布,而且服务器端的主要计算任务都由数据库承担。数据库系统本身作为系统级软件,它本身的优势在于提供高效率的数据访问和处理而不是数值计算,利用数据库系统处理大量的业务计算并没有完全发挥出数据库管理系统的特长,当请求并发量巨大时,数据库性能下降很快。针对这一不足,基于J2EE架构的处理方式是:业务逻辑分布到应用服务器上,数据库上不再具有业务逻辑处理单元,而只负责基础业务数据的管理,主要的计算任务由应用服务器完成,从而充分利用了应用服务器在并发处理和逻辑计算方面的优势。另外,应用服务器还可以做集群的配制,即在物理上,统一应用管理多台应用服务器对外部请求的分配和并行处理。这样,当计算请求并发量巨大时,集群的多台应用服务器之间可以动态的进行任务分配,实现负载均衡,保证了系统性能不会因为大量并发用户的访问而急剧下降,另外系统也同时具备了很好的可扩展性和伸缩性,即在请求并发量增大或减少时,可根据实际情况增加或减少应用服务器数量,以便保证性能的前提下,合理利用硬件资源。这些都是两层结构所不具备的优点。
基于J2EE的四层架构还具备很多特点。应用J2EE的四层架构对于保留现存的IT资产有着重要意义。由于社保机构在面对适应新的业务需求的同时,也要充分利用好已有的资产,因此,在信息系统建设方面,做平滑的系统迁移方案,而不是重新制定全盘方案就变得很重要。这样,一个以渐进的,而不是激进的、全盘否定的方式建立在已有系统之上的服务器端平台机制,是所有社保经办机构所力求的。J2EE架构可以充分利用用户原有的投资,如一些公司使用的BEA Tuxedo、IBM CICS、IBM Encina、Inprise VisiBroker。之所以成为可能,主要是因为J2EE拥有广泛的业界支持。每一个供应商都对现有的客户提供了不用废弃已有投资,进入可移植的J2EE领域的升级途径。另外,由于基于J2EE平台的产品几乎能够在任何操作系统和硬件配置上运行,现有的操作系统和硬件也可以被完整地保留下来继续使用。
J2EE体系对大型系统的高效开发有着良好的支持者。J2EE标准严格要求把一些通用的、很繁琐的服务端底层开发任务交给中间件供应商去完成,而这些复杂的系统级功能是常规应用开发中难度最大、开发成本最高的一部分工作。高级中间件供应商提供复杂的中间件服务,如:状态管理服务、持续性服务、分布式共享数据对象的缓冲服务等,它对开发人员来说是很重要的,这样开发人员可以集中精力在如何创建业务逻辑上,相应地缩短了开发时间。对于核心平台来讲,也就缩短了本地化开发的周期。
这篇论文拿在线考试系统作为实例,从中具体实现了最基本的J2EE架构并体现了其优势。由于时间关系,设计还不算很完美,主要研究了关键技术,设计有待于改进。
参考文献
[1] James W. Cooper, 《Java Design Pattern》, 科学出版社, .11
[2] Yuan Zhenming, Zhang Liang, Zhan Guohua ,A NOVEL WEB-BASED ONLINE EXAMINATION SYSTEM FOR COMPUTESCIENCE EDUCATION,
[3] Bruce Eckel ,《Thinking in Java (3rd Edition)》, December 6, 2002
[4] Mike Jasnowski,《Java,Xml和Web服务宝典》, 电子工业出版社, .6
[5] Danny Ayers,《Java 数据编程指南》,电子工业出版社,.6
[6] John Bell , 《Java Servlets 2.3编程指南》,电子工业出版社,2002.6
[7] Subrahmanyam Allamaraju,《J2EE编程指南(1.3版)》,电子工业出版社,2002.5
[8] 何梅,《Java Applet编程实例》, 清华大学出版社,2002.4