当前位置:首页 >> 理学 >>

基于SOA的网上考试系统的设计与实现


北京邮电大学 硕士学位论文 基于SOA的网上考试系统的设计与实现 姓名:汪赵强 申请学位级别:硕士 专业:软件工程 指导教师:杨文川 20090701

基于SOA的网上考试系统的设计与实现 摘要
网上考试系统是随着Web技术的发展新兴的一种现代化教学管 理手段。此前开发的网上考试系统由于受到技术的局限,存在着许多 不足或不尽人意之处。本文提出了基于服务的网上考试系统改进和系 统构建的思路以及实现的基本方法,并通过面向服务的程序设计对学 校整个教学管理体系的整合进行一些摸索。 文章还讨论了基于SOA(service—oriented architecture)的网 上考试系统设计、基于服务的题库的设计、试卷生成系统的生成策略、 试卷中知识点的包容等具体问题。 本文的主要贡献在于 (1)对现有的网上考试系统存在的主要问题进行了剖析,提出 基于服务的网上考试系统的设计与实现方法。 (2)阐述了基于服务的系统构件思想和学校教学管理系统整合 方法的设想。 (3)将)(ML/Web Services/SOA的思想应用于网上考试系统的构 建当中。 (4)初步实现了基于服务的网上考试系统的基本功能。 本文所述内容的原型在最普及的硬件环境和最主流的软件环境 下运行良好。

关键词:网上考试系统,面向服务的体系结构,基于XML的简易协议,
XML,Web Services

咖DESIGN AND姗LEⅣ匝N1’ATION
OF

EXAM SYSTEM BASED ON S OA

ABSTRACT

Exam systems

are

newly emerging application of modem education
are

along witll the Wreb technology.There

disadvantages with

Exam

systems currently in
Based
Oll

use.

web services,

rebuilding of the system architecture and and hope get some discovery to conform through programmer design based
on

essential achieve technique, education services.

management system

web

Exam

systems

design

based

on

Service Oriented Architecture.Test web services,Examination paper
can

questions database design based
create

on

method,and the point of knowledge

been covered.

珏g main

contributions of this article are the openness problem of

as

follows: system;the

(1)Submitted

exarrl

design

and

implementation of exam system based

on

service and essential achieve

(2)Rebuilding
technique

of the system

architecture

(3)Apply the XML/Web
(4)Primarily

Services onto the said system;and

realized the basic functions of the system. works well under popular environment.

The model of the system
KEYWORDS:Web-based
Services

Exam

System,SOA,SOAP,XML,Web

独创性(或创新性)声明

本人声明所呈交的论文是本人在导师指导下进行的研究工作及取得的研究
成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不 包含其他人已经发表或撰写过的研究成果,也不包含为获得北京邮电大学或其他 教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任 何贡献均已在论文中作了明确的说明并表示了谢意。

申请学位论文与资料若有不实之处, 本人承担一切相关责任。

本人签名..I堕主x笸b 本人签名.一l盈冬弛

日期:.翻车1&一

关于论文使用授权的说明 学位论文作者完全了解北京邮电大学有关保留和使用学位论文的规定,即: 研究生在校攻读学位期间论文工作的知识产权单位属北京邮电大学。学校有权保 留并向国家有关部门或机构送交论文的复印件和磁盘,允许学位论文被查阅和借 阅;学校可以公布学位论文的全部或部分内容,可以允许采用影印、缩印或其它 复制手段保存、汇编学位论文。 本学位论文不属于保密范围,适用本授权书。

本人签名:

.醴墼均
J一一

日期:边圣1辞

导师签名:



%.。 吖乒

眺幽罕!Q

基于SOA的网上考试系统的设计与实现

第一章引言

1.1本课题的研究意义
高等职业教育近几年我国得到迅速发展,作为职业教育的高职院校一方面得

到了政府的大量资金的投入迅速壮大,同时也面临着学生生员素质参差不齐,教 学组织困难,教学质量得不到保证,缺乏一个现代化的教学质量评价体系,评价
教师的工作质量和学生的学习质量的方法。

我校是一所全日制高等职业技术学院,学生的年龄处于18-20岁之间,由于 受传统教育的一次考试定终身及社会投机心理和不良价值观的影响,我校的学生
在入学时有很大一部分都有考试作弊和诚信方面的问题,虽然各学校都在大力开 展学生的诚信教育,教育法也中明确规定大学生考试作弊将给予处分,并计入学 生个人档案,但每学期都有学生因考试作弊被处分,并且随着无线通信技术的发

展和蓝牙产品的普遍使用,学生作弊的情况有日趋严重的趋势。我院一次期末考
试就出现了6名同学考试作弊最终被开除的事件。如何通过技术手段避免学生考 试作弊教学管理和教学评价现代化是一个较好的方法。网上考试可以为解决这一 问题提供一些帮助。网上考试有如下几个方面的优势。 1.网上考试可以避免考题重复,减少抄袭可能:避免大学生在人生的第一 步就留下一个污点,是我们教育工作者的责任,建立诚信的考试环境是消除学生 作弊的最好方法。加强过程考核,加大监考力度都是一些有效地方法。但结合当

前各院校信息化建设,实施局域网条件下的网上考试可以在技术上较好的解决学
生考试作弊的问题。具体方法是在学院网络机房按规定时间由学生登录学院局域 网进行考试,为提高考试的公平性希望考场的每个学生减少题目的重复性,也可

以安排不同科目的考生同时在一个考场进行考试,避免学生互相交流。 2.网上考试可以准确进行考生身份确定:我院的学生作弊就是考试替考, 为避免学生替考,可以采用学生登录时进行身份认证,显示考生近照,进行考生 确认,今后随着技术的普及配合指纹识别或现场摄像将图片传送考试中心数据库 存档的方法,也会在不远的将来得以实现,进一步保证考试的公平性。
3.试卷随机生成,实现考教分离:教师负责题库的维护和试题的管理,考

务人员负责生成试卷,考试成绩直接传送到教学管理系统,并对考试成绩进行分
析。 4.实现各系统整合实现成绩自动传送,提高工作效率,减轻教师负担:教

师每学期末有大量的工作要做,期中主要的是期末的考试出卷、阅卷、试卷分析、

基于SOA的两上考试系统的设计与实现

试卷提交,这都和期末考试直接相关,是否能把教师从繁重的期末工作中解脱出 来,减少大量的重复劳动,我们的网上考试系统,希望在这方面有一个突破性的 进展。教师在每个学期从开始就可以应用该教学评价系统进行分章节的学生考 核。到学期末,可以应有该系统直接生成期末试卷,教师只要提供考试难度、考 试时间、考试题目数、考试章节,若干套在线考试试卷就可以自动生成。教师就 可以等待教务的反馈意见了。

因此,开发一套基于我校现有的教学条件,能够对学生学习和教师的教学进
行测评的网上考试系统非常具有现实意义。在本系统中,为了保证对每个学生公 平,使试卷的难度基本相同试题内容尽量减少重复等的问题,采用了较为先进的 算法来解决组卷问题。

1.2高职院校网上考试系统现状
上面提到了网上考试系统的优点,现有的网上考试系统在国内外都有现成的
实例,但是由于多数系统一般都是在传统Web应用架构下实现的,因此在应用实 践中会发现存在着先天不足和其它一些问题。 相比传统的考试方式,网络考试系统的主要好处是一方面可以动态地管理各 种考试信息,只要准备好足够大的题库,就可以按照要求自动生成各种试卷;另 一方面,考试时间灵活, 可以在规定的时间段内的任意时间参加考试;另外计

算机化的考试的最大特点是阅卷快,系统可以在考试结束时当场给出客观题考试
成绩,计算机阅卷给了考生最大的公平感。 网络考试系统极大地提高了教学的灵活性,现在许多领域已经有了广泛的应 用。最有影响的案例就是ETS(美国教育考试中心)举办的GRE(美国研究生入

学考试)的计算机化考试,它使考试由原来的每年只能有两次参加考试的机会变
成了每个工作日都可以参加的考试。 ‘但高职院校网上考试系统现状却不容乐观,存在着诸多的问题。其中主要问 题有。 1.2.1实时性问题

目前国内外许多的网上考试系统,试题库都不是开放的,一般采用专人进行 管理和更新。例如我校购买的朔日公司的网上考试系统,题库的设计操作不便,

教师无法及时对题库进行更新,致使一直没能达到使用目的,在网上考试系统的 设计中如何实现题库的时时更新,使题库根据教学大纲和教学内容的变化,及时 更新让使用网上考试系统的老师随时可以根据教学进度组成阶段测验,单元练习


基于SOA的髓上考试系统的设计与实现

的试卷,把期中、期末才使用的网上考试系统,变成教师和学生随时可以使用的 教学评价系统,实现支持学校的过程考核,减少学生的投机心理。
1.2.2兼容性问题

目前我校教学有多个网上管理系统,例如:有试卷印刷系统,学生评教管理

系统,学分制管理系统,教师教学质量评价系统和网上考试系统等但各系统相对 独立,彼此不能兼容,造成数据无法在各系统之间传递,由于上述原因,教师经 常要重复录入多次考试成绩,加大了教师和管理人员的工作量,实现各系统兼容 可以大大提高工作效率,也可以减少数据录入中的错误以及由于时间原因产生的
二义性。
1.2.3开放性问题

目前多数网上考试系统尚不具备开放性,试题库需要有专人维护,由于维护
者不可能精通所有专业的知识,因而很容易发产生录入错误,而且也不能及时修

正、删除、更新题库内容,也就无法保证当前试题库内容的相对准确性、先进性 和完备性。除了题库内容的维护不具备开放性,试题库的结构更不具备开放性, 一般系统都不会允许系统管理员和数据库管理员以外的人员对数据库结构进行 维护,结果是对试题库的结构的合理性、完善性提出了挑战。此外,一般的系统 都是架设在某一种硬件平台和固定的系统平台和网络架构之上的,无法在不同平 台之间实现开放性,这同样制约了系统的扩展性、可移植性和通用性。
1.2.4服务复用问题

传统的Web应用一般都存在先天不足的致命弱点,就是依赖专有对象才能运 作。一般的网上考试系统也不例外,依赖专有对象才能运作的系统虽然有完整的 通讯定义,但是它们的通讯接口却十分缺乏弹性,如果在计算机和服务对象之间
的通讯其中任何一部分中断了,或是调用方式不是十分正确,就会发生“非预期

的错误",导致在不同架构的系统之间无法进行互操作。最典型的是CORBA和OC0m 这两个最主流的网络架构技术之间就很难实现互操作,两者不能在一起很好地协 作。影响学生考试。 我们希望在研究基于服务的考试系统的基础上,通过SOb,的构架思想实现跨 平台的整合,将我校已有的系统整合成一个整体。



基于SOA的网上考试系统的设计与实现

1.3本课题的主要研究内容
本课题主要研究内容为:在Web服务的思想指导下,实现一个基于服务的

开放式、分布式的网上考试系统,并探索使用SOA的架构整合学校教学管理体系。
1.3.1高职学院教学管理系统服务分析

作为高等职业学校教学管理系统的现代化已经成为一个迫在眉睫的事情。其 主要原因为:其一是教育产业化和升学人口的不断增加,使学校承受者前所未有
的压力。2007年将有1000万考生参加高考,升学率为56%,也就是说将有560

万学生进入高等教育。各学校的教学管理人员和教师严重缺员。而人员的补充是
不可能在短时间内全部解决,这就需要教学管理的现代化来解决。其次是教学管 理现代化已经开展了多年,学校各部门都在搞,各个时间段都在搞,以北京信息 职业技术学院为例,教学系有学生考试管理系统,教务处有学生评教管理系统,

教学印刷系统,学生处有学分制管理系统,但各系统开发环境各不相同,有的是 从公司购买的相同开发环境由于公司的技术保密也不能互联互通。所以急需将上
述系统进行整合,以提高工作效率。利用基于服务的思想开发一个教学系统,利

用Web服务的思想,研究如何在Internet和学校局域网上搭建一个通用的、实
时的、不受时间、地点限制的网上考试平台,该平台有动态Web服务的支持、有

多媒体工具的支持,有较新、较完善、较准确的试题库的支持,提供教师远程登 录访问试题库进行试题库维护、教学管理部门根据有关要求进行组卷实现考教分
离、学生登录局域网在规定时间和地点进行考试。是该课题的一个初步打算,其 最终目的是使用基于SOA架构的构建技术J2EE-WEBL06IC对教学系统进行整合,

最终实现跨平台的教学管理系统,提高管理的工作效率。
1.3.2基于soA架构的构建技术J2EE-WEBLOGIC

研究如何在Internet上构筑一个开放的环境和多学科试题库,以便经过授 权的教师在任何时间、任何地点自主进行试题库维护,试题库的内容的充实、更
新和修订。
1.3.3系统的通信方式的改进

研究如何将)(ML/web Services思想和技术应用到在网上考试系统中。研究
和利用以XML作为底层数据表示的优越性,研究通过SOAP与HTTP绑定的网络通


基于SOA的网上考试系统的设计与实现

信方式实现远程Web服务的调用,从而实现跨平台、跨数据环境和跨语言环境,
实现客户端免安装和零维护。
1.3.4试题库的构建与维护策略

这种试题库系统的基本思想是按照“知识点"来构建试卷,主要是思路是依 据教学大纲的要求,以课程的主干内容为主线,先把教学内容细致分解为一个个 知识点,然后按大纲对各个知识点的要求掌握的层次,题型、题量、难易度及各
知识点间的包容性结合起来,作为该试题库系统构建试题的基本原则,以便计算

机自动生成每份试卷、在考查点的分布上具有较强的科学性。
1.3.5组卷策略的研究

要实现基于知识点的试题库系统的试卷建构,首先必须研究从知识点角度对

试题如何进行分类,并结合试题的类型赋予各种特征参数,使试题库编程符合科
学化与规范化的要求。因此,参数的设置是否合理,对能否体现基于知识点建构

试卷的思想.所建构试卷的质量,编程的工作量及运行效率都是至关重要的。
1.3.6系统的安全性

考试登录:考生登录的时候,系统会根据考生输入的信息在数据库中查找相 关的记录。如果记录存在,则登录成功,系统会将该考生的信息保存在特定的

session记录里面,这个session记录一直会保存到考生结束考试为止;如果没 有,系统会自动返回主页面,并提示考生重新输入信息。
考试计时:考生进入考试以后,在卷面的左下方会动态地显示考试剩余的时 间;如果考试计时结束而考生还没有交卷,系统会自动收取考生的试卷,并将该 考生考试的剩余时间设置为O。这样做是为了防止考生通过改动页面的方式多次 提交试卷,达到提高考试分数的目的。 系统规则:为了确保考试的有效性和安全性,系统设定了以下规N-(1)考 生在考试的过程中,不能同时进行其它课程的考试,也不能使用其它考生的信息

在同一台计算机上重复登录。从某个角度来说,这样可以有效防止考生代替他人 考试的现象发生。(2)对考生来说,每一门考试只允许考一次;如果已经交卷, 系统将会禁止其重新进行考试。如果需要进行补考或者重考,教师可以另外设置 一份考卷,让考生进行考试。



基于SOA的网上考试系统的设计与实现

第二章系统分析 弟一早承现,刀’倒I
服务系统构架原则说明:由于本课题的研究是基于Web服务的,为今后的
高职学院实施SOA系统进行了一定的探索。在本系统的设计之初就考虑了该考试 系统对学院其他已有的系统的整合功能。由于采用了基于服务的设计思想,可以 在今后的开发中复用这些服务,因而可以以最小的成本换取最大的效率。

2.1需求分析
2.1.1需求分析概述

IEEE软件工程标准词汇表(1997年)中定义需求为: ?用户解决问题或达到目标所需的条件或权能。
?

系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有 的条件或权能。

?

一种反映上面(1)或(2)所描述的条件或权能的文档说明。

软件需求包括三个不同的层次一业务需求、用户需求和功能需求一也包括非
功能需求。业务需求(business requirement)反映了组织机构或客户对系统、产 品高层次的目标要求,它们在项目视图与范围文档中予以说明。用户需求(user requirement)文档描述了用户使用产品必须要完成的任务,这在使用实例(use case)文档或方案脚本(scenario)说明中予以说明。功能需求(functional

requirement)定义了开发人员必须实现的软件功能,使得用户能完成他们的任
务,从而满足了业务需求。所谓特性(feature)是指逻辑上相关的功能需求的集 合,给用户提供处理能力并满足业务需求。 本系统需要实现以下一些基本功能: ?题库管理

试题管理的主要目的是维护题库中已有的试题、各项参数输出及题库查询。
其中包括题库编辑、题库排序、题库查询。

题库编辑:其内容包括新建题库,已存在题库的内容修改和增添、删除以及
旧题库文件的删除这部分是对基本库文件直接进行操作,特别是删除操作,对库 文件的潜在危害极大。因此应防止因用户误操作而对文件造成的损坏。

题库查询:要编制试卷首先要清楚各个基本库文件中的试题分布情况,因此
要对基本库文件做查询,将查询反馈给出卷者(用户),出卷者再根据库中试题



基于SOA的网上考试系统的设计与实现

分步情况来选题。 ◆试卷管理 该模块可根据要求实现试卷的自动/手工出卷”自动生成的试卷试题由系统 随机抽取,由于题库中的试题按照题目的难易程度分类,故随机抽出的试题难易 适中,既可满足一般考试的要求又避免了人为因素,增强了试卷的可信度”尽管自
动生成试卷符合规范化考试的要求,但为了满足不同用户的特殊需要,特设置了 手工出卷的操作,这样就增加了系统的通用性与灵活性”此外,该模块还可根据用 户的查询要求生成关于试卷情况的文档

试题编辑模块: 本模块的主要功能是录入试题,同时可对试题内容进行编辑和修改。试题编 号的生成,试题库中的试题编号是区别试题的重要标志,因此必须保证试题编号 的唯一性。为防止由于试题录入者的错误录入而造成的系统出错,同时减轻试题 录入者的工作量,试题编号将由系统自动给出。在录入新试题时,系统给出的试题 编号为当前题库中的试题数加一。试题的录入,在连续录入试题时,试题的科目、
题型、知识点等字段的值往往会重复出现,因此系统将保留前一题录入的某些字 段值,以提高试题录入效率,减轻试题录入者的工作量。 试题查询模块:

本模块的主要功能是按照用户设置的查询条件对试题进行快速查询。用户可 以根据科目、试题题型、试题难度、试题使用情况、试题编号以及试题知识点, 来查询试题的内容、答案等信息。
试题删除模块:

本模块的主要功能是对一些旧题、错题进行逻辑删除或对已被逻辑删除的试 题进行撤消删除操作。在试题录入过程中,系统自动生成的试题编号为题库中的 试题数加一,因此如果随便对试题进行物理删除,题库中的试题编号将会出现重 复的情况,这是系统所不允许的。为解决这一问题,我们在题库中设置了一个“删
除记号"字段。当字段值为.T.时,表示该题已被逻辑删除:当字段值由.T.变为.F. 时,表示对已被删除的试题进行撤消删除操作。 试卷生成与管理模块: 本模块完成试卷的组织与生成、查阅与打印及编辑功能。 试卷组织与生成模块:

本模块的主要功能是组织试卷结构,生成一份完整的试卷。(1)试卷的结构组 织,一份试卷主要是由试卷标题、试卷内容及试卷答案三部分构成。其中试卷内 容为试卷的主体,包含若干大题,每一大题中又有若干小题。由于试卷的大题数一 般不会太多,因此在本系统中,我们规定大题数的上限为10。(2)试卷的选题,出



基于SOA的网上考试系统的设计与实现

卷者给出试卷选题的要求,如试题的题型、难度等,系统将根据这些要求,从题库 中找出满足条件的试题,并从中进行随机选题。如果出卷者对选题结果不满意, 可以让系统重新选题或对个别试题进行调整。 试卷查阅与打印模块: 本模块的主要功能是对历届的试卷进行查阅和打印。(1)试卷查阅的安全性 问题。(2)由于本系统允许有多个用户,所以需要采取必要的措施,使任何一位用 户所出的试卷不能被其他用户看到。在试卷的查阅过程中,如果将使用过的试卷 和未使用过的试卷混在一起进行查阅,将是一种很不安全的做法。因此,本系统将

自动隐藏未曾使用过的试卷:用户如果希望对这些试卷进行查阅,就必须通过身
份验证。
2.1.2用户分析

网上考试系统的目的是在网络上搭建一个网上考试系统平台,通过该平台对
学生进行随堂的测验和考试。

同传统网上考试系统一样,每次考试或测验前教师要在网上发布考试信息,
并提供参加考试的学生、考试范围、难度、时间等信息,系统依据上述要求生成 相关科目的试卷,保证学生进行相关科目的考试或测验。 网上考试系统的另外一个用户是考生,考生作为网络考试系统的主体,按照 考试要求首先要在网络考试系统上进行注册(包括上传照片),并在规定的时间登

录网络考试系统进行考试。来访者可以隐藏真实身份,因为这样可以有效保护隐 私。正确登录考试系统后,学生就可以按照试卷的要求进行答题。此后,学生在
规定时间完成试卷内容最终进行提交。 根据以上的分析,系统内部的用户就分成教师和学生两类,他们通过网络考 试系统完成考试工作,并且将考试成绩自动提交给学校的学生成绩管理系统。
2.1.3系统运行环境

系统运行的环境应能满足在现阶段学校网络能承受的较为普及的软件环境 和硬件配置,并对今后一段时间的变化情况有一定的预测和满足。
当前,操作系统方面,学生使用较多的是微软的Windows家族,这其中较为 流行的是Windows 2000,同时考虑到考场服务器的维护简单,因此,在系统的 服务器端主要考虑Windows
2000

Server,客户端主要考虑Windows

2000

Professional操作系统,并且考虑到项目开发的复杂度,在保证系统兼容两种 操作系统基础上,测试环境选择为Windows
2000

Server和Professional.



基于SoA的网上考试系统的设计与实现

2.1.4系统目标

网上考试系统将提供,题库维护服务,试卷生成服务,线考试服务,考试成
绩统计分析服务。 题库维护服务:保障教师对题库异地、时时更新有效性,教师登录系统后,

根据本学期教学班级和科目进入题库维护界面。对题目进行添加、删除、修改,
难度设置。

试卷生成服务:该系统由教学管理部门在规定的考试时间生成考试试卷,输
入科目、知识点、试卷难度、考试时间、题目总数、出卷数量等参数,生成重复

题目最小的多套试卷。
在线考试服务:学生可以在规定时间,在指定地点进行混班考试,提供考试

时间提示、提交试卷确认等支持。

2.2本课题要解决的关键问题
2.2.1采用基于¥OA的策略解决跨平台的系统兼容问题

SOA是一种架构模型,根据需求通过网络对松散耦合的粗粒度应用组件进行

分布式部署,组合和使用.服务层是SOA的基础,可以直接被应用调用,从而有效 控制系统中与软件代理交互的人为依赖性。
前面已经提到传统的Web应用一般都存在先天不足的致命弱点,就是依赖专 有对象才能运作。最典型的是CORBA和DCOM这两个最主流的网络架构技术之间 就很难实现互操作,两者不能在一起很好地协作。

另外一个问题是跨计算机通讯,为了应付这个问题,Microsoft开发了
Distributed Component

Object Model(DCOM),利用DCoM,使用者就可以透过

网络存取服务所在的计算机。当然,其它的平台也有类似的分布式模式,虽然达
成了跨计算机通讯的目的,却只限于相同的平台,在跨平台之间取得服务仍然有 困难。例如Windows程序无法调用执行于Linux之上的EJB。 从Microsoft
Visual

Basic无法直接调用EJB,而Java程序也无法直接

调用COM对象的方法。要使这些对象模式之间的通讯更有效率,需要利用某些 方式以将建立数据的对象以及该对象需要特定平台的要求性分开(也就是说要将 对象和平台分别管理)。 解决方案就是Simple Object
Access

Protocol(SOAP),SOAP解决了多种

平台在存取资料上不兼容的问题。使用SOAP可以实现在垂直应用层面上将CORBA


基于SOA的网上考试系统的设计与实现

和DCOM技术进行水平的整合,将它们更好的集成为一个整体。本文正是借用这 个思想,来试图实现教学管理软件系统与不同软硬件系统平台及编程语言之间的 兼容问题。
2.2,2试题库的开放性问题

开放性是当今Internet应用软件努力追求的共同目标。目前多数网络考试 系统并不具备开放性,例如试题库需要有专人维护就是一个非常大的问题,除非 集中大批教师专门进行试题库的管理与维护,否则少数维护者不可能精通所有课 程的知识,也就不能及时充实、修正、删除、更新知识库内容,无法保证当前试 题库内容的相对及时性、完备性和可用性。 如果将系统做成开放型的,那么试题库的维护工作改变为由分散在各校区不 同专业的教师来实施,这样就可以在任何时候,任何地点对试题库中属于自己的 教学内容进行充实、更新、修改和删除,从而保证试题库与教学的同步。同时解

决了试题库的包容性问题和实时性问题。
2.2,3知识点的最大包含问题

这种试题库系统的基本思想是按照“知识点”来构建试卷,主要是思路是依
据教学大纲的要求,以课程的主干内容为主线,先把教学内容细致分解为一个个

知识点,然后按大纲对各个知识点的要求掌握的层次、题型、题量、难易度及各 知识点间的馆包容性结合起来,作为该试题库系统构建试题的基本原则,以便计
算机自动生成每份试卷、在考查点的分布上具有较强的科学性。
2.2.4试题最小重复的组卷策略问题

本系统利用遗传算法求解试题库自动组卷问题的新方法,讨论了运用遗传算 法求解在一定约束条件下的多目标参数优化问题,提出了功能块的概念,并采用 了新的编码方式、交叉算子和变异算子。实验结果表明,改进的遗传算法相对于
其他算法更能有效的解决自动组卷问题,具有较好的使用性能和实用性。

2.3本课题所采取的研究方法
本课题根据当前最新的技术和观念,从系统架构由传统Web应用方式到Web 服务架构的改进、试题库的开放性策略的研究、系统包容性和实时性的提高和组
卷策略的研究等几个方面着手,试图对以上关键问题进行有效突破。
IO

基于SOA的网上考试系统的设计与实现

2.3.1基于SOA的策略进行系统基础架构的改进

构建一个企业应用程序集成的解决方案不是一件容易的事情。这些解决方案
需要集成多种商业系统,而这些商业系统原本并不是用作协同工作的而设计的。

所以,由于各种各样的困难,集成这样的系统是非常艰难的。这些困难包括应用 程序设计平台的不同,编程语言的不同,每一个单个商业系统所具有的多样性和 复杂性,完全理解所要的结果集成解决方案的困难。在设计集成的企业应用程 序的时候,软件架构师们要确保完成许多非常重要的任务。这些任务包括: ?帮助理解集成的应用程序在功能的和质量保证上的需求。 ●为集成应用程序创建初始的架构设计图。 ?选择恰当的集成技术,以保证可以实现特定应用程序的需求。 ●在一项主要的投资计划实施之前,对本体系结构和用于构建企业级层次
的应用程序的集成技术的结合的成功性进行验证。 伴随着像Web Services这样的工业标准的出现,面向服务的体系结构 (Service
Oriented

Architecture)在许多领域都作为范例使用,当然也包括了

企业级应用程序的集成这一领域。 用基于服务的方法去做集成就是利用服务的交互作用来集成可计算的实体。 在集成方面用基于服务的方法会遇到一些问题,例如在集成遗留下来的东西和不 具有灵活性的各种不同的系统的时候,需要说服各个IT机构提供锁定在已知应 用程序中的可再度利用的服务的功能。 与传统的企业级应用程序集成(enterprise
比,用基于服务的方法去做集成明显的特点有:
appl ication

integration)相

?定义完善的,标准化的接口——为消费者提供容易理解的一致性访问的
方法访问已经存在的服务。

◆不透明性——提供功能性的应用程序所用的技术和程序所在的位置都隐 藏在服务接口之后。事实上,对于固定服务的提供者而言清楚这些东西

?灵活性——服务的提供者和服务的消费者都可以改变——只有服务
的描述是保持不变的。只要提供者和消费者都继续坚持这种服务描述,
应用程序就会继续工作下去。

是没有必要的。

实现基于服务集成的技术 构建基于服务的集成技术需要具有以下的基本功能:消息传递、智能化路由、 事件服务、应用程序适配器、XML转译/数据转换、规则处理、Web Services支

基于SOA的网上考试系统的设计与实现

持、服务/过程优化安排、商业过程管理、商业活动监控
进一步讲,为了保证基于服务的集成的成功性,集成技术还需要有如下的质 量保证:可扩展性、高性能、安全性、易管理性。’

2.3.2试题库维护的开放性策略

将试题库的维护工作改变为由任课教师来实施,系统对加入试题库的维护工 作的教师进行资格审查,对获准加入的教师提供身份识别号、登录密码与维护和 权限,这样,每个教师都可以在任何时候,任何地点对试题库中属于自己的教学

内容的试题进行充实、更新、修改和删除,从而保证试题库与教学的同步。
除此之外,系统还应给教师提供很大的灵活性,允许他们对自己教学内容的 试题库进行自主分类、调整、合并或细化类别,并自定义相应的属性。
2.3.3系统包容性和实时性的提高

对于相同课程,可以允许有多个教师同时拥有维护试题库的权限,各自在添 加自己认为适合的试题,这可以为学校的教学管理部门,能真正实现教学与考试
分离,为不同班级的学生提供不同角度、不同层面的问题。

对于实时性来说,当前试题库中尚不存在的内容,自然暂时还不具备实时性, 但是随着加入的教师越来越多、题目更新就会越及时,试题库越大、越全、越完 善,系统的实时性就会越好。如果实现了Web Services架构,试题库分布在各 校区,系统的包容性和实时性的问题当然也就迎刃而解了。
2.3.4基于遗传算法及相关技术的组卷设计

利用遗传算法求解试题库自动组卷问题的新方法,讨论了运用遗传算法求解 在一定约束条件下的多目标参数优化问题,提出了功能块的概念,并采用了新的 编码方式、交叉算子和变异算子。实验结果表明,改进的遗传算法相对于其他算 法更能有效的解决自动组卷问题,具有较好的使用性能和实用性。 自动组卷就是按照教师和教学的要求,由计算机自动从试题库中选择试题, 组成一份符合要求的试卷。它是计算机辅助教学系统(CAI)的重要组成部分。常 用的自动组卷方法大致可分为两类:(1)随机抽取法,(2)回溯试法.

12

基于SOA的网上考试系统的设计与实现

2.4组卷策略的研究与探索
在智能教学系统中,一个非常重要的课题是怎样在已生成的题库中自动生成
满足教学和教师需求的试卷。一套试卷的构成需要涉及很多因素,在试卷中的每 一道试题又包含多个属性,其中与组卷有关的属性有如下六项:(1)题型:(2) 章节:(3)难度系数:(4)区分度:(5)时间:(6)分数。组卷中决定一道题, 就是决定它的上述六个属性,组成一份n道题的试卷就是从试题库中抽取n道

题,组成一个n
即S=



6的矩阵,矩阵中的每一列代表一个属性,每一行代表一道题。

a11 a12 a13 a14 a15 all a2l a22 a23 a24 a25 a26 a31 a32 a33 a34 a35 a36

anl an2 an3 an4 an5 an6

该矩阵应满足以下相应的约束条件:(1)题型:试题的题型。按照现代教育理 论对于考试的客观性的要求,试卷应包含足够的客观性试题(15择题、填空题)。
而为了考察学生的思维水平与能力,分析运算能力和科学表达能力,试卷又要有

一定数量非客观性试题。考虑到上述两方面的要求,试题库内试题应包含判断题、 填空题、选择题、问答题、改错题、证明题、和计算题7种题型。(2)章节:试 题内容所属的篇章。为保证试题有足够的覆盖面,每个章节都要有相应的试题,
且各章内容所占分数应与教学时数成正比。(3)难度:在试卷命题过程中,针对不

同考试对象、不同阶段的考试,命题难度也不同。试题难度系数定义为d=1一(3z 均分/该项满分)。根据难度系数不同,将试题分为容易、中等、较难、难四个
难度等级: 容易:0.05一--0.20 中等:0.25"--0.40 较难:0.45~0.70 难:0.75~O.95

在组卷中,对于各种难度级的试题在试卷中的分布也做出一个参考性规定, 即:(容易):(中等):(较难+难)≈25:60:15。(4)区分度:试题对考生的 水平鉴别和区分程度的指标。为了估计区分度,我们将考生分成高分组和低分组 两个组,分别统计高分组和低分组的得分率,我们把区分度定义为:区分度=高 分组的得分率一低分组的得分率。(5)分数:每份试卷的分数为100分,或由用
户指定。(6)时间:考试时间为120分钟或由用户指定。

13

基于SOA的网上考试系统的设计与实现

除了上面六个约束外,有时试卷还要满足教学要求层次(掌握、理解、了解)、 能力要求(知识、运用、灵活运用)、试题内容的相关性以及出题频率等约束。 根据经验,指标过多会增加组卷问题的难度并降低其效率。
2.4.1传统遗传算法的问题求解

遗传算法是基于生物学进化原理的一种全局搜索算法,它模拟了自然界适者

生存、优胜劣汰这一基本的生物进化过程。遗传算法的框架是由Holland于20世
纪60年代提出,可描述为:(1)随机产生初始种群;(2)利用评价函数(适应度 函数)对个体计算函数值:(3)按一定的概率对个体进行选择、交叉、变异等操 作产生新种群;(4)重复(2)、(3)两步,直到收敛(找到最佳解或迭代次数足够 多)。

上述框架中的参数往往与待解决的具体问题密切相关。针对自动组卷问题,
我们给出相应的算法步骤如下: 步骤l:染色体的编码

假设试题库中有m道题,可用一个m位的二进制串来表示,形式为:xl 即当第i道题被选中xi=1:当第i道题未被选中xi=0。 若一份试卷中有n道试题,则x1 步骤2:初始化群体
x2

x2

x3…xm,其中若xi为1,则表示该题被选中,若xi为O则表示该题未被选中,

x3…】【m串中应有13个l。

通过随机的方法生成初始化的串群体。在串群体中,串的长度是相同的,群体
的大小根据需要按经验或实验给出。 步骤3:计算当前种群每个个体的适应度本问题的适应度函数可定义为


l-_Zfiwi
fll



i表示第i个属性指标与用户要求的误差的绝对值,wi表示第i个指标

组卷重要程度的权值,f是所有指标与用户要求的误差绝对值之和。
步骤4:选择 按照一定的选择概率对种群进行复制,选择较好的串生成下一代(个体的适 应度函数值越小,该串的性能越好,选择概率越大),去掉较差的串。

步骤5:交叉
交叉是两个串按照一定的概率(交叉概率PC),从某一位开始逐位互换。首

14

基于SOA的网上考试系统的设计与实现

先,对每个二进制串产生一个在O~l的随机数,若该数小于Pc,则选择该串进
行交叉,否则不选择。随机地对被选择的二进制串进行配对,并根据二进制串的长

度n,随机产生交叉位置i,i为E1,n一1]上的一个整数,然后按下面的方
式交叉:

