已阅读5页,还剩89页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 1 引言引言.2 2 2 系统运行环境和功能简介系统运行环境和功能简介.2 2.1 系统运行环境 2 2.2 系统功能模块划分 2 3 3 系统的体系结构系统的体系结构.4 3.1 系统服务器开发语言 JSP .4 3.2 数据层 5 3.2.1 关系型数据库 mssql2000+sp3.5 3.2.2 数据库连接池5 3.2.3 Hibernate 框架6 3.3 前台交互 7 3.3.1 交互方式7 3.3.2 Ajax 技术7 3.3.3 DWR.8 4 4 系统的具体设计和实现系统的具体设计和实现.9 4.1 系统的数据库设计 9 4.2 题库管理模块 11 4.2.1 保存、更新、删除试题.11 4.2.2 查询试题.13 4.2.3 试题与选项关联.14 4.3 自动组卷模块 17 4.4 试卷监控 22 4.5 批阅试卷 22 4.6 成绩查询 23 4.7 注册考试 23 4.8 在线测试 23 4.8.1 倒计时24 4.8.2 分页获取试题25 4.8.3 分页保存答案25 4.8.4 自动阅卷25 5 5 系统的性能和安全系统的性能和安全.26 6 6 小结小结.28 参考文献参考文献28 英文摘要英文摘要29 致谢致谢29 附录附录30 基于基于 jsp 在綫考試系統在綫考試系統 摘要:摘要:本文阐述了运用 b/s 模式设计在线测试系统的思想,介绍了当前较流行 的 web 应用技术和框架-JSP、Java、Ajax 和 ORM 技术,并以此为理论基础和 实践依据,在 Hibernate 框架下结合数据库连接池技术,设计并实现了在线测试 系统。完成了试题库的维护、自动组卷、自动阅卷(客观题) 、教师批阅(主观 题) 、学生在线测试、成绩查询各项功能。 关键字:关键字:在线测试 JSP Ajax Hibernate Servlet 1 1 引言引言 随着计算机技术,尤其是计算机网络技术的发展及其不断深入的普及。在 21 世纪信息时代已经到来的今天,网络对于人们来说已不再是一个陌生的概念。 从个人到学校、公司、机关,网络已经并将继续影响着人们的生活、学习,必 将对社会各行各业产生重大影响。学校作为培养人才的基地,更应该走在信息 时代的前沿。如何利用网络来提高教学的质量和效率,克服传统教学的弊端, 如何架起学生与教师以及学生与学生的网络交流平台,已成为教育者不得不考 虑的现实问题。本系统着重研究在线测试系统的实现,充分利用 web 应用给我 们带来的便利,结合各种流行高效的技术,利用 web 方式对题库进行管理和维 护,提供自动生成试卷、自动阅卷、在线测试、查阅分数等功能,大大的节省 了时间和精力,以达到辅助教学,提高教学效率的目的。 2 2 系统运行环境和功能简介系统运行环境和功能简介 2.12.1 系统运行环境系统运行环境 操作系统:WindowsXp/WindowsNT Web 应用服务器:Tomcat5.5.26(需要 JDK1.5 以上) 数据库:MSSQL2000+sp3 2.22.2 系统功能模块划分系统功能模块划分 本系统主要实现的功能有:题库管理、组卷、试卷监控、批阅试卷、注册 考试、在线测试、成绩查询。功能如图 2-1: 图 2-1 系统功能图 (1)题库管理:教师用户可以增加、修改、删除、查询题库中的试题。本系统 的试题种类包括单选、多选、填空、判断、简答和编程。其中问题的选项也可 以进行管理,并且教师可以指定这些问题的作用范围,例如是否可以用于在线 测试等。 (2)组卷:系统会保存教师填写的试卷参数,供学生注册时自动随机组卷。 (3)试卷监控:发布出去的试卷,教师可以监控所有注册该试卷的学生和试卷的 状态。 (4)批阅试卷:考试结束,收回的试卷其中的主观题目教师可以进行批阅。 (5)注册考试:当教师发布试卷后学生可以进行注册。 (6)在线测试:注册后的试卷,学生可以进行在线测试。 (7)成绩查询:批阅后的试卷,学生可以查到自已的得分,教师可以按学生的姓 名,查询学生的得分。 3 3 系统的体系结构系统的体系结构 整个系统采用表示层/业务逻辑层/数据层的三层体系结构。系统结构如图 3-1。 DAO Hibernate 数据库 servlet jsp Web应用服务器 浏览器 DWR Http请求 http响应 异步请求 与响应 图 3-1 系统体系结构图 3.13.1 系统服务器开发语言系统服务器开发语言 JSPJSP 系统服务器编程采用最常用的 JSP 技术,JSP (JavaServerPage)是 Sun 公 司在 1999 年发布的 J2EE 的重要组成部分,是基于 JavaServlet 以及整个 Java 体系的 Web 开发技术,为企业级 Web 的站点动态网页开发人员提供了一种非常 简单却有效的工具。JSP 与 ASP 有许多相似之处,都是为基于 Web 应用实现动 态网页制作提供的技术环境支持,JSP 有以下优点: 将内容的生成和显示分离.使用 JSP 技术,Web 页面开发者可以使用 HTML 或 XML 标志或者小脚本来生成页面上的动态内容.生成内容的逻辑被封装在标志 和 JavaBeans 组件中,并且被捆绑到小脚本中,所有的脚本在服务器端运行。 强调可重用的组件。绝大多数 JSP 页面依赖于可重用的、跨平台的组件 (JavaBeans 或 EJB)来执行应用程序所要求的更为复杂的处理,基于组件的方法 加速了总体开发过程。 硬件平台和服务器无关。JSP 作为 Java 的组成部分,继承了 Java 技术 的“一次编写,随处可用(Write once,run anywhere)”的特性,可以运行于大 多数流行的操作系统平台及 Web 服务器。这种与服务器和操作系统平台的无关 性是 JSP 相对于其它动态网页技术最大的一个优点。 与 Ja va 平台有机集成。JSP 技术是 J2EE 平台的重要组成部分。JSP 使 用 Java 语言作为它的脚步语言,在 JSP 页面中可以使用几乎所有的 Java 组件 和 JavaAPI,从而可以发挥 Java 语言的强大功能。使用 JSP 技术可以创建具有 高度可伸缩性和可靠性的 Web 应用程序。 功能可扩展性。JSP 可以通过 JavaBean 和 EJB 以及自定义的标记来扩展 功能,也可以通过 JDBC 与 Oracle, DB2, SQL Server 等大型关系数据库进行连 接;另外 JSP 提供了一些隐含对象,可以使脚步功能更加强大,并且编程更加容 易、方便。例如利用 Request 对象,可方便地接收用户在 HTML 表单中提交的信 息。利用 session 对象可以跟踪用户状态,利用 application 对象可以得到当 前应用服务的全局信息。系统中的在线学生的信息就是保存在 application 中。 3.23.2 数据层数据层 .1 关系型数据库关系型数据库 mssql2000+sp3mssql2000+sp3 Microsoft SQL Server 2000 数据库系统是在 Windows NT 环境下开发的一 种全新的关系型数据库系统,是发展最快的关系数据库。SQl Server2000 具有 大型数据库系统的一些基本功能,支持事务处理功能、支持数据库加密、设置 用户组别或用户的密码和权限等等。SQL Server 2000 是一个具备完全 Web 支 持的数据库产品,提供了以 Web 标准为基础的扩展数据库编程功能。由于最初 的 Sql Server 2000 并没有把 1433 端口打开,所以需要给 SQL Server2000 打 个 Sp3 补丁。 .2 数据库连接池数据库连接池 在基本的数据源(DataSource)实现中,物理的数据库连接和客户端的连 接对象(Connection Object)有着一比一的对应关系。当连接对象关闭的时候, 物理的连接也随之关闭。这样一个客户的会话都要花费资源去打开,初始化和 关闭物理连接。对于这个资源的耗费问题,可以用连接池(Connection Pool) 来解决。连接池中有以保持一个数据库物理连接的高速缓存,会话可以重复利 用存储在缓存中的连接。连接池可以极大地提高性能,在多个客户端共享少量 的物理连接的三层网络环境下表现的尤为突出。图 3-2 表示了 JDBC 驱动程序提 供了一个应用服务器用来建立和管理连接池 ConnectionPoolDataSource 的实现。 在本系统中充分利用了 Tomcat 提供的 dbcp 数据库连接池功能。在多用户并发 访问数据库的时候,利用连接池缓存数据库的连接,可以减少建立数据库连接 造成的系统资源开销。同时 dbcp 连接池也提供了自动释放无效的数据库连接来 防止系统由于数据库连接泄露造成系统崩溃。 应用程序 JDBC驱动 应用服务器 连接池缓存对象 Physical PooledConnection object ConnectionPool DataSource API Logical Connection object DataSourceAPI 图 3-2 连接池的运作 .3 HibernateHibernate 框架框架 一般来说在数据层,我们可以用 jsp 直接调用 sql 语句操纵数据库,或者 在 JavaBean 中利用 sql 语句执行数据库操纵。然而,这样会使我们在开发时候, 把注意力过多的集中到 sql 语句上,同时系统的可维护性,和编写代码的效率 很低。所以本系统中采用了 ORM(对象关系映射)技术中的 Hibernate 框架结 合 DAO 模式完成数据层的对象持久化的问题。在编写代码的时候,我们只要操 纵 Java 中的对象,剩下的对象与数据的转换就交给 Hibernate 去处理了。这样 系统的可维护性和开发效率就会有很大的提高。同时利用 Hibernate 从 tomcat 提供的 JNDI 连接池获取数据库连接,将其封装成 Hibernate 的 Session,通过 Session 来处理对象的保存,更新,删除操作。 Hibernate 结合 DAO 实现对象 的持久化,工作原理如图 3-3。 DAO 数据库 Hibernate 映射文件 图 3-3 Hibernate 结合 DAO 实现对象的持久化 3.33.3 前台交互前台交互 .1 交互方式交互方式 在前台与服务器端的交互,系统中有两种方式,一种是常见的 form 表单提 交的方式,此种方式应用在如系统用户登录的时候。当用户填写用户名和密码 把表单提交到服务器端,服务器端接收到数据后,进行业务处理,验证用户明 和密码后,把结果返回给浏览器。另外一种是客户端以异步请求的方式与服务 器端交互。在做数据验证,在线考试的剩余时间的获取和刷新时,这些都需要 与服务器进行异步通信和局部刷新页面。 .2 AjaxAjax 技术技术 Ajax 这个名词是一位叫 Jesse James Garrett 的美国人创造的。Jesse 是 Adaptive Path 公司负责用户体验策略的主管,他在 2005 年 2 月 18 日发表了一 篇题为Ajax:一个 Web 应用的新途径的论文。在文中他给出了 Ajax 的定 义。Ajax 不是一种技术。实际上,它由几种蓬勃发展的技术以新的强大方式组 合而成。Ajax 包含:1、基于 CSS 标准的表示;2、使用 Document Object Model 进行动态显示和交互;3、使用 XMLHttpRequest 与服务器进行异步通信; 4、使用 JavaScript 绑定一切。Ajax 工作原理如下:1.客户断利用 XMLHttpRequest 对象向服务器发送异步请求 2.服务器端接受到请求后进行业务 处理,处理完后把结果返回客户端 3.客户端接受到返回响应后,进行更新页面 等操作。各种技术在 Ajax 中的作用如图 3-4。 JavaScript调用XMLHttpRequest对象 用户界面Ajax引擎服务器 JavaScript调用DOM对象更新 HTML、XHTML内容 使用HTML、XHTML和CSS得到的 呈现 返回XML文档或者文本串信息 发起异步请求 图 3-4 各种技术在 Ajax 中的作用 .3 DWRDWR DWR(Direct Web Remoting)是 getahead 公司开发的一个实现 Ajax 应用 的框架。它允许客户端 Javascript 远程调用服务器端的 Java 类的方法,执行相 关的事物操作。DWR 主要包含两个主要部分,其一是运行在浏览器端的 Javascript,这部分被用来与服务器通信,并更新页面内容:其二是运行在服务 器端的 JavaServlet,这部分被用来处理请求并将响应结果返回给浏览器。 DWR 采取了一种动态生成基于 Java 类的 Javascript 代码的方法来实现和处 理 Ajax。这样 Web 开发人员就可以在 Javascript 里像使用浏览器本地代码一样 使用 Java 代码,而实际上这些 Java 代码是运行在服务器端并且可以自由访问 Web 服务器资源的。处于安全考虑,Web 开发人员可以根据要求进行适当的配 置来决定哪些 Java 类可以安全的被外部使用。 4 4 系统的具体设计和实现系统的具体设计和实现 4.14.1 系统的数据库设计系统的数据库设计 结合系统的功能和分析,数据库的设计模型如图:4-1. 问题选项表 T_Q_ELEMENTS,问题表 T_QUESTIONS,学生信息表 T_STUDENTS,教师 表 T_TEACHERS, 科目表 T_SUBJECTS, 章节表 T_CHAPTS, 班级表 T_CLASS, 试卷参数表 T_EXAM_PARAM, 学生试卷表 T_EXAMS, 试卷组成元素表 T_EXAM_ELEMENTS。 教师在页面添加试卷的参数向试卷参数表(T_EXAM_PARAM)中添加参 数后,发布此试卷,学生可以注册考试,注册时首先会从试卷参数表 (T_EXAM_PARAM)中读取相应的参数如单选题个数等,利用这些参数从题 目表(T_QUESTIONS)中随机选取问题,而这些问题的选项可以从问题选项 表(T_Q_ELEMENTS)关联查出,然后把这些问题的 id 添加到试卷组成元素 表(T_EXAM_ELEMENTS)中,最后生成学生试卷表(T_EXAMS) 。当学生 在线答题时,会跟据学生试卷(T_EXAMS)的 id 查出试卷组成元素表中的记录得 到问题 id,利用问题的 id 得到问题和相关联的问题选项。学生保存答案时按题 型分为两种情况,一是保存选择性的题目,此时就把被选中的问题的选项的 id 存入试卷组成元素表中对应的学生答案字段中。另外就是非选择性题目,即需 要输入文字的题目,此时把输入的文字存入成元素表中对应的学生答案字段中。 其中需要说明的是在实际编写代码时,对数据库做了一些改进。如问题表 (T_QUESTIONS)与科目表(T_SUBJECTS)间的关联是用问题表中的科目名 称(strSUBName)与科目表中的科目名称(strNAME) 。同时教师和科目间的 关联关系,在本系统中还没有应用到,但是出于以后的扩展考虑,仍然在教师 表中建立一个字段科目的 id。所以在设计数据库时并不是一味的追求数据库设 计的规范性,而是结合实际情况,以提高系统效率为目的。因此某些冗余字段 的出现,也正是出于此目的,例如试卷参数表(试卷参数表)中的试卷名称 strNAME 与学生试卷表中的试卷名称 strName,就是冗余字段,当需要查出某 学生参加的考试名称时就无需关联试卷参数表,这样就可以减少系统的开销, 提高查询速度。 图 4-1:系统数据库模型图 4.24.2 题库管理模块题库管理模块 该模块主要是教师用户可以增加、修改、删除、查询题库中的试题。本系 统的试题种类包括单选、多选、填空、判断、简答和编程。其中问题的选项也 可以进行管理,并且教师可以指定这些问题的作用范围,例如是否可以用于在 线测试等。 实现对题库中的试题的增加、删除、修改、查询时,始终直接操作都是相 关的 Java 对象 QuestionDAO,在这个 java 类里封装了对试题对象 TQuestions 的操作.这样的一个开发模式就是 DAO(数据访问对象)模式。而最终把对象转 换到数据库中的是利用 Hibernate 来实现的。 下面就详细的介绍这个模块的实现和用到的相关技术。 .1 保存、更新、删除试题保存、更新、删除试题 Session 接口是 Hibernate 向应用程序提供的操纵数据库的最主要接口, 它提供了基本的保存、更新、删除和查询方法。Session 具有一个缓存,位于 缓存中的对象处于持久化状态,它和数据库中的相关记录对应,Session 能够 在某些时间点,按缓存中持久化对象的属性变化来同步更新数据库,这一过程 被称为清理缓存。 除了持久化状态,对象还能处于其他状态,Session 的特定方法能使对象 从一个状态转换到另一个状态。 对于需要被持久化的 Java 对象,在它的生命周期中,可处于以下三个状态 . 临时状态(transient):刚刚用 new 语句创建,还没有被持久化,不处于 Session 的缓存中。没有和数据库记录相关联的 Java 对象被称为临时对象 。 . 持久化状态(persistent):已经被持久化,加入到 Session 的缓存中。被 固化到数据库中的 Java 对象被称为持久化对象。 . 游离状态(detached):已经被持久化,但不再处于 Session 的缓存中。其 对应的 Session 实例己被关闭的 Java 对象被称为游离对象。 Java 对象的完整状态转换图如图 4-1 所示,Session 的特定方法触发 Java 对象由一个状态转换到另一个状态。从图 4-1 看出, 当 Java 对象处于临时状 态或游离状态,只要不被任何变量引用,就会结束生命周期,它占用的内存就 可以被 JVM 的垃圾回收器回收;当处于持久化状态,由于 Session 的缓存会引用 它,因此它始终处于生命周期中。 图:4-2Hibernate 中对象状态转换图 下面是更新问题和删除问题的部分代码: * * 更新问题 * paramparam obj 问题 * returnreturn true/false */ privateprivate booleanboolean update(TQuestions obj) Transaction tx = session.beginTransaction(); trytry session.update(obj); mit(); returnreturn truetrue; catchcatch (HibernateException e) tx.rollback(); / TODOTODO Auto-generated catch block e.printStackTrace(); returnreturn falsefalse; /* * 按id删除问题, * paramparam id * returnreturn */ publicpublic booleanboolean delete(Integer id) Transaction tx = session.beginTransaction(); trytry String hql=“delete from TQuestions where intId=?“; Query q=session.createQuery(hql); q.setInteger(0, id); q.executeUpdate(); mit(); returnreturn truetrue; catchcatch (HibernateException e) tx.rollback(); / TODOTODO Auto-generated catch block e.printStackTrace(); returnreturn falsefalse; 从上面的代码中可以看出操作的是一个 Java 对象,而在底层有 Hibernate 处理,把对象的操作,转换成对数据库的操作。 .2 查询试题查询试题 从数据库中检索对象是使用 Hibernate 最复杂的部分。 HQL 检索,HQL( Hibernate Query Language)是与其相似的关系型查询语言 SQL 的面向对象方言。它可以实现分页查询功能,而且利用占位符可以有效的 避免 SQL 语句错误造成的系统异常甚至崩溃。并且它支持分页查询,在大量数 据中可以只分页获取数据减小服务器的不必要的资源开销。 下面是一个分页查询题库中的试题的一个公共的方法。 /* * 按试卷查出所有与试卷相关的问题 * paramparam examId * paramparam start * paramparam count * returnreturn List 问题 */ publicpublic List queryPage(intint examId, intint start, intint count) session=HibernateUtil.openSession(); String hql = “ select questions ,exelements.strAnswer from TQuestions as questions,TExamElements as exelements where Id = Qid and Examid=? “; Query q = session.createQuery(hql); q.setInteger(0, examId); ifif (count != 0) q.setFirstResult(start); q.setMaxResults(count); List l = q.list(); HibernateUtil.closeSession(); returnreturn l; .3 试题与选项关联试题与选项关联 本系统同时支持对试题选项的管理与维护,教师用户可以对试题的选项进 行增加、删除、修改的操作。并且试题选项数量不限。同试题一样,也是在一 个 DAO 类 QElementDAO 中封装了对试题选项类 TQElementDAO 的一系列的操作。 然而试题选项与试题是有关联关系的,那么如何处理这种关联呢。 先看一下这一部分的数据库设计如表 4-3 和 4-4 表:4-3 试题表 T_QUESTIONS 列名称数据类型是否主键是否为空备注 intIDINT 是否问题 id strContent VARCHAR(3000 ) 问题内容 strCHAPTvarchar(20) 问题所属章节 strTYPEvarchar(20) 问题所属类型(单 选 0,多选 1,填空 2,判断 3,简答 4,编程 5 strSUBNamevarchar(20) 所属科目 strLEVELvarchar(20) 难度等级(难 0, 正常 1,简单 2) strUSESTATEvarchar(10) 问题有效范围(000- 所有范围都不能用, 001-只能用于正式测 验, 010-只能用于模 拟测验, 011-适用于 正式测验,模拟测验, 100-只适用于练习, 101-适用于练习,正式 测验 110-适用于练习, 模拟测验 intCountsInt 被抽取的次数 intCreateIdInt 创建人 id strCreatorVarchar(20) 创建人姓名 dcreateDateDatetime 创建日期 表:4-3 试题选项表 T_Q_ELEMENTS 列名称数据类型是否主键是否为空备注 intIDINT 是否选项 id strCONTENT VARCHAR(3000 ) 选项内容 intISANSWERINT 是否为答案(0 不是, 1 是) intQIDINT 问题 id 在试题选项表中有一个试题的主键 intQID 作为外键,所以从试题到试题选 项的一对多的关联关系是用试题的 id 关联上去的。那么如何在 Java 对象中体 现这种关系呢?在 TQuestions 试题对象中用一个 Set 集合来存储它所关联的所 有试题选项对象,在查询到某个试题时候就可以关联查出对应的所有试题选项 了。两个类的部分代码如下: /* * authorauthor zheng * */ packagepackage org.zlj.zxcs.vo; importimport java.util.Date; importimport java.util.HashSet; importimport java.util.Set; publicpublic classclass TQuestions implementsimplements java.io.Serializable / Fields privateprivate Integer intId;/id privateprivate String strSubName; /科目名称 privateprivate String strContent;/内容 privateprivate String strChapt;/章节 privateprivate String strType;/类型 privateprivate String strLevel;/难度等级 privateprivate String strUsestate;/问题有效范围 privateprivate Integer intCounts;/被抽取的次数 privateprivate Integer intCreateId;/创建人id privateprivate String strCreator;/创建人姓名 privateprivate Date dcreateDate;/创建日期 privateprivate Set tqelementset = newnew HashSet(0); / Constructors set and get packagepackage org.zlj.zxcs.vo; /* * TQElements generated by MyEclipse - Hibernate Tools */ publicpublic classclass TQElements implementsimplements java.io.Serializable privateprivate Integer intId; privateprivate TQuestions TQuestions; privateprivate String strContent; privateprivate Integer intIsanswer; 到此类中的关系有了,下面要做的就是要在 Hibernate 的映射文件中配置 对象与数据间的转换关系了。部分配置代码如下: 在映射文件中的 1 对多关联关系是用元素来配置的。 图 4-4 是运行时的截图,查询出一个试题后,可以关联得到它的试题选项。 图:4-4 试题关联得到试题选项 4.34.3 自动组卷模块自动组卷模块 该模块主要是教师录入试卷的一些参数,供学生注册时随机生成试卷用。 其页面如图 4-5。在该页面教师要依据题库有符合条件的试题的数量来,填写 各种试题的数量。这里使用 Ajax 技术中的 DWR 框架,异步获取试题库中可用题 目数量,当教师选择试卷的科目和试卷的难度时,系统就会到数据库中获取与 之匹配的题目数量,并把结果显示出来。具体实现方法如下。 第一步:安装 jar 开发包。从 DWR 官方网站 http:/www.getahead.ltd.uk/dwr/下载 DWR 开发包,这里使用的是 DWR2.03 这个 开发包里包含了 DWR 运行所需的所有 Java 类和相应的 API 文档。把该 jar 包 放到项目的 lib 包里。 第二步:修改现有项目的 web.xml 配置文件。加入一个 Servlet 配置,代码 如下。 dwr-invoker org.directwebremoting.servlet.DwrServlet debug true dwr-invoker /dwr/* 这段描述主要是告诉 WEB 应用程序,全部以“/dwr/”起始的所指 的请求都交给 org.directwebremoting.servlet.DwrServlet 这个 Servlet 处理。 图 4-5 组卷参数页面 第三步:创建 dwr.xml 在 WEB-INF 文件夹下建立 dwr.xml 配置文件。代码如下 这段描述主要是把 org.zlj.zxcs.dao.QuestionDAO 类转换成 Jscript 对象 JQuestionDao 并且只暴露方法 getAviliableCount,该方法用来完成获取可用 试题的数量。 第四步:测试 URL,查看是否转换成功 在浏览器里输入 :8080/dwr,可以看到已经部署的所有 java 类,本例中,页面信息如下: Classes known to DWR: JSubjectDao (org.zlj.zxcs.dao.SubjectDAO) JExamDao (org.zlj.zxcs.dao.ExamDAO) JExamElementDao (org.zlj.zxcs.dao.ExamElementDAO) JQuestionDao (org.zlj.zxcs.dao.QuestionDAO) 点击 JQuestionDao 进入该类的方法部署页面如图 4-6,在 getAviliableCount 中分别输入 java,2,111 表示 java 科目中难度为简单可用范围是 正式测验的问题。点击 Execute 可以查看方法的实际运行情况如图 4-7。到此说 明 DWR 正常工作。 图 4-6 JQuestionDao 类 图 4-7 DWR 测试结果 第五步:建立客户端页面,利用 Javascript 远程调用 Java 类的方法 页面为 :8080/zxcs/teacher/examParamAdd.jsp, 部分代码如下, 运行效果如图 4-8 dwr/interface/JQuestionDao.js dwr/engine.js dwr/util.js /获取题库中的已有的个数 if(strSubName!=“) JQuestionDao.getAviliableCount(strSubName,strLevel,“,showCheckVa lue); 使用 Ajax 可以带来可见的便捷:1、减轻服务器的负担。Ajax 的原则是 “按需取数据” ,可以在相当的程度上减少冗余请求和响应对服务器造成的负担。 2、无刷新更新页面,减少用户心里和实际等待的时间。特别地,当要读取大量 数据时,不会像 Reload 那样出现白屏的情况。Ajax 使用 XMLHttpRequest 对象 发送请求并的得到服务器的响应,在不重载整个页面的情况下,使用 Javascript 操作 DOM 更新页面。所以在读取数据的过程中,用户面对的不是空白的屏幕, 是原来的页面内容(也可以加点提示信息,让用户知道处于读取数据的过程) , 只有当数据接收完后才更新相应的部分内容。这种更新是瞬间的,用户几乎感 觉不到。3、带来更好的用户体验。4、可以把以前一些服务器的负担工作转嫁 到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空 间和带宽成本。5、可以调用外部数据。6、基于标准化的并被广泛支持的技术, 无需下载插件或者小程序。7、进一步促进页面呈现和数据的分离。 图 4-8 DWR 调用远程方法 4.44.4 试卷监控试卷监控 模块的功能是对教师发布出去的试卷,教师可以监控所有注册该试卷的学 生和试卷的状态。该功实现方法在于使用应用服务器的 application 对象,来 保存在线用户信息,创建一个 session 监听器,当 session 失效时从 application 对象中去除该用户的信息。在监控页面,获取注册了该试卷的所 有学生和试卷的状态然后获取该学生的在线状态,通过页面表格显示出来。 4.54.5 批阅试卷批阅试卷 对于收回的试卷,教师可以批阅其中的主观题,该模块是根据学生的试卷 id 获取试卷中的试题信息包括试题的参考答案和学生所做的答案,最后教师结 合实际情况给学生评分。 4.64.6 成绩查询成绩查询 对于教师用户可以查询参与由自己发布的试卷的成绩。对于学生可以查询 自己所有的测试成绩。主要是依赖与查询条件的控制。 4.74.7 注册考试注册考试 学生可以注册教师已经发布的试卷,在组卷时,先从试卷参数表中读出参 数,然后利用这些参数进行组卷。其中从题库中随机抽取 n 条试题时使用了 mssql 的 select top n * from tableName order by newid(),而 Hibernate 的 Session 接口的 Session.createSQLQuery(sql)方法可以生成原生 SQL 语句, 这样就可以使用它来完成随机抽题了。 4.84.8 在线测试在线测试 在线测试主要完成倒计时、分页获取试题、分页保存答案、三个主要的功 能。由于需要进行异步请求和局部更新页面所以,这三个功能都是利用 Ajax 技 术实现的,页面运行效果如图 4-8. .1 倒计时倒计时 当页面加载时,自动调用 javaScript 脚本利用 DWR 获取考试剩余时间,利 用 javascript 更新显示时间区域秒针显示。并把获取时间的脚本设置为每一分 钟执行一次。当剩余时间为 0 时候自动调用结束考试的方法,同样此方法也是 利用 Ajax 实现的。部分代码如下: /取得剩余时间 function getLeftTime() JExamDao.getTimes(examId,showTimes); /显示出剩余时间 function showTimes(date) var lefttimes = $(“timespace“); if(datelogout.jsp; ); else lefttimes.innerHTML = “剩余“+date+“分钟“; showLeftSec(); /显示时间秒数 function showLeftSec() if (leftseconds 0 5 5 系统的性能和安全系统的性能和安全 在系统的设计和编码时候考虑到系统的性能和安全的问题主要采取的策略 如下。 1.采用数据库连接池。Tomcat 提供了一个较为成熟的数据库连接池 DBCP 连接池,利用连接池可以使系统减少建立与数据库的连接次数。节约系统的宝 贵支援,提高系统的负载量。 2.合理配置数据库连接池,以提高系统的性能和安全。当web应用服务器发 异常时候可能会使当前数据库连接失效。而失效的连接如不及时的回收可能会 造成系统的崩溃。Tomcat配置文件中的可以指定连接池自动回收失效的连接代 码如下: removeAbandoned true removeAbandonedTimeout 60 3.利用 Hibernate 的 Query 接口的查询功能,避免出现 SQL 注入漏洞。发 生此种情况有主要有两个原因。一是如果直接用页面的参数拼接 SQL 语句,如 果参数为 SQL 语句中的特殊字符如单引号,可能会造成 SQL 语法错误而导致程 序出错。例如下面这个用户登录的代码就会出错。 String sql=”select * from user where username= ”+userName+” and password= ”+passWord+” ” 当 userName 是一个单引号时候就会导致 SQL 语法错误。而采用 Hibernate 的 Query 接口时候,可以使用占位符解决这个问题。代码如下: String hql=” from Tuser where username=? And password=?” Query query=Session.CreateQuery(sql); query.setString(1,userName); query.setString(2,passWord); 第二种情况是没有充分考虑到程序的逻辑问题。同样对于第一种情况如果 userName=“a” passWord=”b or 1=1” 。虽然不会导致 SQL 语句出错,但是 这条语句会使用户通过验证。解决的方法是改进代码,先利用 Hibernate 的 Query 接口查出符合条件的用户,然后在取出该用户的密码比较与用户输入的 密码是否一致此时就可以有效的防止 SQL 注入漏洞了。 4.在查询页面采用分页查询,减轻服务器与客户端的负担。利用 Hibernate 中 Query 接口 setFirstResult 设置开始的行数和 setMaxResults 设 置最大行数读取数据库中的记录,在页面结合 javascript 动态设置起始行数。 5.批量增加和更新数据库。在组卷的时候,需要大量多次的向数据库插入 和更新数据。此次可以利用 Hibernate 的批量插入和更新减少与数据库的交互 次数提高系统的执行效率。部分代码如下: whilewhile (it.hasNext() /批量插入 session.save(examElements); i+; ifif(i%20=0) /将本批插入的对象立即写入数据库并释放内存 session.flush(); session.clear(); 6.在系统的配置文件中加入默认页面和自己的异常处理。给系统加入一个 默认页面可以避免列表目录的发生,同时指定自己的错误页面可以有效的减轻 系统暴露代码信息。利用错误页,捕获自己的异常可以给用户良好的提示。部 分配置代码如下: login.jsp org.zlj.zxcs.exception.ApplicationException /include/error/advice.jsp 404 /include/error/404error.jsp 500 /include/error/500error.jsp 6 6 小结小结 本系统采用了相关稳定技术和框架提高系统的可维护性,在编写代码的同 时尽量做的代码的规范性。在设计和实现系统时候,注重提高系统的扩展性和 系统的执行效率。然而由于技术和时间有限有些方面还需改进。 参考文献参考文献 1 Ryan Asleson ,Nathaniel T.Schutta. Foundations of AjaxM. 金灵 译人民邮电出版社. 2006 2 孙卫琴. 精通 HibernateM. 北京,电子工业出版社. 2005 3 刘彬. JSP 数据库高级教程M.北京,清华大学出版社.2006 4 Sue Spielman ,Meeraj Kunnumpurath. J2EE 1.4 编程指南M. 马树奇, 金燕 译.北京,电子工业出版.2005 5 洪峰,吴云飞. AJAX 技术优化在线考试流量J. 长沙通信职业技术学院学 报,第5卷第3期2006年9月: 56-61 6 柴进,姚全珠,孙楹,孙荣荣.基于J2EE平台的在线考试系统的设计与实现J. 宁夏工程技术第1卷第3期2002年11月:235-237 7 柯自聪.Ajax开发精要M.北京,电子工业出版社.2006 8 Brian Wright、Michael Freedman. JSP APPLICATIONDEVELOPMENT IN DATAWAREHOUSEM.北京,北京希望电子出版社.2001 9 BRUCE ECKEL. THINKING IN JAVAM.北京,机械工业出版社. 2005 英文摘要英文摘要 Design and Implementation of the Java Learning Platform for the Exchange based on Jsp-Online testing and Questions A Abstract:This thesis introduces the structure of web-based approach and b / s mode of online testing system. The current more popular web applications and frameworks such as JSP, Java, Ajax and ORM technology is introduced especially. And as a theoretical basis and practical basis, with web applications and database technology we designed and implemented an online testing system. The system is b / s mode to achieve a function of testing questions for the maintenance, generating paper automatically, marking objective questions automatically, reviewing subjective questions by teachers, online testing and querying testing results. Key words: OnlineTesting JSP Ajax Hibernate Servlet 致谢致谢 在这四年的学习生活中,学校严谨的治学作风、良好的学习氛围、老师们 认真的工作态度,都给我留下了非常深刻的印象。大学里我学到了很多知识, 同时我也学到了如何学习的能力。在各科教师的启
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2022年销售经理年终个人工作总结4篇
- 《采用合理的论证方法》课件 2024-2025学年统编版高中语文选择性必修上册
- 2025年春九年级物理下册 第十七、十八章综合测试卷(苏科版)
- 石河子大学《文化遗产概论》2022-2023学年第一学期期末试卷
- 石河子大学《摄影》2022-2023学年第一学期期末试卷
- 石河子大学《机械原理》2022-2023学年第一学期期末试卷
- 沈阳理工大学《专题产品设计》2021-2022学年第一学期期末试卷
- 沈阳理工大学《线性控制系统》2022-2023学年期末试卷
- 沈阳理工大学《热工与流体力学》2022-2023学年第一学期期末试卷
- 沈阳理工大学《计算机网络技术基础》2022-2023学年期末试卷
- 煤场机械车辆操作规程
- GB_T4897-2015刨花板(高清版)
- 地下水环境监测井施工设计方案(共10页)
- 围手术期重症监护
- 世界主要工业区
- 《中小学公共安全教育读本》教案
- 西南油气田对外合作项目基于PSC谈判经济评价
- 6_背景调查表
- 微生物限度方法学验证
- LNG新能源动力船舶制造项目建议书写作模板
- 基于机器视觉的工作分拣控制系统论文
评论
0/150
提交评论