交叉前
al a2 a3”-aim+1…8n bl b2 b3??-bibi+1…bn

交叉后
al b1 a2 a3?--aibi+1…bn b2 b3…biai+1??-an

步骤6:变异 变异是二进制串的某一位按照一定的概率(突变概率Pro)发生反转,l变为

0,0变为l。这里Pnl较小,Pm可小于0.001。但在实践中发现,在有些遗传
算子中,PIn为0.1时更好。

步骤7:终止
记录进化的代数,并判断是否满足终止条件。若满足,则输出结果,否则转向

步骤3继续执行。终止条件如下:(a)出现种群满足f=O;(b)某个个体适应度 值达到指定要求:(c)达到指定的进化代数:(d)当前种群中最大适应度值与以
前各代中最大适应度值相差不大,进化效果不显著。
2.4.2改进的遗传算法

在传统的遗传算法中,初始种群的每个字符串中“1"的数目等于试题的数目
n,可进行遗传操作(交叉、变异)后,字符串中“1"的数目可能大于或小于n,

从而变为非法解。此时必须对解进行修正,即进行相应的运算使字符串中“1"的 数目为n。一般说来,这个过程比较复杂,大大增加了运算量。另外,对于生成 试卷的6个属性指标,我们的要求也不一样。对于考试分数,我们希望没有误差,
而对于其他属性,如题型、章节、难度、区分度、时间等只要满足一定的要求就

可以了。因此对传统的遗传算法做如下改进:(1)编码的改进,在实际组卷中, 假设在试卷中每种题型的数目是固定的,且相同的题型的分数和答题时间是相同 的。这样,可以将整个二进制串按照题目的类型划分为不同的功能块。每个功能 块采用独立的二进制编码。也就是说,每个功能块对应一种特定的题型,而该功能 块中,“l”代表该题被选中,“0"代表该题未被选中,“1"的数目即该种题型的 试题数目。显然,按这种规则产生的初始种群已经满足了试题对题型、分数和答 题时间的要求。(2)交叉运算的改进,由于种群中每一个功能块对应着一个题型, 所以,为了保证每个题型的数目不变,交叉点的选择不能破坏功能块的完整性。假
设交叉点位于第i个功能块内,则前i个功能块保持不变,从第i+1个功能块

开始逐位交换。(3)变异运算的改进,由于在每个功能块中,“1"的数目即是该
15

基于SOA的网上考试系统的设计与实现

题型试题的数目,因此在变异过程中应保证整个种群所有功能块中“1”的数目不
变。可执行如下过程,首先,由变异概率决定某位取反:然后,检查、修正字符串

中“l"的数目,保证不发生变化。(4)用全局最优解替换本次迭代的最差解,为 保证好的字符串不至于流失,每次遗传操作前记录本次迭代的最优解,若该解优
于全局最优解则替换全局最优解,否则全局最优解保持不变。此次遗传操作后, 用全局最优解替换本代的最差解。
2.4.3实验设计与实验数据

在实验中将600道试题按要求存放于所使用的试题库中,并给出个体评价 函数:f=wl
zfwc+w2 sjwc+w3 txwc+w4 pzwc+w5 ndwc+w6 qfdwc

其中wi=l(i=l,2,…6)。zfwc表示各试题分数之和与用户指定 的总分之差的绝对值:sjwc表示各试题估时之和与用户指定的考试时间之差的

绝对值:txwc表示各种题型题量与用户指定的相应值的误差绝对值之和:pzwc 是每一篇章试题分数与用户指定的相应值的误差绝对值之和:ndwc是每一难度
的试题分数与用户指定的相应值的误差绝对值之和:qfdwc是每一区分度试题

分数与用户指定的相应值的误差绝对值之和。以下各表列出一部分实验结果。
表2-1是运用传统的遗传算法在不同种群及不同迭代次数中得到的最小适 应度的值。其中,交叉概率Pc=0.6,变异概率Pm=0.1。 表2-1传统的遗传算法最小适应度的值 迭代数目(代)

最小适应度的值
(种群数目=10)

最小适应度的值 (种群数目=15)
91 88 86 86 83 83

最小适应度的值
(种群数目=20)
88 83 74 70 65 65

10 50 100 150 200 250

109 109 93 86 86 86

表2-2是运用改进的遗传算法在不同种群及不同迭代次数中得到的最小适 应度的值。其中,交叉概率Pc=0.8,变异概率PIn=0.005。 表2-2改进的遗传算法最小适应度的值

16

基于¥OA的网上考试系统的设计与实现

(种群数目=10)
10 50 100 150 200 250 48 38 24 20 18 16

(种群数目=15)
34 22 18 14 8 6

(种群数目=20)
44 30 14 10 10 4

表2-3是应用改进的遗传算法在不同种群不同终止条件(终止条件1适应 度值f达到16,终止条件2适应度值f达到10)下的运行时间。其中,交叉概 率Pc=0.8,变异概率Pin=0.005。
表2-3改进的遗传算法在不同种群不同终止条件 种群数目
10 15 20

终止时间/S(f≤10)
67 21 31

终止时间/S(f≤16)
28 12 11

表2-4是传统的遗传算法的求解时间情况。其中,交叉概率Pc=0.6,变 异概率Pm=0.05。 表2-4传统的遗传算法的求解时阔情况 实验次数
1 2 3

传统的遗传算法所用时 间/S
64 52 58

随机算法所用时间/s
254 164 301

2.4.4实验分析

对比表l、表2的实验结果可知,在不同种群下,采用功能块的改进的遗传算

法性能优于传统的遗传算法,而且指标有很大的提高,这说明改进的遗传算法降 低了问题的求解难度,提高了问题的求解效率。组卷是组成一份误差在可接受范 围内的试卷,并非要求此试卷的整体指标一定是全局最优,尤其是在改进的遗传 算法中,整个试卷的题目类型、题目数量、题目分数不会产生误差,而在篇章、难 度、区分度上的一定范围内的误差是可以接受的。由表3可知适当地放大误差, 可较大幅度缩短求解时间。对比表3、表4可知遗传算法效率好于普通的随机算 法,改进的遗传算法在时间上也优于传统的遗传算法。
17

基于SOA的网上考试系统的设计与实现

组卷问题是一个在一定约束条件下的多目标参数优化问题,而它的约束条件 难以用数学形式描述,所以采用传统的数学方法求解十分困难。事实证明,用遗传 算法求解组卷问题有较好的效果。尤其是本次引用的改进的遗传算法,采用功能

块结构,可以在初始种群时满足试卷的部分约束(题型、题数、题分),并无须在
进化过程中对这些约束进行控制,降低了问题的难度,提高了问题求解的效率。而 且在保证整个试卷的分数不变的前提下,适当地增大误差,可以大幅度减少组卷 时间。尤其适用于网络交互式环境下用户对组卷速度要求较高的考试情况。因此, 为求解组卷问题以及类似于该问题的多目标约束问题进行了一种新方法的尝试。

2.5服务设计原则
2.5.1服务设计应遵循的原则

SoA设计原则

提出设计原则的目的在于标识需要进行决策的方面:而此类决策则是架构设
计人员的责任。 SoA要求一致性

有很多可用于创建、发布、发现和调用服务的候选技术。S0^应提供一个参
考体系结构,以指定服务提供者和使用者将使用的特定机制;应以在SOA所有 参与者间实现一致性为目标。此类一致性可以减少开发、集成和维护工作。 SOA简化开发 以SOA为目标的服务和流程的开发人员可利用成熟的中间件,依赖SoA基 础结构提供问题的解决方案,如身份验证、消息转换和可靠消息交付。

这些中间件功能的提供应以一个重要的原则为基础:服务和流程开发人员应 远离中间件实现的复杂细节。理想目标是,在我们的SOA环境中工作的开发人
员应只需要业务领域的相关知识和基本的编程技巧。

可以通过各种方式实现此目标,如下所述: ?声明技术:J2EE编程模型就是使用声明技术提供应用程序逻辑和中间 件配置分离的一个例子。例如,应用程序组装人员通过在部署描述符(而
不是代码)中添加相应条目来应用EJB方法角色的安全授权;然后部

署人员会将这些角色映射到用户和组。
?抽象: 在某些情况下,SOA基础结构中可以提供API,以用于特定的

用途。例如,SOA基础结构可以提供错误报告和审核机制。 ?代码生成:在无法避免代码复杂性的地方,可以使用代码生成技术。例

18

基于SOA的网上考试系统的设计与实现

如,Web服务描述语言(Web

Services Definition

Language,WSDL)

就可以为开发人员隐藏SOAP、HTTP和JMS的复杂细节。这是通过 组合用WSDL表示的可由计算机处理的接口定义和可从WSDL生成
相关调用代码的语言特定实现的工具来实现的。 ?工具:在不可避免SOA基础结构的细节进入开发人员代码的情况下,

我们可以通过使用合适的工具扩展开发环境来减少开发人员工作的复杂
性。IBM Rational@Software
Development

Platform产品所提供的基于

Eclipse的环境可使用自定义插件、代码片段和用户指南轻松地进行扩 展。 ?模型驱动的开发:模型驱动的开发技术可以被视为前面两种方法的特定

复杂组合,同时利用了工具和代码生成功能来简化开发体验。开发人员
生成统一建模语言(Unified
Modeling

Language,UML)模型,此类模

型可转换为相应的代码,其中包含利用SOA基础结构所必需的代码。

总之,遵循相关指南应当为阻力最小的方法。SOA内的控制对其成功甚为关
键。 服务具有标准的、经过正式定义的可由计算机处理的接口

可由计算机处理的方法的概念应该从服务接口描述(如WSDL)扩展到所有
其他形式的声明信息或元数据。同时强调声明技术和可由计算机处理的元数据, 将其相关的复杂性从业务应用程序开发转移到基于标准的中间件中。 服务应设计为可重用 设计服务的最初使用者的需求,而应该进行更为广泛的业务分析,以确定更 全面的需求。我们应考虑服务可能的发展方向:

●设计必须能适应不断增加的吞吐量;如果服务在使用服务的数量增加的
情况下仍可成功运行,那么使用率也会成级数递增。 ?如果使用服务的数量增加,则数据量和并发数据访问模式可能会与最初

投入使用时的情况大为不同。 ?我们必须对服务请求的未来增长进行预计;新使用者可能需要其他的功
能,或者需要对现有功能进行更改。 服务设计原则 服务是其接口采用某种一致认可的格式发布的服务操作的逻辑分组。 命名服务时应以最大化易用性为目标

选择服务、操作、数据类型和参数的名称时要最大化服务的易用性。标识实
现业务流程所需的服务和操作。因此,我们使用服务使用者专业领域内有意义的 名称,优先选用业务概念而不是技术概念。

我们使用名词对服务进行命名;而应使用动词对操作进行命名。

19

基于SOA的网上考试系统的设计与实现

比较清单1和清单2中所示的两个服务定义。我们使用简化的伪代码来减 少编程语言“簇"。 清单1.使用动词短语和IT构造的服务定义
ManageCustomeroata{

一,InsertcuStomerRecord0

updatecustomerRecord()

{}etc、.. )

清单2.使用名词和动词短语及业务概念的服务定义


?Cu誊I£a峨epSer训ce{








:ereateNewCustomer0



changecustomerAddress0

CorrectCustomerAddress0

~0
’一o,



_

EnableoverdraftFaci¨tyForCustomer()

_『。一j



¨//etc…

蠢i赫i鬻ij鏊焉}

在清单2中,服务表述为名词,而操作则使用具有清楚的业务含义的动词 短语进行命名。在示例中,服务的业务用途非常清楚,而不单是仅仅指示其输出。 因此,我们不使用“update 何更新),而使用“enable 我们使用“change
customer

record”(可以为出于任何原因进行的任

overdraft

faciIity"。与此类似,在客户搬迁时,

customer

address”方法更改客户地址;而在希望更正无效 address”更正客户地址,因为这样很容易看出

数据时使用“correct

customer

这两个操作采用了不同的服务逻辑。
采用业务概念表述服务和操作名称,则必须密切注意如何确定这些名称。可 以通过业务分析活动得到这个词汇表。 服务应具有精心选择的粒度 粒度在SOA相关讨论中有多种不同的用法。在服务设计讨论中,我们考虑 的是服务本身的粒度,即服务应该包含的操作数量。 没有可用于确定服务粒度的简单启发式方法。现将提供两个在设计服务时应 该考虑的因素加以说明:

基于SOA的网上考试系统的设计与实现

●服务将通常作为测试和发布的单位。如果粒度过粗,而将大量操作分组 到单个服务中,贝fj可能将增加服务的使用者。因此,如果我们对服务的 某些方面进行更改,则必须重新发布整个服务,从而可能影响所有使用 者。 ?服务使用者要找到正确的操作。通常需要浏览服务列表,然后在标识了

合适的服务后浏览服务操作列表。服务粒度的两个极端——提供仅有几 个方法的很多服务,或数十或数百个操作均集中在几个服务中——都将
对易用性造成影响。 在选择服务粒度时,需要在多个因素间进行折衷,如可维护性、可操作性和 易用性。任何给定的SOA都应向服务设计人员提供指南,以便确定此类折衷方
案。

服务应是内聚而完整的
在确定哪些操作应组成服务时有两个对象设计概念很有用:内聚性和完整

性。可将这些概念应用于服务接口。 创建功能内聚的接口,一组操作由于其功能相关而聚合到一起。当评估内聚 程度时,从服务使用者角度看待服务很有用。通过使用者的视角,会将重点放在 服务的功能上。将此方法与使用以下内聚标准进行对比: ?可以考虑基于功能实现的内聚性进行决策。是否应由于操作使用相同的 算法分组到一起,或者由于均是使用相同主机上的CICS事务实现的而 将其分组到一起。 ●可以使用时间内聚性原则,即,将在短时间内一起使用的操作分组到一 起,
例如,
RetrieveCustomerDetails、 CheckCreditRating、

CreateLoanFacility和TransferFunds操作都可能在金融业务流程中依 次出现。不过,时间内聚性并不意味着这些操作应该由同一个服务提供,
CheckCreditRating和Transfe,'Funds就缺乏功能内聚性。

使用名词一动词对服务和操作进行命名的规则可以帮助我们将重点放在服务 接口的功能内聚性上。我们可以问这样一个问题“这个动词是否是该名词所进行
的操作?"

对象设计概念是完整性概念。在为已知使用者创建服务时,完整性的问题尤
为值得注意。在这种情况下通常会将重点放在满足所知的使用者需求上。服务应

该为可重用的,因此需要考虑将来的使用者的可能需求。假如有个名为
CellPhone的服务提供Create、Update、Query、Delete和Deactivate等操

作。我们完全可以想象会需要对弃用的手机进行重新激活,因此应决定是否也应
提供对称的Activate方法。

21

基于SOA的网上考试系统的设计与实现

服务应对实现细节进行封装 另一个对象设计原则(封装)也适用于设计服务接口。我们封装服务实现的

细节——所用的算法和资源——的动机在于增加服务使用者和提供者之间的分
离,从而为将来扩展提供灵活性。 服务适应多种调用模式 WebSphere@等提供的Web服务技术允许进行更高层次的封装。服务使用者 通过使用各种调用模式,可以使用完全相同的代码技术来调用Web服务,如以 下这些模式:
? ?

使用SOAP 使用SOAP

over over

HT-I"P的传统同步调用 JMS的基于消息的异步调用

?使用Java过程调用的本地调用 虽然Web服务基础结构可以封装调用的细节,从而简化代码,但服务设计 也应对调用方式加以考虑。对比一下本地调用和远程调用。与清单3所示内容 类似的服务设计可以提供有价值的业务功能,但却不适合在很多SOA环境中部 署。 清单3.繁忙型服务接口
≯ 黪i Li bra羹yCatal ogserv童ce”,'(
?i。一i

≯//:search:operatiOnS el,ded



String

getBookTitle(String jsbn)

_,

//furlzher }

operat]ons。elided

在本地调用时,清单3所示的服务接口可能能够正常工作。不过,如果服
务是在远程位置向使用者提供的,则该服务在常见使用场景中的性能可能会很

差。例如,在使用服务检索数据来填充显示书的目录项的屏幕时,将有必要进行 多个独立的远程调用,以检索书名、作者和出版日期。进行这些调用可能会有很
大的性能损失。远程服务应提供粗粒度的操作,以在单个调用中检索关于某本书 的所有信息。 在此处强调此原则的目的在于说明被封装的服务调用细节可能给我们如何

选择设计方法带来很大的影响。同步调用和异步调用之间的选择也可能对服务接 口设计有类似的影响。

基于¥OA的网上考试系统的设计与实现

设计服务时,什么决定了所使用的调用方式?服务设计人员是否可以自由选 择本地调用和远程调用、同步调用和异步调用?首先,我们希望通过确保一致性 提高易用性;编排流程时,服务最好具有可预测的特征。其次,我们希望通过将 使用者与提供者分离来提高灵活性。通过鼓励进行远程调用,我们可以进行位置、 平台和编程语言分离。通过鼓励进行异步调用,我们可以分离使用者和提供者的
可用性特征。

SOA要具有描述性,是否应声明所有服务都应设计为允许远程、异步调用? 对此描述性采用更为细粒度的方法。可能的服务类型包括提供业务相关较多的操 作,如PlaceOrder,也包括技术性侧重较多的操作,如CheckUserInRole。SOA 完全应该对不同的服务类别进行不同的描述。远程调用与业务相关的操作,而技 术操作完全可能采用本地调用的方式。 服务具有无状态接口 服务设计为可伸缩且可部署到高可用性基础结构中。就是,服务不应为有状 态型的。即,它们不应依赖于使用者和提供者间长期存在的关系,操作调用也不 应隐式地依赖于前一个调用。为了说明这一点,我们以下面的电话转换为例:
清单4.有状态转换

;缓缓麟鬃缀褊㈣i麟藕鳓稳鹣滁舔鞭醚凌嬲簧骥《舔
戮鬻缓镳霸翳霸辫缫黪颛
i獗麓缀嬲貉戮|j9{{耢§黪麟彰舔#爸懿纂阁缓瓣i鹬

麓囊荔缀雾荔鹈㈣誊誊蔫蠹夔的
此示例演示了转换的两个有状态方面。第二个问题通过使用“his’’引用第 一个问题。这个示例中的操作依赖于转换上下文。现在让我们考虑一下所提供的 应答。请注意,响应中没有上下文信息。应当只有在询问者知道所询问的问题时, 这个应答才有意义。在此示例中,要求使用者维护对话状态,以便解释所得到的 应答。这两个有状态关系(连续的调用之间和请求与响应之间的关系)都与SOA
服务设计有关。

首先,我们考虑一下依赖于前一操作建立的上下文的操作。假如这是一个与
呼叫中心的交互。只要与同一个操作人员对话,对话就可以有效地结束。但我们 假设呼叫被中断了,如下所示:

清单5.被中断的有状态转换

z,{缓鬟;,翡j≯liii蘩轰,%li荔ij麓绷%j8§鬻黪秭冷毫{Q}£∞c!;鞲^}|;I零;鬻臻di篓b夔Caller;毒a1翼s.to。ra+jdifferen_I=:operato芒?
∥i黪黪躐。浚潮毒攀转。搦Is蝴醚瓣’”槲霹
_。一;一≈z1.。,。.OPe;car.or,i2;who?

褫鬻鲻凝蠢籀缓黪l溺㈣劫

Q弱嗣嗡i篱甏l霉誊D簿蘩纂零攀荔≤誊霉葫舔n鬟≤黼毒鞲i:;鸶鼍

中断导致上下文丢失,因此第二个问题是没有意义的。就这个电话对话而言,

基于SOA的网上考试系统的设计与实现

我们可以通过重新建立上下文而抵消中断带来的后果:“我在问Dave的银行帐 户的信息,您能告诉我他的信用额度吗?”不过,在可扩展服务调用领域,有状 态对话通常更为麻烦,在此领域中,重新建立上下文可能在技术上不可行,或者 可能带来很大的性能开销。 通常,构建可伸缩的可靠基础结构与允许有状态交互之间有紧密的关系。创 建支持有状态的服务调用的SOA基础结构在技术上可行。可以使用的技术包括:
? ?

使用Http Cookie维护会话上下文 使用有状态会话EJB;Bean的句柄在SOAP Header中传递

我们必须仔细考虑最终基础结构的可伸缩性和可靠性。是否要求使用关联 性?即,相同的使用者发出的连续请求是否必须交付到相同的提供者实例?要求 使用关联性是一种有状态性与可伸缩性及可靠性冲突的情况。如果基础结构可以 随意将请求提交到多个提供者实例中的一个,就可简化负载平衡,而各个提供者 实例的可靠性要求就可缓和。 如果没有关联性需求,且允许基础结构将一个使用者的连续请求交付到不同 的提供者实例,则任何会话状态必须对所有提供者实例可用。应用服务器基础结 构提供会话复制机制。此类机制可以用于提供会话状态,但使用它们会有性能损 失。如果没有可靠的指南,开发人员将可以随意使用会话状态;过度使用HTTP会 话通常是导致性能低下的常见原因。

服务应设计为可避免维护会话上下文的需求。
让我们考虑一下对话的其他有状态方面以及请求和响应问的关系。我们是否

要采用上面的电话对话方式进行服务设计,依赖会话上下文来解释响应“What
Dave’S credit

is

limit?"——“£320"——然后我们将对SOA基础结构再次进

行约束。

基础结构必须适应各种可能性,如某些使用者无法在临时停机的情况下保留
其会话状态。

我们可以通过将服务设计为在响应中包含合适的关联信息,从而避免会话状
态的需求,例如以下的响应: 清单6.包含关联信息的对话
Q:what js A≯Oare d's
Dave’s

credit¨m{t?

credo!t 1imit is£2000

该响应既标识人员又提供具体的数据。当包装遗留系统时,通常由适配器负

责提供此类关联信息。现有同步API完全有可能不提供关联数据。在响应中包
含关联信息之所以是很好的做法,有很多原因。首先,它简化了弹性可伸缩解决

方案的构造,还能提供很大的诊断帮助,且在不可能向原始请求程序交付错误响
应时非常重要。未交付的消息可能放置在错误队列上,每个此类消息的解释都要

基于∞^的阿上考试系统的设计与实现

求使用上下文信息。 总之,仔细地进行服务设计可【=上避免对状态对话的需求,从而简化可靠的可 伸缩SOA基础结构的实现。 服务应使用状态事务建模 前面给出了避免依赖对话状态的建议,但有用的计算机系统通常将为有状态 的;通常反映了业务对象的生命周期。 例如,考虑购物中的一个订单的生命周期:创建订单。从用户的角度来看, 创建了一个空的购物车。用户将随后向订单添加物品,即将其放入购物车中。最 后提交订单,然后订单将被传送给配送部门。图2-l显示了对此生命周期建模 的简化状态转换图。

add『ne*em()pack fLem0 图2-1订单生审罔期状态转提

该模型说明了一些有状态的行为。例如,我们看到,在处于Open状态时可
以向订单添加行式项目.但在提交后就不能了。 我们考虑以下Order服务的设计。我们可以采用如清单7所示的接口。 清单7.Order服务设计
orderservice{
void
void


addLinen㈣rder“…r“rid.1
assl自nord—Pachr“nt
packerld)

nt

productzd.1

nt

quantity)

nt nt

creat曲rder(int(u5to州d)//retur…d
packzt酬ForOrde

of

new

order quantity 1eft


tO

r“…rderId.1
orderId)

nt

quantity)//returns

shiP

b∞1ean
void

shiI,Order(int

ordered}//r_eturns讪ether

a11

order{…sh"lpped

s曲Ⅲtx)rder(int
Query

//

o㈣’10…11ded

我们要考虑此接口的易用性。如果没有状态图供参考,即使查看我们的这个 小示例,也非常难于分清方法应该按照何种顺序进行调用。因此,服务设计人员

必须进行一定的工作,以简化使用者的任务。

基于SOA的网上考试系统的设计与实现

首先,考虑操作和参数的名称。我们上面的示例中的名称是经过细心选择的, 并进行一定的努力,以推导出方法的可能调用顺序。请比较清单8和清单9中 的示例,这两个代码片段几乎完全一样,只是操作和参数的名称不同。 清单8.不合理选择的操作和参数名称


?j

I|

。搿t℃uy]Serv{e照{

j篓一;一。j簟二纛_iI蠹i羞蠹爱囊nt wibbl毯(jnt wibid,int wobzd,string which);
jj。

-。囊;i

II:I|∞j.int_wobb】e(jnt潮uibid); boO]ean!wrubble(int!wibId);
一vo}d quibble!({nt VOid quash(打1t

7。。。鼍二jj豢_?j

widld)

wibzd)





stuffC]getStuff(i nt溺jbzd):
VO手d qu{te({nt

1¨?j.?

,曩鬈一

wjbzd)董

j。ji

蕊j一。:一

.rhings【丁getThif岣S(诵譬Wibid);

囊i。

’。甥撼“_一?Vo专d h{nge(in《wibld,:’{ntwobId);
曩…。

≮nt_{;}henge({nt wi bld“,ii!;Stbflf;I

SOmeStuff)



清单9.合理选择的操作和参数名称
谚。?一t,EXpenseservice■


_



一int approveclaimztem(int claimzd,int iremId,st硝ng co哪ent); {nt—CreateCl莉m(string_userzd):
boolean audi:tcl aim(i nt:claimid);

一-,~


?。


void—approveclaim(elaimld)
vOid

returnclaim(claj釉嘣)

。i。



j≥≥:。“claimItemOetai]s玎getclaimItems(int claimid…);

|“西曩。|臻||麓??:j
j?。夕

voi餐?payClaim(int!clai撼奶≮
C1aimErrors£】jvalidatec]aim(jnt claimid);
void removeclaimItem(int。claimld,jnt itemzd); c]ajmId,ClaimltemDetailS

。磐

≯簪董

Int addClaimItemCint
|.

details)



清单8中的名称都是难以理解的。而清单9中选择的名称说明了服务的目

的,并可以减少很多操作应按特定顺序调用的情况。例如,createClaim()将在
approveClaim()前使用,而后者又将在payClaim()前使用。因此,正如我们

在前面的命名服务时应以最大化易用性为目标所指出的,名称的选择对易用性影
响非常大。 其次,前面的Order的状态转换图可清楚说明订单的有状态行为。该图提 供了有用的说明信息,显示了订单的状态以及每个状态中相应的操作。

增加易用性的第二项技术是,要记住并非所有记录的值都可以通过服务接口 定义实现最佳的交付。记录良好的WSDL文件很有价值,但一起提供的关系图和 示例也有很大的价值。
增加易用性的另一项技术是,创建反映业务对象生命周期的状态的服务接

基f SOA的月上考试系统的设计与实瑰

口。在我们费用申领示倒中,每笔费用申领的生命周期都包含四个状态,如图 2-2中所示。

图2-2expense对象的四个状态

这些状春之所以重要,有两个原因。第一,每个状态基本上都与不同的系统 用户相关。例如,当费用申颁处于构建(building)状态时,主要系统用户是输 入费用申领详细信息的申颁人,而在审核(auditing)状态中,则是由具有批准 权利的人对费用申领进行检查。 第二,主要状态之间的转换通常反映了不同IT系统之间的数据流。例如, 在构建(building)状态期间,可以在用户的工作站上使用一个瘦客户端应用程 序来捕获费用申领。提交后,费用申领将传递给费用申钡处理系统,而当得到批 准后,费用申领将传递给另外一个系统.即支付系统。在传递过程中,我们需要 提到的是,如果实现的确要将数据从一个系统传递到另一个系统,则需要尤为注 意负责在系统之间进行传输的操作(在我们的示例中为submitClaim()和 approveClaim0)。它们的实现将需要对两个系统进行更新.而这样很容易丧失 两个系统中任意一个的可用性。这些方法的实现将可以通过使用异步排队机制得
到改善。

由于业务对象状态常常能同时反映业务和技术两方面的内容,因此完全可以 将原始ExpenseClaimService拆分为适应每个状态的多个服务。我们可以得到 如清单10中所示的服务。
清单10.根据状态划分服务
clalmeritrySefvice


createcTaim(stri…§erId).
C}aimError¥f]va]i datecl
void

clal删etml5[]getc_【almItems(int);
imt

aiin“…1a]mld). c帅vec]洲tem“nt ’…d北1almztemCi…]aimId“aimItemDetalls
cla、mld。ifit itemld):

detail s)

5u哳1tc]alm(int

claimId)



claiMpprova]serv{ce{

{nt印provecla{mztem(i…1almrd.i帅i
void void

e日Id.5trlng

cogent).

approveclaim01…d)
retu,’《1alm(el“mId)

27

基于sOA的网上考试系统的设计与实现



CIaimltemDetails[1 getClalmItems(Int);., claimErrors妇valldateClaim(int ) C1a{mPaymentServi ce{




clalmid);

void

payclaim({nt

elaimid);

纛i。

j'

通过这种方式,能更方便地理解每个服务。而且,将接口这样划分将可能非
常适合服务(或服务集)的开发、部署、维护和使用方式。这些服务很可能针对 不同的使用者,可以由独立的开发团队进行开发,可以分开部署,因而具有分离 的版本周期。换句话说,通过将重点放在对象生命周期上,我们就可以建立具有 恰当粒度的服务。 服务操作设计原则

操作表示业务动作:应该优先对服务和操作使用业务领域的名称,使用动词
作为操作名称。对于操作,我们将这个建议进一步深化:应当使用具体的业务含 义而不是泛型操作对操作进行定义。例如,不要使用泛泛的
UpdateCustomerDetai 1s

操作,

而要仓lJ建

ChangeCustomerAddress、

RecordCustomerMarriage和AddAlternativeCustomerContactNumber之类的

操作。此方法具有以下好处:
?操作与具体业务场景对应。此类场景可能不仅是简单的更新数据库中的 记录。例如,更改地址或婚姻状况可以要求生成正式的文档,而将要求

系统记录该文档的详细信息——或扫描版本。如果使用不太具体的操作
(如UpdateCustomerDetails),则较难实现此类业务场景。 ?各个操作接口将非常简单,且易于理解,从而提高了易用性。

?每个操作的更新单元得到了清楚的定义(在我们的示例中为地址、婚姻
状况和电话号码)。在实现具有高并发性要求的系统时,我们可以基于操 作的要求采用更细粒度的锁定策略,从而减少资源争用。

操作应采用粗粒度参数:在讨论操作参数时,同样要面对粒度的问题。请比
较清单ll和清单12中所示的CreateNewCustomer操作的两个接口。 清单11.采用细粒度参数的CreateNewCustomer操作接口

…一_+{nt"createNewcuStOmer(string伽铂yName,
String


givenName,

String专nitials。

嚣秀。?

,jj?,

,引撑iage

。弼j曩
|| |『

I,-j_÷j麓i囊。st蹦ng…剥dressl
j,i¨|S翻ring address2





Siring l,;o!stccde

基于SOA的网上考试系统的设计与实现

¨;矗貔爨!;籀;荔篓毵苷囊i嚣缀誊羞赫l∥蠢菇;稿≥毪
鼍÷j毪蠢.|??0

清单12.采用单个粗粒度参数的CreateNewCustomer操作接口
{nt

Creal:eNewcustomer(CustomerDetaJIs newoetails)

清单11显示了一个具有很多细粒度参数的操作。而在清单12中的操作则 采用结构化类型作为单个粗粒度参数。所以使用粗粒度参数,有两个原因。首先, 它们提供了创建灵活操作的机会,支持在不干扰现有使用者的情况下提供新版本 的操作。其次,具有大量类型相似的参数的操作易于在从第三代语言代码进行调 用时出现转换错误。相反,当数据放置在所使用的结构化类型的显式方法(如
setGivenNameO和setInitials0)中时,此方法出错的几率更小。

操作设计应考虑并发性:传统的事务型编程模型(如Entity
Java Bean(Entity

Enterprise

Bean)所支持的编程模型)允许实现数据库更新,因此其数

据库锁定方式如清单13中所示。
清单13.事务型编程模型

戮缀缀滋鞴勰镳懑熊瓣俐熊麟燃蜥㈣嘲稍囊臻镶露乏嬲膨“噍霉黪d

群筻百i臻荔荔l;j萌摹删,?e蛳

il霪鬟黧缫鬃戮鬃魏g甏锄嬲渤确翦㈣露燃濑麟囊瀚绷粼嬲燃蝴蹦

臻黪戆骥鬻鬃鬃黪纂i黎謦i淄矧㈤糍自酾镪酾黼壤瓣黼绷㈣黪《晒jc:l善镪二龟【蜒誓动ues
数据库锁定从第1行检索时一直保持到第5行的提交操作。这样以一定的

搋溉i;爨,移缓磁z。缀荔餐翳躲灞豁戮瓣羽;li熏篝

延迟确保了正确的并发行为。如果我们希望设计一个提供数据库更新功能的服 务,则可以提供与清单8中的第2行和第4行的检索和写入操作对应的操作。 不过,不要在高度分离且可能异步的SoA基础结构中的连续调用间保持锁定。 建议采用乐观锁定策略,将并发控制的责任委派给相应的应用程序逻辑。 乐观锁定策略中的更新请求可以解释为“以下是基于记录XYZ的V版本的 一些记录更新。请仅在从我读取该记录后没有人进行修改的情况下进行更改。” 以下是为清单12所示的同一个模型使用了数据库触发器和修订计数器的 乐观锁定实现。该实现要求执行以下步骤:
? ●

向要使用乐观锁定的表中添加一个额外的整数列;该列保存修订计数器。 向数据库添加触发器,以便对该表中的记录的每个更新都会导致修订计
数器递增。

?所有检索操作均会返回包含修订计数器的数据项。 ?所有更新操作都必须包含从检索获得的修订计数器。 ?更新操作实现必须对数据库记录进行限定的更新操作,如“如果修订计 数器等于…则更新记录…”如果其间对记录进行了任何修改,此更新操作

将失败—在其间,如果出现了更新,则会触发更新触发器,因此会修

基于SOA的网上考试系统的设计与实现

改修订计数器。
?

如果由于其他使用者在其问进行了更新而导致更新失败,则将向使用者 报告一个特定的错误。

此实现在更新时要求使用者提供正确的修订计数器;进行纠正的责任分散到 数据库、提供者和使用者三者身上。另外,此实现设计真的非常乐观;如果争用

的概率很低,就能很好地工作。如果可能出现更新冲突,则重试的性能开销将非
常大。另外,还需要一些其他可能的乐观锁定策略和详细设计,以制定合适的并 发方案。 考虑到管理并发更新的相对复杂性,我们提出一个相关的建议:尽可能使用 无状态语义。例如,与实现等效的“Retrieve
record’’一“Write

record”两个

操作(使用者会在检索和写入操作间使值递增)相比,可能实现具有良好并发行 为的单个操作“Increment
balance by

X"更为容易。

流程实现:在SOA中,我们通过对各个服务进行编排(通过编程方式或使 用基于业务流程执行语言——Business
Process Execution

Language,BPEL一

一的工具)来实现业务流程。如果要实现SOA远景,则必须简化创建和修改流 程的任务——即,服务编排任务。 业务流程编排的目标在于实际而有效地实现所需的业务逻辑。流程实现人员
所面临的问题包括: ?选择恰当的服务操作 ?确定使用正确参数调用服务的顺序
?

处理各种可能的响应,包括错误响应

服务设计的质量对编排简化有很大的影响。有关服务、操作和参数的名称和 数量以及文档质量和服务操作之间的相互依赖程度——所有设计问题——的决
策都可能给编排带来很大的影响。

30

基于SOA的网上考试系统的设计与实现

2.5.2服务业务数据流程

考试系统服务设计模型见图2-3

务层服务

图2-3服务业务数据流程

3.1.3试题库维护流程

试题库维护流程设计见图2_4

图2-4试题库维护流程

31

基于SOA的网上考试系统的设计与实现

弟二早尔现阪丌 第三章系统设计

3.1相关技术描述
本课题拟采用的技术主要有XML,XML
Schema,XSL,DOM,SOAP,HTTP

等跨平台的Web Service技术和ASP动态服务器端脚本编程技术。 基于XML的Web Service技术不仅能使本应用可以跨平台实现远程过程的透 明调用,HTTP协议还可以轻易地穿过防火墙;本地的XML+XLS合成技术还可以 使网络流量大大减少,客户机与服务起协同工作还可以减轻服务器的压力。 由于上述各项技术都是建筑于完善的、可靠的、通用的、经过考验的、成熟 的基础信息技术之上的,所以本课题的可靠性可以得到充分的保证。
3.1.1 XML

XML是Extensible

Markup

Language(可扩展性标记语言)的缩写,是W3C

组织于1998年2月发布的标准。W3C组织制定XML标准的初衷是,定义一种互 联网上交换数据的标准。XML实际上是一种定义语言,即使用者可以定义无穷无 尽的标记来描述文件中的任何数据元素,从而突破了HTML固定标记集合的约束, 使文件的内容更丰富更复杂并组成一个完整的信息体系。 XML是一种界定文本数据的简便而标准的方法。它曾经被人称作“Web上的
ASCI

I码’’。就好像你可以使用自己喜爱的编程语言来创建任何一种数据结构,

然后同其他人在其他计算平台上使用的其他语言来共享一样。XML的标记用来说 明你所描述的概念,而属性则用来控制它们的结构。所以,你可以定义自己所设 计出的语法并同其他人共享。 XML具有以下几个主要特点: 简单性XML为程序员和文档作者提供了一个友好的环境。XML的严格定义和

规则集使人和机器都能更容易地阅读文档。XML文档语法包含一个非常小的规则 集,使开发者能立刻开始工作。根据文档的结构DTD,既可以通过一个标准过程
创建,也可以由专家创建。 XML文档建立在基本嵌套结构的一个核心集的基础之上。当一层又一层的细 节增加使结构变得越来越复杂时,作者或开发者为内部结构的复杂化付出的努力 将是很少的。这些基本结构可以用来代表复杂的信息集合,而不需要改变结构自 身。XML的语法分析器也非常容易创建。

基于SOA的网上考试系统的设计与实现

可扩展性XML在两个意义上是可扩展的。首先,它允许开发者创建他们自

己的DTD,有效地创建可被用于多种应用的“可扩展的"标志集。其次,使用几
个附加的标准,可以对XML进行扩展,这些附加标准可以向核心的xML功能集

增加样式、链接和参照能力。作为一个核心标准,XML为可能产生的其他标准提
供了一个坚实的基础。 互操作性XML可以在多种平台上使用,而且可以用多种工具进行解释。因 为文档的结构是相容的,所以解释它们的语法分析器就能以较低的费用建立。XML

支持用于字符编码的许多主要标准,允许它在全世界许多不同的计算环境中使
用。 开放性XML标准在Internet上是完全开放的,可以免费获得。XML文档自

身也较为开放,任何人都可以对一个结构良好的XML文档进行语法分析,如果提
供了DTD,还可以校验这个文档。公司仍然用特定方式创建用于它们的应用的 XML,而XML文档中的数据却是任何应用都可使用的。虽然开发者可以建立语意 模糊的DTD,或以自己的方式加密数据,但他们将会失去使用XML的许多好处。

XML并不禁止创建私有格式,但它的开放性是它最大的优点之一。
处理过程和数据分离XML为许多人提供了降低成本和增加收入的机会,对

技术人员来说,XML提供他们可以撷取文件中数据意义的语法;对企业中的程序 设计师来说,XML提供了在对象之间取得数据的语法;对于在商业伙伴之间建立 电子商务交易系统的程序设计师来说,XML提供了一种可撷取交易中的信息的语
法,使得交易更为精确和适时。 DTD与XL

3.1.2

Sch铷憾

1.DTD



作为XML词汇表的设计者,必须通过某种通用的方式说明词汇表的语法规 则。为此,XML

1.O提供了一种机制一一文档类型定义(Document

Type

Definition,DTD),并将其作为规范的一部分。DTD使用正式的语法定义XML文

档的结构和允许值。
DTD为XML应用程序提供了以下三项功能:

?精确的商业问题模型的文档
?模型与XML解析器之间的标准通信方式 ?验证有效性的解析器能够检测XML文档中的错误 DTD将带来以下优越性:首先,通过创建DTD,能够正式而精确地定义词汇 表。所有词汇表规则都包含在DTD中。凡是未在DTD中出现的规则都不属于词汇 表的一部分。许多解析器可以利用DTD验证文档实例的有效性。只要在文档实例
33

基于SOA的网上考试系统的设计与实现

中写入一条简单的声明语句,解析器就能够获取DTD,并将其中的内容与文档实 例进行比较。另外,LML创作工具也可以通过类似的方式使用DTD。一旦选择了 DTD,创作工具就能够实施DTD中的规则,它根据DTD中说明的结构,仅允许用

户在文档中添加DTD允许的元素或属性。
XML文档由元素和相应的属性组成。虽然我们还可以定义其他项,但元素和 属性是文档支持的两个主要概念。此外,元素的内容是通过其他元素或XML标准 中规定的基本类型进行定义的。DTD必须能够定义文档中的所有元素,元素可以 设置的属性,以及元素之间的关系。 DTD是与文档相关的。通常,文档中包含一条用于与DTD建立关联的指令, 当验证有效性的解析器读到该指令时,它获取DTD,并根据其中定义的规则对文 档进行检验。 DTD是目前唯~种声明XML词汇表结构和内容的正式方法。DTD是非常基础 性的概念,它有助于理解其他模式,以及如何利用XML通过标准的方式交换文档。
2.XML Schema

虽然使用文档类型定义(DTD)能够成功地定义XML文档,但是我们似乎希
望通过更加灵活的方式定义XML文档的结构。另外,在XML文档的设计阶段,最 好能够指定数据类型,以便尽量将XML文档的处理工作机械化。 XML模式()(ML Schema)是对XML文档结构的描述或定义。模式本身是用XML

编写的。DTD要求使用者学习类似SGML的语法,与此相比,模式的这一特性使
得它更易于被初学者理解。
XML—Data

Schema最早由微软提出,并于1998年1月被W3C接受成为“建
Schema

议"(Note),随后,在1999年W3C在XML-Data的基础上发布了“XML 工作草案",这也就是我们通常所说的XML 正式发布为W3C标准。
)(ML Schema,XML

Schema于2001.5.2日

Schema是一个基于XML的语法或schema规范,用来定义XML文档的标

记方式。XML Schema是一个由Microsoft建议的schema规范,它与文档类型定 义(DTD)相比具有很大的优势,而DTD是最初用来定义XML模型的schema规范。 DTD存在很多缺点,包括使用非XML语法,不支持数据类型定义,不具有扩展性

等。例如,DTD不允许把元素内容定义为另外一个元素,或字符串。XML Schema允许你把一个元素说明为一个integer,
在Internet

Schema

从几个方面改善了DTD,包括使用XML语法,支持数据类型定义和名域。例如,
XML

float,Boolean,URL等

类型。
Explorer

5以及以后的浏览器中的XML解析器可以解析使用

DTD或XML Schema的)(ML文档。

基于SOA的网上考试系统的设计与实现

3.'.3 XSL

XSL是一种用于转换和格式化XML文件的语言。转换意指变更XML文件为

其它的文件;格式化意指可视化或呈现XML文件。可以使用XSL样式表转换XML 文件为HTML格式来呈现数据,或是将XML结构转换至其它结构。 XSL实际上是两种语言。第一种语言是变换语言,第二种是格式化语言。变
换语言是一种很有用的语言,它与格式化语言无关。它能够把数据从一种XML

表示移到另一种表示,这种功能,使它成为基于XML的电子商务、电子数据交换、
元数据交换以及应用于需要在相同数据的不同XML表示之间进行转换的重要组 成部分。由于缺乏对人们要浏览的显示器上显示数据的了解,这些用途还要结合

起来使用。它们纯粹是用来将数据从一种计算机系统或程序移到另一种计算机系 统或程序中。 XSL呈现方式的处理程序提供了一种强大的模式,因为它允许组织可以从相 同的XML输入和样式表获得任何输出方式。当然,该模式只有在您所需要的输 出方式支持格式化对象解译器才会取得其益处。 XSL标准的功能十分的广泛,因此XSL委员会又从XSL标准中萃取出转换 的部份,并且又建立了新的标准--XSL Transformation(XSLT)。XSLT也是W3C 的建议标准,同时许多软件卖商也建立了遵循该规格的XSLT处理器一xSLT最
主要的目的是转换引擎,适用于许多地方。

对XML的解释可以在服务器端进行,也可以在客户端进行。如果客户端的浏 览器是一个XML浏览器,那么HTTP服务器的任务就极为简单,它只要链接正确 的样式表到文件上(或者文件本身也许已经有和样式表的链接),并将样式表发 送到浏览器上。如果客户端的浏览器不是一个XML浏览器,那么文件在被传送出
去以前必须转换成一个可以显示的文件。因此,将XML文件转换成可显示的文件

这一任务既可以由XML浏览器完成,也可以由HTTP服务器完成。 服务器端的XML转换 HTTP可以看作是文件服务器,但它除具有简单的文件服务器功能以外,还
有一些其他功能。

这些添加功能大部分都是脚本引擎格式,其中最普遍的是ASP、JSP、PHP
或Cold Fusion,它们都是基于模板的。

要想处理XML,HTTP服务器需要具有处理XML的附加功能—最简单的附加功
能是将XML文件转换成HTML文档,并将HTML文档传送到浏览器上进行解释(如 XSLT引擎)。 客户端的XML转换

35

基于SOA的网上考试系统的设计与实现

如果客户端是一个XML浏览器,转换任务就容易多了。实际上,几乎所有的 HTTP服务器都可以为XML浏览器提供XML文档。 过程很简单,HTTP服务器传送XML文档给浏览器。然后浏览器用一个专用

的结构一“处理指令”浏览接收到的文档。处理指令允许浏览器对与XML文件相
关联的样式表进行演绎并解释XML文档。

3.1.4

DOM

DOM(Document Object

Model,文档对象模型)是一种与平台和语言无关的

编程接口,它允许程序和脚本动态访问和修改文档的内容结构和类型。它定义了 一系列的对象和方法对DOM树的节点进行各种随机操作。
W3C

DOM是一种独立于语言和平台的定义,即:它定义了构成DoM的不同对

象的定义,却没有提供特定的实现,实际上,它能够用任何编程语言实现。利用 DOM中的对象,开发人员可以对文档进行读取、搜索、修改、添加和删除等操作。

DOM为文档导航以及操作HTML和XML文档的内容和结构提供了标准函数。 由于所有对数据集对象的操作是在客户端完成的,实际上是服务器数据对象
的一份复制品,这样做的好处是避免了网络承受大量数据通信的负担。 使用DOM有以下几点优越性: ?DOM能够保证正确的语法和格式正规性。 ?DOM能够从语法中提取内容。 ?DOM能够简化内部文档操作。 ?DOM能够贴切地反映典型的层次数据库和关系数据库的结构。 ◆DOM为遍历构成XML文档的节点树提供了自然的面向对象的机制。 DOM能够保证正确的语法和格式正规性:由于DOM将文本文件转化为抽象的 节点树表示,因此能够完全避免无结束标记和不正确的标记嵌套等问题。使用

DOM操作XML文档时,开发人员不必担心文档的文本表示一只需要关注父子关系
和相关的信息。另外,DOM能够避免文档中不正确的父子关系。 DOM能够从语法中提取内容:由DOM创建的节点树是XML文件内容的逻辑表

示一它显示了文件提供的信息,以及它们之间的关系,而不受限于XML语法。例
如,节点树蕴含的信息可以用于更新关系数据库,或者创建HTML页面,使得开 发人员不必纠缠于XML语法规范。 DOM能够简化内部文档操作:就修改XML文件的结构而言,使用DOM比使用 传统的文件操作机制更加简单。另外,你可以通过几条命令执行全局性操作(例 如:从文档中删除具有特定标记名称的所有元素),而不必采用繁琐的方法,首 先对文件进行扫描,然后删除相关的标记。

基于SOA的网上考试系统的设计与实现

Doff能够贴切地反映典型的层次数据库和关系数据库的结构:DOff表示数据 元素关系的方式非常类似于现代层次型和关系型数据库表示信息的方法。这使得 利用DOff在数据库和XML文件之间移动信息变得相当简单。 DOff为遍历构成XML文档的节点树提供了自然的面向对象的机制:DOff为处 理X儿文档提供了可编程的方法。DOff允许我们在客户端和服务器端修改XML 数据结构。IDM为数据库之间的信息传递提供了理想的机制。DOff在不同的平 台上可以有不同的实现方式。DOff是内存密集型操作,它不适于处理大型XML
文件。

另外,读取和操作XML文档时,使用DOff将保证各种平台之间获得最大程度
的互操作性。

本世纪初,W3C召开了第一次Web服务专题研讨会,目的为探索W3C应向 哪个方向发展才能实现新兴的Web服务架构的标准化,期间提出了一个“Web服
务堆栈"的构想,SOAP在WEB服务堆栈中作为用于XML消息传递的一种非常普 遍的协议,发挥着十分重要的作用。
SOAP(Simple Object Access Protoc01)简单对象访问协议是在分散或分

布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分: SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,
谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例:SOAP RPC表示(RPC

representation),表示远程过程调用和应答的协定;SOAP绑定(binding),使
用底层协议交换信息。

SOAP的两个主要设计目标是简单性和可扩展性。对SOAP简单的理解,就是 这样的一个开放协议SoAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议;RPC
作为一致性的调用途径,XML作为数据传送的格式,允许服务提供者和服务客户 经过防火墙在Interne t进行通讯交互。RPC的描叙可能不大准确,因为SOAP一 开始构思就是要实现平台与环境的无关性和独立性,每一个通过网络的远程调用

都可以通过SOAP封装起来,包括DCE(Distributed Computing Environment),
RPC

CALLS,COM/DcoM

CALLS,CORBA CALLS,JAVA

CALLS等等。

SOAP使用HTTP传送XML,尽管HTTP不是有效率的通讯协议,而且XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是 XML是一个开放、健全、有语义的讯息机制,而HTTP是一个广泛又能避免许多 关于防火墙的问题,从而使SOAP得到了广泛的应用。但是如果效率对你来说很

基于SOA的网上考试系统的设计与实现

重要,那么你应该多考虑其它的方式,而不要用SOAP。 SOAP优点:SOAP是一个轻量级的通讯协议(1ightweight
protoc01)
communication

;SOAP用于应用和应用之间的通讯;使用SOAP的应用通过HTTP

通讯;SOAP独立于任何组件技术;SOAP独立于编程语言;SOAP基于XML;
SOAP简单并且具有良好的扩展性;SOAP有望成为W3C的标准。

要了解使用HTTP的Web服务,需要了解HTTP是如何运作的,HTTP是一

个简单的通讯协议,并以简单的文字为基础进行传输,因此它无论透过何种传输
媒体都可以运作的很好。HTTP通讯由一系列的讯息在客户端和服务器之间传送, 可以分成请求讯息和响应讯息。HTTP标准定义了数个不同的请求方法,最常用 的是GET和POST。

为XML可以透过和HTTP相同的通讯端口传输现在大部分的公司都允许他
们的员工存取Web网页,同时大部分的公共Web服务也会监听80通讯端口,所 以大部分的防火墙允许数据可以自由的通过这个通讯端口,而防火墙软件通常也

不会检查通过该通讯端口的数据类型。使用80通讯端口可以在公司之间取得信
息,也不会造成网络管理员的复杂管理问题。 因为SOAP文件是透过HTTP(通讯端口80)传送,该文件几乎可以穿透任

何防火墙,因为大部分的防火墙都没有关闭使用该通讯端口的通讯,因此在不同
的平台之间取得信息不需要对防火墙的基础结构做任何变更。 SOAP使用HTTP作为底层通信协议,从而可以很好的使用Request/Response

机制来传送信息。

SOAP/HTTP请求包括一个GetLastTradePri ce的块元素,该

请求携带一个字符串参数和ticker符号,在SOAP应答中返回一个浮点数。XML 名域用来区分SOAP标志符和应用程序特定的标志符。

SOAP使用HTTP传送XML,尽管HTTP不是有效率的通讯协议,而且XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是 XML是一个开放、健全、有语义的讯息机制,而HrfP是一个广泛又能避免许多 关于防火墙的问题,从而使SOAP得到了广泛的应用。 在Microsoft的MSXML组件中提供了一个HttpReqest对象,可以用于用户
向Web服务器发送HTTP请求以及从服务器获取响应。不过这个HttpReqest对象 并不是W3C的建议规格。

38

基于SOA的网上考试系统的设计与实现

3.1.7

Web Servjces

1.Web Web

Services概述

Services是一类软件组件,通过网络实现其功能,但它们通常不是完

整的程序,而往往是一个功能型的组件或是大型解决方案。Web Services的目 的是通过定义良好的接口(Interface)实现程序之间的交互。
Web

Services是部署在Web上的对象(Web Object),因此具有对象技术所

承诺的所有优点,同时,Web Services的基石是以XML为主的、开放的Web规

范技术,因此具有比任何现有的对象技术更好的开放性。
Web

Services技术是为了解决在Internet环境下,松散耦合的Web

Services

之间进行互相调用、互相集成而设计的技术框架。以瑚L/SoAP/WSDL/UDDI为主
干的服务技术赋予了Web Services一个与传统对象调用技术相似但又不太相同 的体系架构。 在Web Services的体系架构例有三个角色:服务提供者、服务注册中心和 服务请求者。服务提供者是最终的服务提供商,它实现了一个Web Service,并

防止在在线服务器上供他人使用。服务注册中心是一个Web

Servi ces的注册地,

供Web Services提供商发布服务的技术信息,其中汇集了大量在线的Web Services。对于想要使用Web Services的请求者来说,一般是先到服务注册中 心去寻找可用的Web Services,并获取这些服务的API等技术信息,然后将请 求与服务进行技术绑定。更值得一提的是,从注册中心发现服务的过程可以用编 程的方式实现!

这三个角色之间的两两交互,都是使用Web Services的交互方式,一般是 使用SOAP来实现。而这些被调用的Web Services的调用界面则是通过WSDL(Web
Services Discription 2.Web Web

Language)来描述的。

Services的特点

Services具有如下特征:

◆独立与平台与语言:使用Web Services只需满足两个前提,能使用

TCP/IP协议进行通信,同时能够处理XML文档。Web Services并不要求使用某
种特定的编程语言或操作系统。既是一个手持设备上运行的Java程序,也能够 使用在Windows2003 Server上运行的C抖程序所提供的服务。

◆实施的简便性:与许多其它分布式计算解决方案相比,Web Services所
使用的体系结构和技术都相当简单。尽管Web
Servi

ces领域中采用了数量众多

的协议与标准,但实际上,由于操作系统和当前的开发工具(如Visual
Studio.NET)都能抽象这些协议和标准,因此编程人员根本无需了解这些内容。

基于SOA的网上考试系统的设计与实现

?完好的封装性:Web Services既是一种部署在Web上的对象,自然要具 备对象所拥有的良好的封装性。对于使用者而言,他能看到的仅仅是该对象提供 的功能列表。

?对象间的松散耦合:这一特征也是源于对象/组件技术,当一个Web
Services的实现发生变更的时候,调用者是不会感觉到的。对于调用者来说, 只要Web Services的调用界面不变,Web Services实现的任何变更对他们都是 透明的,甚至当Web Services的实现平台从J2EE迁移到.NET或者反向的迁移 过程,用户都可以对此一无所知。 ?服务的可发现性:Web Services服务模型的一个很重要的特性,是它提 供服务注册表。服务注册表提供一项重要且定义良好的任务:提供一种机制,既 便于服务提供者发布服务信息和界面,又便于服务请求者寻找服务功能和内容。 ?服务与状态无关:Web Services不持有代表客户机的状态信息,者使得 它在面对许多客户机时伸缩自如,非常有利于服务器集群作为Web Web服务器使用的HTTP协议也是与状态无关的。 ?使用协约的规范性:这一特性从对象而来,但与一般对象相比,Web Services的界面规范更加标准化和易于理解。首先,作为Web Services,对象
Services。

界面所提供的功能是使用标准的描述语言来描述(如WSDL):其次,有标准描述 语言描述的服务界面是可以被发现的;最后,在所有层次的处理都是可管理的,
也就是对管理协约使用同样的机制。 ◆使用开放的标准协议:最为Web Services,且所有的公共协约完全使用 开放的标准协议进行描述、传输和交换。这些标准些于具有完全免费的规范,以

便由任意方进行实现。这些协议一般由W3C或OASIS发布和维护。
?

高度的可集成能力:由于Web Services采取简单的、易于理解的标准

Web协议作为组件界面描述和协同描述规范,完全屏蔽了不同软件平台的差异,

无论是CORBA、DCOM还是EJB,都可以通过者一种标准的协议进行互操作,实现
了在当前环境下最高的可集成性。
?

实现成本相对低廉:由于Web Services使用现有的基础架构来交换信息,

而且大多数应用程序可以被重新包装或改造成Web Services,所以无需开发全
新的软件。同时Web Services还可以降低企业应用集成和B2B的通信成本。
?

可以分步实施:因为良好的封装和松散的耦合,所以实施时无须一蹴而

就,可以分布实现,这样可以降低技术突变而造成的压力,减少混乱,同样可以
降低资金和人员的压力。
3.Web

Services的应用

?信息服务

基于SOA的网上考试系统的设计与实现

最常见的Web Services是用于提供对信息的编程访问,如访问股票价格、 货币兑换比率、航班到达时刻以及外语翻译等信息。实际上,这些信息可能本来

就以网页的形式提供给了用户,但用户不能使用编程的方式对这些形式的信息进
行访问或操纵。而通过Web Services,这些信息便由现有的接口提供给用户,

一共用户使用标准的协议和数据表示形式进行访问。任何设备或程序,无论它们
采用何种平台或编程语言实现,都可以通过网络与Web Services进行通信以访 问这些信息。 ●集中化服务 除了为客户提供信息之外,Web Services还能充当一个方便的信息库,以

便跨多种不同平台的应用程序共享和操纵同样的信息。基于Internet的日程表
和文件存储等服务则是Web Services发挥这些附加功能的极好例子。通过这些

服务,无论用户身在何处,使用何种平台,都可以访问信息。使用信息集中化功 能,用户还可以授权给信任的第三方,使其也可以访问用户的信息。
?数据集成、聚合与分析

许多重要的简单服务不但能够提供多方面的信息,而且能将用户信息进行集 中并提供给访问者。这样,应用程序和作为中介的Web Services就能得到充分 的利用。通过编程方式访问大量数据时,可以不受数据所在位置以及所用平台的
局限,而能利用现有的组件数据来创建功能强大的新服务。假设所有公共交通公 司都使用Web Services公布其汽车、火车、以及航班时刻表供旅客查询,那么 应用程序或作为中介的Web Services就可以使用这些信息来设计任何两个地点 之间的最佳线路。

●应用程序的扩散和集成
Web Web

Services可以与传统的系统集成,从而开发出新的IT解决方案。进行

Services通信所需的技术相当简单,绝大多数计算平台都提供了这些技术

的支持。采用Web Services作为客户端与传统系统问的抽象层有许多优点:许 多新型客户端平台都能访问旧的系统,而且Web Services在处理客户端请求时, 还能对跨多个系统的活动进行协调。 ?基于对等模型和推模型的系统
Web

Services并不意味着多个客户端都必须使用来自同一个中心源的服务。

实际上,对于高度分布式的对等计算解决方案,或是在中心源负责将信息送往分
布在不同位置的客户端的情形下,Web Services同样适用。在这些情况下,Web

Services不是在服务器上运行,而是在客户端上运行。服务器上运行的进程再 连接到再客户端运行的Web Services。这种模型的实用例子,有将信息推送给
消费者的实时新闻服务系统,和软件自动分发与更新系统等。

41

基于¥OA的网上考试系统的设计与实现

3.1.8 SOA

SOA是一种架构模型,它可以根据需求通过网络对松散耦合的粗粒度应用组

件进行分布式部署,组合和使用.服务层是SOA的基础,可以直接被应用调用,从
而有效控制系统中与软件代理交互的人为依赖性.

SOA的关键是”服务”的概念,W3C将服务定义为:”服务提供者完成一组工作,
为服务使用者交付所需的最终结果.最终就构通常会使使用者的状态发生变化, 但也可能使提供者的状态发生变化,或者双方都产生变化”.SOA的几个关键特性: 一种粗粒度,松耦合服务架构,服务之间通过简单,精确定义接口进行通讯,不涉 及底层编程接口和通讯模型. SOA的基本特征.实施SOA的关键目标是实现企业工T资产的最大化重用.要 实现这个目标,就要在实施SOA过程中牢记以下特征:.可从企业外部访问、.随时 可用.粗粒度的服务接口.分级.松散耦合.可重用的服务 服务接口设计管理.标准化的服务接口.支持各种消息模式.精确定义的服务 契约。 1.可从企业外部访问 通常被称为业务伙伴的外部用户也能像企业内部用户一样访问相同的服务. 业务伙伴采用先进的B2B协议(ebXML或RosettaNet)相互合作.当业务伙伴基于 业务目的交换业务信息时,他们就参与了一次会话.会话是业务伙伴间一系列的 一条或多条业务信息的交换.会话类型(会话复杂或简单,长或短等)取决于业务 目的.

除了B2B协议外,外部用户还可以方位以Web服务方式提供的企业服务.
2.随时可用

当有服务使用者请求服务时,SOA要求必须有服务提供者能够响应.大多数 SOA都能够为门户应用之类的同步应用和B2B之类的异步应用提供服务.同步应
用对于其所使用的服务具有很强的依赖性. 许多同步应用通常部署在前台,其最终用户很容易受到服务提供者短缺的影

响.很多情况下,同步应用利用分布式服务提供者,这样可以响应更多的用户请求. 但是,随着使用特定服务功能的服务器数量的增长,出现短缺的可能性也呈指数
级上升.

相比之下,异步用于要更为稳健,因为其采用队列请求设计,影响可以容许出 现服务提供者短缺或迟滞的情况.异步应用大多数情况下部署在后台,用户通常 不会觉察到短暂的短缺.大多数情况下异步应用能够稳健应对短时间短缺,但是 长时间短缺则会引发严重问题.在服务短缺解决,队列引擎将罕见的大量工作推

42

基于SOA的网上考试系统的设计与实现

到共享的应用资源中,可能会出现队列溢出或者服务死锁.

服务使用者要求提供同步服务时,通常是基于其自身理解或使用习惯.在多 数情况下,采用异步模型可以达到同样的效果,但更能体现SOA的最佳特性. 当然,并不是所有情况下都应当采用异步设计模式.但大多数情况下,异步消 息可以确保系统在不同负荷下的伸缩性,在接口响应时间不是很短时尤其如此.
3.粗粒度服务接口

粗粒度服务提供一项特定的业务功能,而细粒度服务代表了技术组件的方法. 举例说明一~向计费系统中添加一个客户是典型的粗粒度服务,而你可以使用几 个细粒度服务实现同一功能,如:将客户名加入计费系统中,添加详细的客户联系
方式,添加计算信息等.

采用粗粒度服务接口的优点在于使用者和服务层之间不必再进行多次的往 复,一次往复就足够.Internet环境中有保障的TCP/IP会话已不再占据主导,建 立连接的成本也过高,因此在该环境中进行应用开发时粗粒度服务接口的优点更
为明显.

除去基本的往复效率,事务稳定性问题也很重要.在一个单独事务中包含的
多段细粒度请求可能使事务处理时间过长,导致后台服务超时,从而中止.与此相

反,从事务的角度来看,向后台服务请求大块数据可能是获取反馈的唯一途径.
4.分级 一个关于粗粒度服务的争论是此类服务比细粒度服务的重用性差,因为粗粒 度服务倾向于解决专门的业务问题,因此通用性,重用性设计困难.解决该争论的

办法之一就是允许采用不同的粗粒度等级来创建服务.这种服务分级包含了粒度
较细,重用性较高的服务,也包含粒度较粗,重用性较差的服务. 在服务分级方面,须注意服务层的公开服务通常由后台系统(BESs)或SOA平 台中现有的本地服务组成.因此允许在服务层创建私有服务是非常重要的.正确

的文档,配置管理和私有服务的重用对IT部门在SoA服务层快速开发新的公开服
务的能力具有重要影响. 5.松散耦合 SOA具有”松散耦合”组件服务,这一点区别于大多数其他的组件架构.该方 法旨在将服务使用者和服务提供者在服务实现和客户如何使用服务方面隔离开 来.

服务提供者和服务使用者间松散耦合背后的关键点是服务接口作为与服务 实现分类的实体而存在.这使得服务实现能够在完全不影响服务使用者的情况下
修改. 大多数松散耦合方法都依靠基于服务接口的消息.基于消息的接口能够兼容

43

基于SOA的网上考试系统的设计与实现

多种传输方式(如HTTP,JMs,TCP/IP,MOM等).基于消息的接口可以采用同步和异 步协议实现,Web服务对于SOA服务接口来讲是一个重要的标准. 当使用者调用一个Web服务时,被调用的对象可以是CICS(Center
Information and Communication for

Sciences)事务,DCoM或CORBA对象,J2EE EJB

或TUXEDO服务等,但这与服务调用者无关.底层实现并不重要.

消息类Web服务通常是松散耦合和文档驱动的,这要优于与服务特定接口的
连接.当客户调用消息类Web服务时,客户通常会发送一个完整的文档(如采购订 单),而非一组离散的参数.Web服务接受整个文档,进行处理,而后可能或者不会 返回结果信息.由于客户和Web服务间不存在紧密耦合请求响应,消息类Web服务 在客户和服务器间提供了更为松散的耦合. 6.可重用的服务及服务接口设计管理 如果完全按照可重用的原则设计服务,SoA将可以使应用变得更为灵活.可 重用服务采用通用格式提供重要的业务功能,为开发人员节约了大量时间.设计

可重用服务是与数据库设计或通用数据建模类似的最有价值的工作.由于服务设 计是成功的关键,因此,SOA实施者应当寻找一种适当的方法进行服务设计过程
管理.

服务设计管理根本上讲是服务设计问题,服务设计需要在两点间折衷…走
捷径的项目战术与企业构建可重用通用服务的长期目标.超越短期目标进行服务
接口的开发和评估是迈向精确定义服务接口的重要一步,同时还需要为接口文档, 服务实现文档及所有重要的非功能性特征设立标准.

在大型组织中实现重用的一个先决条件是建立通用(设计阶段)服务库和开
发流程,以保证重用的正确性和通用性.此外,对记述服务设计和开发的服务文档

进行评估也是成功利用服务库的关键. 简言之,不按规则编写服务讲无法保证可重用的SOA的成功实施.在执行规 则的过程中会产生财务费用,需要在制定SOA实施计划时加以考虑. 7.标准化的接口
近年来出现的两个重要标准XML和Web服务增加了全新的重要功能,将SOA 推向更高的层面,并大大提高了SOA的价值.尽管以往的SOA产品都是专用的,并 且要求IT部门在其特定的环境中开发所有应用,但XML和Web服务标准化的开发 性使企业能够在所部署的所有技术和应用中采用SOA,这具有巨大的意义.

Web服务使应用功能得以通过标准化接口(WSDL)提供,并基于标准化传输方 式(HTTP和JMS),采用标准化协议(SOAP)进行调用.例如,开发人员可以采用最适
合门户开发的工具轻松创建一个新的门户应用,并可以重用ERP系统和定制化

J2EE应用中的现有服务,而完全无需了解这些应用的内部工作原理.采用XML,门

基于SOA的网上考试系统的设计与实现

户开发人员无须了解特定的数据表示格式,并能够在这些应用间轻松第交换数
据.

你也可以不采用Web服务或X札来创建SOA应用,但是这两种标准的重要性
日益增加,应用日趋普遍.尽管目前只有集中服务使用者支持该标准,但为了大多 数的服务使用者都会将其作为企业的服务访问方式. 8.支持各种消息模式

S0^中可能存在以下消息模式.在一个S0^实现中,常会出现混合采用不同消
息模式的服务.

无状态的消息.使用者向提供者发送的每条消息都必须包含提供者处理该消
息所需的全部息.这一限定使服务提供者无需存储使用者的状态信息,从而更易 扩展.

有状态的信息.使用者与提供者共享使用者的特定环境信息,次信息包含在
提供者和使用者交换的信息中.这一限度使提供者与使用者之间的通信更为灵活, 但由于服务提供者必须存储每个使用者的共享环境信息,因此整体可扩展性明显 减弱.该限度增强了服务提供者和使用者的耦合关系,提供了交换服务提供者的 服务难度.

等幂消息.向软件代理发送多次重复消息的效果和发送单条信息相同.这一 限度使提供者和使用者能够在出现故障时简单的复制消息,从而改进服务可靠
性. 9.精确定义的服务契约

服务是由提供者和使用者间的契约定义的.契约规定了服务使用方法及使用 者期望的最终结果.此外,还可以在其中规定服务质量.还须主要的关键点是,服
务契约必须进行精确定义.

META将SOA定义为:”一种以通用为目的,可扩展,具有联合协作性的架构,所 有流程都被定义为服务,服务通过基于类封装的服务接口委托为服务提供者,服 务接口根据可扩展标识符,格式和协议单独描述.”该定义的最后部分表明在服务 接口和其实现之间有明确的分界.
SOA的优点

编码灵活性:可基于模块化的底层服务,采用不同组合方式创建高层服务, 从而实现重用,这些都体现了编码的灵活性.此外,由于服务使用者不直接访问服 务提供者,这种服务实现方式本身也可以灵活使用.
明确开发人员角色:例如,熟悉BES的开发人员可以集中精力在重用访问层, 协调层开发人员则无须特别了解BES的实现,而将精力放在解决高价值的业务问 题E.

45

基于SOA的网上考试系统的设计与实现

支持多种客户类型:借助精确定义的服务接口和对XML,Web服务标准的支持, 可以支持多种客户类型,包括PDA,手机等新型访问渠道. 更易维护:服务提供者和服务使用者的松散耦合关系及对开发标准的采用确 保了该特性的实现. 更好的伸缩性:依靠服务设计,开发和部署所采用的架构模型实现伸缩性. 服务提供者可以彼此独立调整,以满足服务需求 更高的可用性:该特性在服务提供者和服务使用者的松散耦合关系上得以体 现.使用者无须了解提供者的实现细节,这样服务提供者就可以在WebLogic集群 环境中灵活部署,使用者可以被转接到可以的例程上. SOA可以看作是B/S模型,XML/web Service技术之后的自然延伸.SOA将能 够帮助我们站在一个新的高度理解企业级架构中的各种组件的开发,部署形式, 它将帮助企业系统架构以更迅速,更可靠,更具重用性架构整个业务系统.较之以 往,以SOA架构的系统能够更加从容的面对业务的急剧变化。

3.2系统功能模块
本系统共分为5大功能模块,其中包含20个子功能模块,如图3一l所示。

网上考试系统

题库维护





智能组卷





自动阅卷





结果统计

试 已 题 分 录 类 入 整 修 理 改 试 题 删 导 除 入

程 试 序 题 题 及 答 标 案 准 加 答 密 案 提 打 取 包


试 题 分 类 题 型 搭 配

随 机 抽 取 低 频 试 题

试 题 提 取 解

考 试 界 面 试 密 题 还 呈 原 现

考 生 答 案 提 取

考 生 答 案 保 存

分 类 阅 卷 记 分

解 密 试 题 删 除

考 试 结 果 汇 总

统 统 计 计 图 结 表 果 生 输 成 出







建 议

图3-1网上考试系统结构图

数据库设计

基f SOA的日上考试系统的设计与实现

为了提高程序运行效率.节省时间和空间资源占用,本系统试题库存储采用 数据库与文件相结合的策略,其中判断题、选择题、填空题经过加密全部保存在 数据库中,主观题以文档形式经过加密保存在压缩包中,其表结构如下
袁卜1教师登录信息袁



教师登录信息表

f表说明J教师登录信息 l主键l TEACHERID
J外键l

麟 邈瓣黼 添j鎏壤 醚蕤i
PRIVILEGE TD



j顼

l教师编号 姓名

TEACHERⅢ
TEACHER

CHAR



NOTNUI工

2 3 4 5 6

NAME

v气RCHAR CHAR B00UlAN

30 8

NOTNULL
NoTNULL NoTNULL

登录密码

PASSWORD

是否有效
创建时间
角色编号

ISⅥUJm
CREATE TⅡ田l PRIVILEGE ID

D舳TⅡ咂
CHAR 2

NOTNULL
NOTNULL

说明:

1、只有是否有效字段为真,教师才能登录。 2、外键去关联角色表。
表3-2学生登录信.t-袁

表说明I学生登录信息

主键l
外键I

STUDENTID


I 2

隧馥耀豳
学生编号 姓名 登录密码 是否有效

■■■■■■Jhnz口q■…—口z口x=《x■∞B 鲻 盈整嚣黝 罐
STLJDENT ID CHAR

TEACHER
ISV扎Ⅱ)
CLASS

NAME

V啪HAR
CHAR B00LEAN VARCfiAR

8 30 8

NOTNUU,
NOTNULL
NOTNULL NOTNULL


4 5

PASSWORD

班级
专业 联系方式 是否己登

20

NoTNULL NoTNULL


7 8

PRoFESSIONAL TOUCH WAY
ISLoGIN

、0墟CHAR

煳C脚

30
80

BOOLEAN

NoTNULL

说明: 学生只能登录一次。
表3—3试题题库袁

基f SOA的月±考*系统∞口"与实M




l 2 3 4 5 6 7

j类转j” “。%熟黪隐+学’一*。”。一’跨 镕。髓眵一-e
题库编号 试题编号 科目 难易程度 题型 分数 所属章节
1ESiSlORE LD CHAR 、,ARCHAR VARCHAR C}【AR CHAR 、,ARCHAR 、0~RCHAR

}满
8 20 50 4 8 3 50

麟。蒸 l、嚣
NOTNULL

QUESTURE
SUBJECT ID

1D

NOTNULL NOTNULL NOTNLILL
NOTNULL NOTNULL

DIFFICULTY LEVEL

QUESTURE
SCORE CHAPTER

TYPE

说明: 当删除题目表中记录后,题库表中的记录相应删除。 袁3-4题目表

I外键l


i ;
54

勰 黼麓麟 鲤燃糍黼
试越编号 QUES'IuRE QUESTURE QUESTURE ANSWER
CHAPTER ID

。豳兹l囊《瓣
NOTNULL NOTNULL

科目 题型

SUBJECT ID TYPE

愀CF04月 Ⅵ嗽HAR
CHAR



20 50 8 300 50 50

题目内容
答案 所属章节

Ⅵ嫩HAR 、‘蚍HAR
、,ARCHAR

NOTNULL
NOTNULL

NOTNULL

说明:

题目表中包含所有选择题、填空题、判断题等。
表3-5试卷袁



试卷表
ID SUBJECT ID

l表说明I从题库中调题,组织试卷 f主键『TESTPAPER ID PAPERQUESTION

l外键I OOESTOP,E

ID

QUESTURE

TwE


l 2 3 4 5 6

试卷编号 科目 题型 试题编号 试卷题号 所属班级

————豳蕊涮商掰嗣■髓■鲻蓝香嬲 豳
TEST脚ER
ID


库中号 成卷号

愀o‘4月

20 50 100 2 4 8

NoTNULL

SUBJECT ID

、0幔CHAR
TYPE ID ID

QUESTURE QUESTURE
CI|ASS

Ⅵ蚍HAR
CHAR

NOTNULL
NoT N【几L NOTNULL NoTNULL NOTNULL

PAPERQUESTION

CHAR
CHAR

说 明:

基于SOA的时t考试系统的设计与实现

表3-6考试表
考试表

表说明l对考试进行设定

主键l 外键l


一?一
2 3 4 5 6

戳躐 豳峨鞠黼黼 麟
TESTPAPER ID

CLASS

SUBJECT ID

TESTPAPER

ID

PAPERQUESTION

ID

所届班级 科目

嘲一一——_■霉鞋 Ⅵ憾HAR
CLASS CttAR




NolNULL NOTNULL
NOTNUI,L NOTNULL



SUBJECT ID
TESTPAPER

50
20 4 6

试卷编号 试卷题号 考试时同 是否开考

ID ID

Ⅵ~RCHAR
CHAR CHAR

PAPERQUESTION
TEST TIME

NOTNULL NoTNULL

玲TEsll强0珊

B00L队


说明: 当试卷表被删除后,考试表中相应记录也消失。
表3-7学生考试蛄果提交表
学生考试结果提交表

表说明I学生答题情况 STUDENT ID 主键l

SUBJECT ID

TESTPAPER

1D

_
1 2 3

。”“∞圈_|§

黜圈I匿鞠 豳懿强豳 藤
CHAR CHAR 8 8 NOTNULL N0下NUI,L NOTNULL NoTNULL


5 6

所属班级 学生编号 科日 试卷编号 试卷题号 所写答案

CLAS8

slu)ENTⅢ
SUBJECT ID
TESTPAPER ID ID

Ⅵ蚍HAR
、0~RC}IAR C}IAR V^RCHAR

50
20 4
100

pAPERQUESTION WRITE^NSWER

NOTNULL

说 明:
袁3 8学生成缋表 学生成绩表

表说明l记录学生的成绩
主键I 卟键f
STUDENT 1D
S’

nJT)FnTD
CLASS

SUBJECT]D

TESTPAPER

ID H

SUBJECT H)下ESTPAPER

一“—圈 ■■&————一I一 圈匿粥氆_日
l 2 3 4



所属班级
学生编号 科目 试卷编号

CHAR CHAR VARCHAR

I 8

NOTNULL

STUDENTID SUBJECT ID TESTPAPER ID




50 20

NOTNULL NoTNULL NOTNULL

VARCHAR

基于SOA的网上考试系统的设计与实现



————L———————.-——-—_____-__■__--_.____-_——_____-______.-_-_.___==:____-_JL-?________________-____’_^_一_______。●-_-_。。。。。。。。。。。。‘’’—一

l学生成绩I PAPERQUESTION

ID



cHAR







NOTNuLL

说明: 当学生考试结果提交表没有时,无学生成绩表。
3.2.1试题库维护模块

1.试题库结构自定义子模块:供教师进行学科类别及课程体系定义与更新。

2.试题库内容维护子模块:供教师对知识库进行添加、修改、删除等更新
操作。 3.服务描述与注册子模块:供教师对所提供的服务进行描述并且在中心服 务器进行服务资源URI的注册。

厶森 广/乜 ./‘ ∥未
试题库维护

\.

\竺兰/

图3-2试题库维护模块Use

Case

Diagram

3.2.2组卷服务业务逻辑模块

1.业务接受与解析子模块:对客户端提供的考试信息的各项参数进行分析, 生成考试试卷。 2.卷子模块:在该考试科目试题中根据遗传编码方法进行:染色体的编码、
初始化群体、选择、交叉、变异、等步骤进行组卷。

基于SoA的网上考试系统的设计与实现

3.2.3考试业务逻辑模块

1.考生登录模块:提供学科、类别及课程选择,以及密码的提交。 2.获得试卷模块:提供分类索引目录树,供提供考试相关科目的考试试卷。 3.考试状态体现子模块:对服务器返回的提问响应进行页面格式化(XSLT)
并生成考试状态页面。 4.提交试卷子模块:对考试结束考生提交试卷。
3.2.4身份验证与注册模块

1.专家身份验证子模块:对授权答疑专家进行身份验证,对知识库的维护


操作授权。

2.专家注册子模块:广泛吸收有关专家加入到答疑队伍,对专家的加入请 求登记表进行处理,审核后发送录取通知。 3.客户注册子模块:自由注册,记录客户的专业和偏好,以提供更快捷的
服务。

④.,7.、、

图3-3身份验证与注册模块Use
Case Diagram

5l

基于SOA的网上考试系统的设计与实现

3.2.5系统维护管理模块

1.数据库维护和管理子模块:供系统管理员对数据库结构、索引、XML元素、 属性进行维护,对系统和数据库的性能进行优化,对垃圾记录进行清理。 2.页面格式维护子模块:对客户端呈现的所有页面格式进行定义和维护,主 要是XSL转换文档和CSS样式单的定制。 3.出题教师授权子模块:对审核合格的出题教师分配帐号和密码,并给予相 应学科相应专业试题库的维护权限。 4.试题库资源及访问量统计子模块:对系统现有资源及访问量进行分类统 计,并提供分析报表,为系统发展提供决策依据。

5.系统安全子模块:对系统资源及地址的加密解密,对业务逻辑进行保密,
对防止外来攻击进行防范,对系统代码及数据库进行备份及故障恢复等。

图3-4系统维护管理模块Use

Case Diagram

52

基于SOA的网上考试系统的设计与实现

3.3系统类图设计
系统主要类的关系图如下:

…自

下、

图3-5系统类图设计 其中每个类的详细描述如下: 3.3.1考试提取类

图3-6查询提交类
53

基于SOA的网上考试系统的设计与实现

3.3,2服务监听类 类成员说明
Listener

用户提问语句或关键词组合或索引列标中链接名 学科名称 专业名称 方向名称 课程名称 凄收SOAP包 侮XlVlL从SOAP Evelope中剥离 )oM解析请求的问题

;tring asking; ;tring knoledge; ;tring itring

major; subject;

;tdng course;

七ceiVeO; npackO; omParseO

图3-7服务监听类

3.3.3试卷生成类

图3-8试卷生成类

3.3.4试卷提交类

图3-9试卷提交类

基于SOA的网上考试系统的设计与实现

第四章系统实现
4.1系统模块与界面的实现
4.1.1指导思想

登录模块供用户登录进入系统使用,用户首先选择用户,只有当密码符合时, 用户才被允许进入系统,实现方法是对用户表进行遍历搜索,若存在记录满足用 户输入的密码,则打开主窗体,并记录登录事件和相应资料。当密码三次输入错 误时就退出。
4.1。2试卷自动生成系统结构图

试卷自动生成系统从功能上分为几大模块图4_l系统体系结构: 系统管理模块又分为用户权限的分配,赋予权限、修改密码,新增用户四个 模块; 题库管理模块又分为题库的修改模块(包括增加、删除、编辑、新题录入)、 查询模块,比如,又将修改界面中其分为增加题目,修改题目信息、删除。

试卷管理模块又分为题库自动生成模块、手动生成模块、试卷修改模块、试
卷删除模块、试卷预览模块。

试卷自动生成系统

登录系统

系统管理



I题库管理



l试卷管理

修改密码 用户添加 用户删除 修改权限 数据管理 退出系统

试题输入 试题查询 试题添加 试题修改

手工生成 自动生成 试卷修改 试卷删除 试卷预览

图4-1试卷自动生成系统体系结构

55

基于SOA∞日±考试系统的R”与实现





3模块功雒实现与界面设计

用户管理系统:图4—2用户管理系统,为保证用户使用系统的安全性,本系
统提供了密码更改功能,更改用户密码时.先输入用户名和原密码,然后输入

新密码和确认密码。更改密码成功后,系统会提示用户密码修改成功.卜次请使

囤4-2用户管理系统

用户管理系统实施程序如下: <%@pagecontenfr,pF”text]htmI;chatse/=GBK’’%)

《iffsesslon getAttribute(”adminprlv“)=:null)f
%)

<Scriptlanguage="javaScript“’ alertC您目前尚来登录!请首先登录幕统!._);
</script>

window.10cation‘。。≈#∞㈣‘getContextPalhO%>lexamManage/adminlindex.jsp”
<%}else

i讯!session肛tA埘bll把(”adminpfiv")eq吲s(1镕。。”
&&(1sessiorLgetAttribute(“admlnpriv!t).e/l啦lsC…I’)”f
%> ‘script

tanguage2"javaSeript’’’

alert(”您无此权限,绪与管理员联系!'_):
wiidow.10catloh。”<%-xequest

。砒c西p
<%)el虻{9缸
<html> <11ead>

gelcon蜘P砒0%)mx枷Managc^dmj叫ndex卿”

<title>系统管理</titie>

基于SOA的月上考试系统的设计与实现

jlink





tel=’'styIeshcet’。

hre一‘<%=request.getContextPathOV≈'/examManage/public/style矗s1’>
</head>
<Fraraeset rows=”10%+”bnder=0)

<frame㈣”mytop¨sr。=”topdsp’。>
<frame/lame=。’mybuttom”src=‘’buttom him’’>

</Framese伊

mnnI>
《%}%>

学生注册系统:如图4 3学生注册系统

冒4-3擘生注册系统

学生注册系统实现代码如下:
(%自肚ge c。ntentTyp畔”t『oxt/Mm!;charset-GBKnj5>
<!i目page import=1jav8.sql.?“%)

<jsp:usellean id-“colla“scope=”page”clas s一。exa曲R
(HTML> <HEAD>

dbConn”/)

《TITLB>入学簦记表(/TITLE>
</HEAD>
<BODY> (%!

,,定义变量

ReSllitSot舻null:

Stri玎g username St


;//用户名

ing

personalcode;//身份证号
pwd gender bi rthdate

String Str ing String

://密码
o//性别

://出生日期 ;//联系电话

St rin垂phone

Str ing %> <%

sql=㈣:

//)下面获取用户提交过来的数据
requeSt.setCharacterEncoding(1tGBK”);
u sername

=request.getParameter("Name”);

?{||一i誓

//骶产名

per

sonalcode=request.getParameter(’’PersonaICode"毙?、_

//。势德证号

pwd gender

—request。getParameter(”p№H);
=request.。getParameter(”Sex”);
釜request7

ij





麟/密码
麟牲别

j麓:|誊

biIIthdate
phone
SOUrCe

7,getParametef("BirthDat鳓;蠹i誓;:¨i。誊黪虫鐾日期
。爱,i|{1j
j。j


=request.getParameter("HomeTe∥);誊
=reques

//联黪电话
//信息来源

t.getParameter【’’InfoSrc”);

........i...f.......i1....-....+..._....??li..??

。叠一0S酒l荨《se。l菇萎s。t…u“den。tifId,name

from test—studen…tinfo wher

sql 4-=”certid。’!’+per sonalcode+”7”;

rs=conn.executeQuery(Sql);
,.if(。rs.next

0”{

OUt。.printlnp<Center>”);
OUt.print OUt.Drint

In(?颦磷斌萋码为:”+personatcode+”的用卢已经注册!<br><br>”); I蓑(”瀣藏的问爹j重£}为:”
+r

s.getInt(”studentid”)+”<bf≥<br>”);

Oilt.printin蠢篡’f注瓣的确旁蒸碧灞参”+rs.getString(:'name”)+”<br><br>”);
OUt。printlll懋毒哆器您意澎鬻警录密码,请向管理员咨询?<br><br>”);

OU:_lt,Prin;tln@《麟篝ref.=java戮s。ciri。pt:hi stor爵back 0>单击这里返回注册页面</a>”);
out.pr int

In(”</cent∈汀≥慧;
return;


sql=”insert Into

teSt—Studentinfo心

58

基于SOA的网上考试系统的设计与实现

j誊鬻黪缆麴霉!辫?曩。
”n孕me,参囊tti虫墨磅警鸯纂Qrd;gender,hi rth,phone,email,hQf疃£嬷畦;h照霉Q姐鬟 ≤≥磐≯,≤酿 +#?,txdz,yzbm,school,major,g.time;degree;engti sh;work_year”;

4-尊

。i:蠹i鹜+霉i薹糍i譬暑霎辫_|:iixi,。t Jgz,goal,SOHrce,regtime)Vaiues。:o;

溪戮蓦髓i鬻嚣麟
、’

ij蒜。ii囊i耄萎;纽s髓lj_a埘_e量!i 7,~。y=7。y’m~‘ 。一一。7

nu

ll

爱&,0Username:equais(“”))1{

j一鼍ji二臻I:l、;《》落黪黪零饿?t

username+”7,”;

i雾瀵i辫囊壤麟{ 毒攀爹缀霪荔荔獭黪套题ntln(“<hl>属雳磐输黍非法!i请簿留霉哲输密藏i÷爨皱黧鬻攀曩
蠢鬻攀i鍪冀ii囊夔毒囊囊囊i爨t}l:【l(”<a:hre[号javaSc雾}pt:H誊曼jbiy:b1|j:℃k‘◇多善兽国舞7a囊黝;:¨

溱鋈澄凝薅||||酾缓
;≥;i£I;f霹每零sO酶’l囊Q酾“i≯l釜曩11{j警nul
1 && !persona

lcode.equai s(i!I!)墓。。&&

篱器蓍霉麟t籁醺瀚激麟萋攀瀵≥
v一一一一-oi’t~。 *._

V。一囊*。,≯篡i鐾鋈!i零礤薹i翳鬻篓磐篓j十一perSonalCode+.“7,“;
i。雾’t

i纛j攀{

※ji鬈缀荔;鬻麟鬻鬻i粪张矗(鹦h玲用雾身绣蠢鞠淡.蒡涛!+请返回萋纛蕊褰黪搿艟>”);
1『…。薹ij,毫jitj毫。。p礓《争i£垂£lf】l(i≤李hr专l参jatascript:hi story.b每譬霹◇蓥i基固s/a>”);
,o。一n一

_…㈣。,1

+参i荔囊毛j羔i j?凄篾≤孽磷;;II

~;{;!|,ij。i零.幻赣‘ij爹!。-nul|l&&!p夥d.equal s(“‘’))(

j。iji。ii荔巍纂够j寰蓦麓;磐’黪曩唧|臼【|蔫、够,鬈鹭。黪象
蠢≥篱淤囝钨镳憩
1;叠j鬻誊谶灏彝nt缝@巍誊鬟密鸽输蒺j誊滋_请返回重新输入!</h1 1>Jt);
一,

out,printInt!豢8 h誉el甍javascript:history.back0>返回</a>“);
retUrn:

。誊二荔《i≥il鬟墓嘲e,j{考曩n。u。l 1 ;j臻溪菩獭譬_

II:&jj!ge枣der.equal-s(””))

一≯j≥…j;缓;孚i=≥≥稽唾銮?+==;≯嗡妻i 1=卜,gende誊7。净’’7,’‘≯

一。4i。o毹.pr派tin(??<ht≯性别输入非法!请返回重新输入l<i/hl>”)≯

。誓爹_馘tjip]I!I童Btln(,’<a秘箩9.|l≥jav璺s『c蔓ipj薹廷}毒l匆ry:为鳞鬈O≯墨询(/a>”);
}龟turn;

59

基于SOA的网上考试系统的设计与实现

奢一荔?麓,蓼

。≥毒瑟

if(bir矗谗磊t宅?!≤≯nnll&磊,;_;:b_ilrthdat每。eaual攀<“曩))¨{

攀i鍪豢鬻囊纂灏q黪轳,缓麟黪童t(v龋谚甄每蠹≮3簸。,黟i十i瓣懿礤霉t簿,豢j嗲,i黪‘鹱≯雾;

囊纛蘩i囊鬻囊鬻鬻蘸鬻

攀鬻繁鬻鬻O鏊U麟獭藜麟;疆re…’f。=。j“爹aVa…SC~r。i:p“t【|I:his‘itoir‘y.bajc、kgOt>,返黼黼瓣
??_≥。誊蔫r。1e。tiu7iirin;i


粪鏊囊燃i戮鬻麟獭篓纂黪l爹霉缫彝期输鬻非耩磐j囊秘骥鬻蠹糯瓣鳞溅鬻骥誊


蒸鬻≯澎鎏F冀鳆蘸蒺墓溺壤壤萋筵麟,髓鎏辫戮戮熬黪≯≯弱
j鬻鬻i鬻攀鬻戮燃i熬囊鍪囊秘溪壤≤繁黍囊l攀
ii豢溪纛爹鬻瀵鬻鬻


0~-一:

.蠢ou臻t:.!pi

riint琏囊《躲摹麟§麟囊溺黼i囊囊囊睁i警辩§务滋;爹i戮骖辫囊

0ut.println绺a.¨href-二javas'毒r:ipt:/M;stofy:ba。若鞠i萋遗辔麟褥澎浮

ij爹爹≤…滋黉t‘鳜ur囊n;j
纂篙缀谶

j戆麟簪i黪鬻鬻;篱糍灏鬻浚囊甍辫
’一穗。sq;l誓-。臻麟勰跨镌固掣‘;

m霸赫参缓毳撼缝獯囊菇壤臻

鬻j豢爹霉篱豢攀螽麟荔渤; ;|鼍j秀缓毒逐蒸冬
j鬻j攀誊鍪|瀚r二e~?siui?簿kt攀..-…-。:IIg舔O酶rtn。.辫鲻鬻辫醚迢j瓣舔|舔

霉鳓囊瓣赣獭囊囊麓鹣蘸l鳓淹魏二谚鼷谶鞴鳓麟獭鬟鞘磁鬻蒸瑟溺黼
鬻繁鬻獭鬻鞴淤翥?。浚囊
毒戮攀潺 誊!≤蘩i雾黉蠢鞘滋囊攀瀚潮
r蠹e‘s…p谚ons
蠖鬻麓8蓬耪蓥戮ij
oi嘲i麓『『j薯7◆罐etuen;.
z1%。%拗矗,
?。liS一。‘?i。、T

誊≥一i鬟j{}catch(Exi“.。ee。。p/t《i。耄on二i孽麓黧

e。,s鞘e:n,醚dR}∈;麟鲻攀麟蒸颟鹱虢瓣秘鬻斓蝴麟鳓麟瓣;獭荔鬻鹈麟
frQ臧i爱冀蘸§赫霉童黪a鸟蘸奠i琏麟鞠啦i§荔誊蠢!雾

奢j一褫漤哇墨黪翟嘲羹霪缓鬻荔霪鬻秘移黪骥篱黪鼬颦缓
j辫:翳i7黪i誊骥簪蛰鳜灏聋麟Q赡缀e鬻黪熬
_+澎鬻钒ri
7~

。。”一,sql。尊!select‘§:tud:entid,<gasswo。rd

纛哆藩

基于SOA的月±考试系统的设计与实现

ifos.next0)f

usorid”gotInt(“studentld”)+” passvordⅦ.getString(”pas sword”);



0ut.pri

nttn(”‘。enter>q;



out.priat【np您的信息已经2E确保存。请记住您的用户ID和密码

<br><br>O;


删L printin(旧户1D
OUL



十useri[d

十1。(br><br>“);

println(“_田户密码:‘+password+。<br><br>。); href=/DefaultWebApp/examlanage/test/index
htm>

芝~~砒埋r聃t抽p<a

单音这里透啦录露面*,驴’);
狮t
%>

printIn("</center>1):

‘/BOD聆 </HIWL>

鹰赣圈■l_一m嚣黼盈嘲曙瘟嘲盈嘲瑶灏鬟缮掰蘸匿臻露盟齄鐾鼗蒜麟蠹嚣潮
I蕊8西糊脚恤-试瑚l州柚蝴mk—惭酬馘脚】¥

_…………………一日%细船 l强氆。圈啊髓世疆瑶睡舞鞫霪麓疆随麓髓醴醋甏嚣鎏骚嚣蓬釜薹整筮i腰
考试系统:如罔4-4考试系统 舅臻溺鳓髓秘嬲


Student Center

。一

m:[二二二]镕日:[二二二]
圆圈

鞠’^像的掌且ID和密码

薛l嚣嚣,舅I器毋蛩毗妒,鳟蠛#群滞辩州。搿
囤4-4考试系统

一耀.伴:厚抖脚翻

学生登陆考试系统的验证工作实施程宁

基于SOA的网上考试系统的设计与实现

<%@page contentType=”text/html;charset=GBK”%> <HTML><HEAD><TITLE>学生考试系.%充</TITLE>
<META http,equiv=Content—Type content=”text/html;charset=gb23 1 2”> ≤SCRlP下language=,’JavaScript’’>
function

isNumb爸i:Stting(InString,RefString){ if(InS竹ing:l龟ngth==0)retum false; :fo:(coun皆o;Count<InString.1ength;Count++){
//TempChar=InString.substring(Count,Count+1);

TempCha慝InStringicharAt(Count); if(RefString.indexOf(TempChaLr)—=一1)
retum蠡Ise;

retum

true:


function
vat

check2"orm(theFo订n){
id=theForm.studentid.valHe;

ir

od--…’){

arert(”请输入你的学员ID!'t);
theForm.studentid。focus0;
return false; )else if(iisNumberString(id;'10 123456789”)){

譬le蜓”学员 I防必须是数雩∥);
theForm.studentid.focus0; theForm,studentid.select();
retllm false;

if(theFo删:pwd.value=一””){

alert(!囔输入你的密码∞;
theForm,pwd.focus();
retum false;

theForm。submit();

62

基于SOA的网上考试系统的设计与实现

邻鬈骝鞠骖
<{inkte霹Sty!esheet'’href=“../1)ublic/styleStu.CSS”>
<BODY

bgCoIo枷c!ass=,ss,>

≈参&n嘛渤睁
<王≯&n惦融掌勰≯

劐鹱:Widths650鹂{蘸舀nte≯Iborde每够
。.玎R>

<FoR艟菊黼∥l碴矗确腓”积ti6n-,'chkstudent.jsp'’method=poSi事

.≯7:警笔嗣∞,迸增嘲嘲搠秘@酶哦囊黪穆src-".i/images/cenl簖西严薹.瓣i承h专35胁瓣谚÷ 。j警誊『;『;|…。擎I_p ÷vAii酾籀酾酾蠢纂糍一,。_硒韬拦”。:/register/indeX;htmt;淄靴誉i誊靠ig矗鹾1|7

i蘸i黼酾蛹麟融暮撕秘颟挺酾连滋每§黼2罐i髟width=70 b够d苦毒o>锨鬻瓣霉》

囊j滋
i爹攀皤礴

薯鬻二攀囊◇j鲻iS委a.--3砖i麟71> _<厂Ip>
j。,∥慧l囊峨蓉獭gn=bottOm height=7l≥ </TD>
。j豢圆醴
獗;;鬻j[:|l囊

警:≥澄i蓊穰躐黼囊
_



一<DIV。?。譬。≥≥

align=”center’’><蹦G

height=”

瓣黎∞曼铷lt照黔pp穗瀚l洳黼确趋e酾nput.git"width=224></DIV>
,</TD>

渤游i渤<。TD.。vA。!ign鳓ottom> </TD>

1|i镳≈9融
i一《I?R> <TD colSpan=4>
i:V≯

?<DIV蝴gn=’'center">
ID:<IN UT maxLength=30

io…≥爹

name="studen订tid"7>省码:

_}j。j童j o,<INPUT type="passw70rd”hame=’+p州”>


j_?。。,|</.DIV> i。纛</TD>

,</TR>

。誊,移
?≯’。1蔫伽colSpan=4’>


.j<DIV align='’center”>

63

基于SOA的网上考试系统的设计与实现

<INPUT

type=!’button"

value-”确

定”

name2“submitl”

onclick=”c}1eckFGrm(this.form)”> ?I_:;|l
。『j

<INPUT

type='’reset"value=”重写”name=”Subnlj∥>

i?一!¨</DIV>

</TD> </TR>

量一0<%String。msg=(String)req oest.getParameter(”errmsg”);

if(msg!=null&艮!msg.equals("")){
%>
<tr

align=’1center”> <td cotSpan=4> i<DIV align='’center”>

<br><br><br>.i<b1.=:.<b伶<br≯<=114><font eolor=red><%=msg%></font></h4>
</DIV> </td> </tr>

<% } %>
<R氏BLE>

</FORM>
<P> </P> <P> </P>

</BODY></HTML.>

4.2开放的试题库设计与维护
4.2.1数据库设计

数据库表的设计思路:由于数据库中有大量复杂的数据,因此对于表的设计 应特别注意,表的个数尽量少,表中属性应尽量直观,数量也要适中,因为要考

虑选题的多样性和自动生成的随机性,各个表之间有关联的情况要尽量少,这样 就可以在对各个表操作时,保证数据的正确性。数据库部分表的列举如下:
系统用户表:

基于SOA的网上考试系统的设计与实现

表4-1系统用户袁 列
ID
ml qx



数据类型
char char char 10 6 l

长度

允许为空
yes yes yeS

主键
nO nO nO

题库结构的组成:
表4-2题库结构 列
tno



数据类型
int varchar varchar varchar varchar varchar char tinyint char varchar 4

长度

允许为空
yes yes yeS yes yes yes yeS yes yes yeS yes
nO nO nO

主键

tigan
Xa

500 100 100 100 100 1 l 1 200

xb
XC

nO nO

xd
anSWer

nO nO

SCOre

difficulty
note

nO nO

4.2.2数据访问接口

package stu。d。e。nt;

import:。j霉萤黉麓舞l≤瓣

鲻鹾薹缫篆鸶瞩纂蒌麟濑

爹鬻罄霪。鍪攀甏瓣秘蠲羰簟蘑鬻黟溺釜蘸gJ甏磷?mysqt.醣iver_.!1.:
。j

j鞲j。薯薯≥i鬻涔鬻ing警::sDBD囊iver 蓑”sun;jdibc.O{d1)c。JdbcOdbcDriver": ;篓藜爹豢鬻篓囊隧蓊蘸爹鳞鲻S篙骥,雳 "jdhc:odbc:stu矗酾tn:

i辫i誊ji攀簇霪驾sti。r.i睡ng I||||ur”l。=…jd 荔戮攀i s零骥。ng


c:mys≮1://localhost/test”:

-≤爹?。誊i攀簿一S:二t~ri。n。g一、iUser善~eroot";
pwd="123’:

i≯,;?Co矗葫ection c6rHlect=nul l
1|

ResultSet

rs=null;

i蠹二蒌:ji薯.羹秘秘城苞西触黪f :j鍪iii鬻淫i童滋誊{

鬻誊攀鬻善誊1||;|凄籀辎鬻鞠‰蘸(a鲢谵巍:

jI譬鍪攀攀鬻i;鞠臻誊鳞辆淌誊(sDBDriVer),:
、i鬟鬻添囊穗瑟簪冬霹霉誊毒麟lpo硅彝每E迹静髓馘曩e)
■!



|}、薯囊i攀蓉、i jiil螽蕈连蠢函.j誊董蕾lp≥i:i}j【tllijI-(.ej鲁etM每ssage 0):
一谚

鬻罐
55

基于SOA的网上考试系统的设计与实现

public ResultSet
try


executeQuery(Strin8.sql){

f verManager.getConnection(url,user,pwd):
stmt。connect.createStatement O;

connect=Dri Statement

rs=stmt.executeQuery(sql): //connect.cleIse◇: ) catch(SQLExcept ion ex){ System。err.println(ex.getMessage 0):


4.2.3权限设计

增加可删除系统操作人员,并指定操作人员的权限。可通过对用户进行权限 管理范围设定,减轻操作内容,也可对单个用户权限及范围进行修订,从而保证 系统在实施中的灵活性。 用户类别:登录系统的身份定为三种,一是超级管理员(学校领导),二是一 般管理员(普通老师),三是学生,只有被授权的用户才可以使用本系统的资源。 权限管理:系统需要经过有效的身份验证可以登录。用户的身份不同,使用 的系统资源也不同。考生只可以参加在线考试。一般管理员(普通教师)可以在线 制作试卷,进行考生管理、成绩查询等。超级管理员(领导)拥有整个系统的全部 使用权,可审批试卷。 在线考试功能:考生输入准号证号登录系统后,选择试卷可进行考试。答题 完毕后,可自动交卷,系统将自动评分,同时提供成绩的打印功能

4.3试卷生成
本系统利用遗传算法求解试题库自动组卷问题的新方法,讨论了运用遗传算 法求解在一定约束条件下的多目标参数优化问题,提出了功能块的概念,并采用 了新的编码方式、交叉算子和变异算子。实验结果表明,改进的遗传算法相对于 其他算法更能有效的解决自动组卷问题,具有较好的使用性能和实用性。 组卷是该系统的核心下面将试卷生成的几个关键步骤介绍如下: 】.试卷生成类的设计与试题库中题目数量的需求

基于SOA的网上考试系统的设计与实现

在变量的设计中重点考虑了试题的量和考生量两个因素对试题库中题目数 量的要求,只有试题库中题目达到一定数量试卷才能减少重复的试题量。 所以在该类中设计了
int int

total—question_num;//对应于当前选择班级的所有试题总数目

total—question_in_paper://当前班级一套试卷中的试题总数目
//当前班级需要生成几套试卷

int total_paper—num;

三个量作为验证题目数量是否足够多时的参考量
public ClassGenPaperServlet extends HttpServlet



鬯“~Conne“e—ti“on

conn;

i。II;jSt鹾atemen‘tstm”t;

。j荔iRes—ultSet。rs;

。≮i囊i麟趱国鲞《葫黼io疆鲞妇鲰捌应季当意嚣选择班级的历育试题总数目
j鬻黼辫涵黼ti6遴唧a;1)萄∥当前班级一套试卷中韵试题总数目
i荔mti。/o’t7al_一:p。apernum;
≯囊S罅堍g
curr_classid;

//5前班级需要生成几套试卷 //当前班级(课程)『的代码编号

j荔≯麓

I¨一j漆构造萄数
…“|一。鬻初始化实例交量
蔓。oi鬻爹一二

奠≤。publie GenPap画erServlet()


?j滋,ie…o…nin溪=nuli;

攀焉游霉?stmt。。=null;
≯V囊。豢董囊蕊塞攀馥l;


j囊鬻誊total羞。1 q、riestion_num=_:o;

ij攀?攀薯爱“i稻舔鳞蕊e,s。tio?“n.in paper≤o; 誊攀攀鎏i灞to薯ta蹬彝文r_nUm=0;
譬≥『。≯_?curr_classid≯…;

publie囊;。l void.-i

doGet(HttpServletRequest?httpservletrequest,HttpServletResponse

httpse~r’vlet。1respons~e) 11j11薯≥throws,ServletExcepti0队IOException

?辫
?』{|;

l_httpservletresponse.setContentType(’'text/html;charset=GBK”);

,j。萋薹誊磁intW…r,i…ter两ntwri麟薯httpservletresponse.getWriter();
一。jiiL誊”1-printwfiter;p~ri—nt…l诞"<~h7t1|:】mt><一”he。ad>。<一/head><body><center>


i誉蕊囊雾prin磷tw蘸d谶p。rintln(”请您酋臻登暴系统i并且请以Pos下方式提交”);

参≥耄≮攀瞳鬻i舔麟鳓t鼷?鞠href--exa。mManage/admin/index.jsp\进入系统登录界面</a>”);

辫鍪i豢i蠢黼3嘲。”ter.prijn“tln("</center></bod。÷。y></html>");
i鬻誉警prin‘twriter.close0;
。叠l

67

yoid .public

doPost(HttpServletRequest

httpservletrequest,HttpservIetResponse

httpservletresponse)
throws ServletExceptionj IOExeeption

{ httpservletresponse-setContentType(’!text/html;charset=GBK一’舅
PrintWriter
String String
S s

printwriter=httpserv!etresponselgetWriterO;



httpservletrequest.getParameter(”Class础);矽20”

l=httpservletrequest.getParameter('。paper_num,):。j职’l

if(s。2 null lI sl==null)

printwriter.print!n(’’<center>”);

参数<,护”1:

垒、10,

printwriter.println(”请按照正常方式提交数据_ii<br>tt); primwri‘er.prinfln(’’<a href=/examManage/admin/genpaper.jsp设置生成试卷的

“~…一。…

printwriter.println(,,</center>”); )

‘otal_paper_num=Imeger.parseInt(s 1);∥当前班级需要生成几套试卷

culcjassid 2 s;


∥当前班级(课程)的代码编号

int

resultPaperNum—O;∥实际生成盼试卷数目

if(!open_db(curr_classid)) { printwriter.println(”打开数据库错误!”);
return;

} if(!setParams(Curr_elassid)) { System.out:println(”设置系统参数错误!,,):
return;

} i趔verify_QuertionLibO) {

printwriter.println(…玩题库中试卷不足,请增加新的试题∥,); primwfiter.println(。‘班级代号:”+curr.classid);
m 钯眙 秘旷 m1善.量 n_:,似卜





耋差一

该目 班翰 级题 _厍 套中 试该 卷班 中级 的的 试试 题题 数总 ..数

沁十

哟嘲

姒舱鲫蚯

致=l _匿嘲 的X

__

resultPaperNum。醇靠pape《硒fal.japernum,curt
if(resultPaperNum---=01 { printwriter.println(”生成试卷操作失败!,’);
retum:

classid);I//



68

基于SOA的网上考试系统的设计与实现

『一糍帮。;奠j囊鹱!期韵姆p'f11erTabie(嘲瓣够印e搿姗1,curr,_c!assid))

囊攀黪零{
!誉 |I。≮蠢pdntwfiter.pfintln(?更新裙关表操作失败!”);

爹爹。雾戮一瑟-re‘tc]urn。;
囊囊曩蔓≯|j}else
蔓ji_

j{

鬻;誊。警。溺p’rintwriter.println("<eent晒”);
。参爹j黪爹雾printwfiter.Println(墨"趟J态纽卷成功!<b蠢溺; .:≥篓蠢?蒸i鬻爹酾n‘twri簿磷癣l磁寒篷瓣≯"+res7 ultP。a“pe~rNum善◆。套试卷<b磅t?); ,¨1萋漤豢豢≥{;|。p’fi…ntWfiter.println(。,<a 4h’’i:ef=examManage/admin/genpaper.jsp>-肇击这里设置生成

豢辫一j蠹鬃溱獭“!tw‘riter.prin’tln("</center>");
i譬戆豢鬻豢黪Ire÷。?jtu。rn。; i蠛≥曩鬻亳

落豢的参鋈髓鳜黪

攀戮
2.连接数据库读取试题生成试卷

生成每套试卷需要注意的几个关键点为:
int int int

curr_paper_index=O://当前生成的是第几套试题 totalRandomOuestion=O://当前可以使用题目,一道题目不能重复使用
questionid[]://符合条件的题目,数组总保存的是题目编号

我们采取了如下的解决方法
¨『套舔毪liQ,boolean verify_Querfio馥ibO//

i篱蒸豢攀彝蠹巍馘i西馥鍪鲻瀚囊鎏酾i磐豢鬻蠢沥鳞l_l磷硒鹾i渤pe:|!_;
鬻辫
i豢辫鳓鬻霸蘑囊臻黼鸶委毒戮鳓谳童抽l酾懿pap;unum;st7ring eurrClassid) 霪i藜舞

ri囊瓣

鎏鋈纛篱i戮獭氇攀暖
i鬻鬻荔篓缄
j“量萋辫薹囊;鬻
…“’。 L

囊鬻荔菱瓤趣幽耩鎏鄙I=!}鬻蝻戮i鹚酾溪麟鲻瑚蠢鞘鹾’;
鬻≤藜蒸鲞萌攀灏蓍萄淌潲攀黪::i南赫鬻i蟥鞲i蘸孵籁urrCi舔sid+…”;

叠薯鬻≯jj。“螨Ult—stmLexecuteUpdate(sql);

誊:簇荔澎
j鋈蒸誉攀零幽h(Exception excePtion) 囊囊鬻鬻
i誉鬻簟j誊鍪攀囊戮醚j璃l鞴; 冀鬓鬻萋攀器

鍪添
鬻i辫

鋈i萎蘩鬻;壤国蘸滔幽i麓攀i:溪如集鬻螽夔i麓i re筑im t商9;否则return

false;

溅i≯谶l鲻《酾躐蹭晒t{黼蕊馥④溺≥String cI勰id)

基于SOA的网上考试系统的设计与实现

,叠:『。.i黝璺urr.paper:index=O影当藏生成的嚣菸热套试题
in。t“totalR+andomQuestion=O;//当前可以使用的题目,一一道题目不能鲞囊镬席

il{I蝴u嘲ionid【】;维鑫条转的题目,数组总保存的是题孱编罴
int tmpvalue=O;

。鬻|j|S嗡'舔一。III!;

糍戮。毫囊try
?-。

豢蒸戮薯j瀵缓
。l≮qu。estionid=new int[total_quest。ion_num]:
篓誊鞠intindex=O;
,,,¨I:』

int姗pid=O;
一。

一一叠簟昀l寻’'select max(paperid)as max

paper_id筋m test=paperlib";

黎j j黪凌磐笺遴瓷鍪tmj jt:ieixjec—j÷uteQuery(sq?1);
缆j『,鼍j二-。÷荔l瀵rs!;nextO;

l≯奠_。i囊纛德到耨美藕试卷的起始编黪漾誊套谶卷澍艨同鬻鬻编舅 参:|j。毒?i黪懑cu7rr:_paperLindex=rS..get!nj t("max AgaperLid')+1; 。一sq/+薷"seleCt questioni正确m testqueStion_lib where:ela蓠ssi出;…+classid…手∽”;

。?∥荔11I:豢j参譬骜嚣卷嘲掰秀放茬数组。questionid蘧
。;囊囊j戮,:。囊籀鹱黪瓣舔蘸幼{
豫。≥爹爹≥。鬻辅缀i簿{翰n。dex]=rs.getlrR("qUestioni鳓;
鬻j爹二j”爹鬻攀鬻磊鼯谶耘
。≯zi|誊;:¨?i_!ll

掌譬jr…s=s…tjm套ti,executeQuery(Sql)、

?囊麴鬻嘲纛魏辩瀵鹧j舞晦l鎏鞫9渤麟攀麟黪 誉妻j豢黪缀

z魏豢鬟虢懑÷鬟磷毽舔鬻隅黼垫鞫瀚洒蠢戳攀汹
一≤≥≥一i囊≥+膨当前随机选题谚嘲黪诲整簿数囊ji

纛j雾瑟瑟攀爱鬻爹攀j如碡i《细a务i遮矗;j舔撵色磷鑫鞲ia÷碹蠢誊臻
‘雾毫。≤≥i篡‘攀爹?∥随褫耩数缀彰选壤藕壤鲞ue。|stion_in兰papiet遵蓬目
囊j囊笺_i羹霪篆羹誓?for(i螽nt~i=,糍i,蔫镯碗溺6誊交i务畦鞲鲞躯塘孝疆菊 i。爨畿鬻;绺镪霉笔鬻薯飞
?tmpid惹(int)Math:floor(Math;randomO*tomlRandomQuesfion);薯

强誊懑j≥j?鼍i秀棼》0'j j爨≥ij

::戮:溪荔曼荔瓣鬃缀鬻j;濑麟嘞鲴珀尊舔裕q虢

j,菘’≯≥’0≮:鳓£蔓警绚蝤旗r-‘m。。u”e7。x。”。+q硝戮鳓d两霸羽i秽黔

q!=msert mto test,oaper,Iib够aluesc',

甏鬻i藕黪;鬻篓鬻鬻囊荔
兹。;鬻孽。雾。。”。孽譬’。一j

?!!鬻荔≯鬈攀囊g繁戮囊,j『{j孺荔彝的缭霾藤躲龌殛群籀唯鬻缝
。j≥i∽i。露瓣々。。。~:萄磁稻黼的碗蕊豁湖赫麟1】耸躺蕊嘶i;【ii_瞄勰
‘霉蠹鬻囊鬻;i蠡簇露≥ 二i攀鬻i辫爹i荔渗鬻荔。叠在麓参郛e参箍a旃辫
…:’7。曩+≯

7≯。铺i衔翻娃尊鍪和e交i酾idf缁磁lR赫晶mIif:i{:l爸stio承q;

鬟i囊豢i}-{|,囊熬藜豢j辫鼷嗲酾戮受黼舔荔荔缫裁露供选撵鳆蘑秘鬻数癞凌
?…j{

≯一。jji◆

i ~

q羹esfion碰蚴pid]嘲pvalue;

70

基于SOA的网上考试系统的设计与实现

糍黪瓣~誓}
≥≯i Catch(Exception exception)

j‘誊?一。≯?{
锄…薯j÷ 鬈爱。i?荔≥}
,_j—ireturn

returnO;

total』aper_num;

,撼善≥} ≯

4.4考试管理的实现
考试系统包含两项重要工作,学生身份的确定和试题的获取。下面将上述两 项功能实现的代码和简单过程进行一下说明: 1.身份确认 学生身份验证主要通过学员ID验证唯一性和密码验证

囊涵誊辫e。。o…n。…t+e。。i礁峁攀莉誊;i瓣趣l;馥稽籀簿鳓K?多每

鳓叠罐攀i硒磊蘸巧萄麟鞫l震多碜
篱蛹!

萄鲻嚣《洚誊巍‘铀鸶!鲻南@i琵d参鹕§鞲鬻蠢”cl番s=!‘'examDB:dbCorm”屈
ReS繇S鹾鲻纛j鼍薯囊萄tl隧o,
7-;_

∥执杼§啦语匀返回的结果集

藜}季篡i躐蟾簧磬趟e蛳谚缓鬻j!%
黎豢:蓥蓦獭甄誊;黉奄i§

赞助商链接
相关文章:
...Architecture)是一种设计和实现信息应用系统的架构...
SOA(Service Oriented Architecture)是一种设计和实现信息应用系统的架构模型,它的基本单元是 (17) 。 A.接口B.服务C.协议D.对象_答案解析_2016年_一模/二模/...
SOA参考模型研究
2.SOA 参考模型 参 考模型是为了理解某一环境实体...那么,基于这样的网络架构如何在政府企业现有网络中...系统设计思路如下: 按照这样的思路,我们的系统设计...
SOA参考架构统一整合各种资源
总之, 面向服务架构(SOA)试图将网络上需要共享的...同应用系统之间业务语义的主数据 管理;基于 ERP ...2014年注册会计师考试 2014年注册会计师考试攻略 2013...
SOA报名介绍
SOA报名介绍_其它考试_资格考试/认证_教育专区。报名...复习这三门考试一边参加网络学习才是最合理的方式, ...那个系统不如 数字人大的地方就在于它不能查询你的...
IBMSOA架构师考试题
IBMSOA架构师考试题_从业资格考试_资格考试/认证_教育...A.Web 服务是基于标准的服务实现 BWeb 服务是面向...是指编程人员能快速编码, 开 发出新的应用系统 54...
技术篇-SOA架构体系(课程笔记)_图文
技术篇-SOA架构体系(课程笔记)_IT认证_资格考试/...分布式系统的发展 九、 程序设计及语言的发展(如: ...基于消息传递的模式 * 应用之间点对点的连接 * 实现...
ERP与企业应用集成考查报告
ERP与企业应用集成考查报告_调查/报告_表格/模板_实用...7 2.4 基于 SOA 的 ERP 与电子商务系统的集成模型...毕竟服务可能是分散于网络的 各个角落的,这就要求...
火龙果软件-面向服务的体系架构(SOA)和业务组件(BC)的思考
(软件硬件、网络)安全平台等,《 SOA DW ...服务组件框架(SCA)提供了一套可构建 基于面向服务的...而不会影响系统其它部分的实现,接口设计不当,对于组件...
...个企业应用系统之间实现无缝集成。其中,基于SOA和We...
企业应用集成能够将业务流程、应用软件、硬件各种标准联合起来,在多个企业应用系统之间实现无缝集成。其中,基于SOA和Web Services技术的EAI集成模式是___。 A...
IBM面向服务的体系架构(SOA)和业务组件(BC)的思考
本文基于 SOA DW 》《 进一步对如何搭建 SOA ...实现 , 而不会影响系统其它部分的实现,接口 设计不...科目三实际道路驾驶考试注意事项 驾考新题抢先版文档...
更多相关标签: