驾校在线考试系统的设计与实现毕业设计目录摘要 (I)ABSTRACT (II)1 引言 (1)1.1选题背景 (1)1.2课题背景及开展研究的意义 (1)2 相关技术分析 (2)2.1JSP技术介绍 (2)2.2三大框架介绍 (2)2.2.1Struts (2)2.2.2Hibernate (4)2.2.3Spring (5)3 需求分析 (7)3.1课题简要说明 (7)3.2可行性研究 (7)2.2.1经济可行性 (7)2.2.2技术可行性 (7)2.2.3运行可行性 (7)2.2.4时间可行性 (8)2.2.5法律可行性 (8)3.3在线驾驶员考试系统一般需求分析 (8)3.4当前在线驾驶员考试系统现状分析 (8)3.5性能需求 (9)4 系统设计 (10)4.1E-R图 (10)4.2数据字典 (10)4.3在线考试数据流程 (12)4.4在线考试总体功能介绍 (13)4.5在线考试模块设计 (13)4.6在线考试数据库设计 (15)4.7关键技术 (17)4.7.1tomcat数据库连接池介绍与配置 (17)4.7.2applet数字签名技术 (18)5 系统详细设计与实现 (21)5.1系统登陆实现 (21)5.2管理员的操作界面 (22)5.3添加选择题模块 (23)5.4题目查看模块 (24)6 系统测试 (26)6.1系统测试目的与意义 (26)6.2测试过程 (26)6.2.1主页面的登录测试 (26)6.2.2题库添加测试 (27)6.2.3题库删题测试 (28)6.3其他错误 (29)7 结束语 (30)参考文献 (32)致谢 (33)毕业设计(论文)知识产权声明 (34)毕业设计(论文)独创性声明 (35)1 引言1.1选题背景现阶段,学校与社会上的各种考试大都采用传统的考试方式,在此方式下,组织一次考试至少要经过五个步骤,即出卷、考生考试、阅卷、成绩评估和试卷分析。
显然,随着考试类型的不断增加及考试要求的不断提高,教师的工作量将会越来越大,并且其工作将是一件十分繁琐和非常容易出错的事情,可以说传统的考试方式已经不能适应现代考试的需要。
随着计算机应用的迅猛发展,网络应用不断扩大,如远程教育和虚拟大学的出现等等,且这些应用正逐步深入到千家万户。
人们迫切要求利用这些技术来进行在线考试,以减轻教师的工作负担及提高工作效率,从而提高了考试的质量,使考试更趋于公证、客观、激发学生的学习兴趣。
例如目前许多国际著名的计算机公司所举办的各种认证考试绝大部分采用这种方式。
1.2课题背景及开展研究的意义为了适应新形势的发展,目前国内有很多公司团体研究开发了基于Web的考试系统。
而我们知道网络应用软件运行的模式主要有二类:Client/Server模式、Browser/Server模式。
前者主要的缺点是维护、升级较麻烦,后者是近几年伴随Internet迅速发展而应运而生的一种技术,在这种模式下,客户端需要一个浏览器,服务器端是Web Server,而Web Server是与数据库和应用服务器的紧密结合,可见,这种模式是瘦客户端,即对客户端的要求不高.如今,很多部门的业务系统、企业的MIS系统纷纷采用这种模式,它的主要优点是便于扩充应用、升级维护简便。
然而,随着技术的发展,更先进的模式纷纷被提出并时兴起来,其中J2EE就是比较成熟的一种。
2 相关技术分析2.1JSP技术介绍JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。
JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。
用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。
网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。
JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。
插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。
JSP与Java Servlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP的1.0规范的最后版本是1999年9月推出的,12月又推出了1.1规范。
目前较新的是JSP1.2规范,JSP2.0规范的征求意见稿也已出台。
JSP页面由HTML代码和嵌入其中的Java代码所组成。
服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。
Java Servlet 是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。
JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
自JSP推出后,众多大公司都支持JSP技术的服务器,如IBM、Oracle、Bea公司等,所以JSP迅速成为商业应用的服务器端语言。
2.2 三大框架介绍2.2.1Strutsstruts2并不是一个陌生的web框架,它是以Webwork的设计思想为核心,吸收struts1的优点,可以说struts2是struts1和Webwork结合的产物。
struts2 的工作原理图如图2.1所示:图2.1 struts2 的工作原理图一个请求在Struts2框架中的处理分为以下几个步骤:a. 客户端发出一个指向servlet容器的请求(tomcat);b. 这个请求会经过图中的几个过滤器,最后会到达FilterDispatcher过滤器。
c. 过滤器FilterDispatcher是struts2框架的心脏,在处理用户请求时,它和请求一起相互配合访问struts2的底层框架结构。
在web容器启动时,struts2框架会自动加载配置文件里相关参数,并转换成相应的类。
如:ConfigurationManager、ActionMapper和ObjectFactory。
ConfigurationManager 存有配置文件的一些基本信息,ActionMapper存有action的配置信息。
在请求过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory 来创建的。
过滤器会通过询问ActionMapper类来查找请求中需要用到的Action。
d. 如果找到需要调用的Action,过滤器会把请求的处理交给ActionProxy。
ActionProxy为Action的代理对象。
ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类。
e. ActionProxy创建一个ActionInvocation的实例。
ActionInvocation在ActionProxy层之下,它表示了Action的执行状态,或者说它控制的Action的执行步骤。
它持有Action实例和所有的Interceptor。
f. ActionInvocation实例使用命名模式来调用,1. ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。
2. 通过ActionInvocation.invoke 方法调用Action实现时,执行Interceptor。
在调用Action的过程前后,涉及到相关拦截器(intercepetor)的调用。
g. 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
返回结果通常是(但不总是,也可能是另外的一个Action 链)一个需要被表示的JSP或者FreeMarker的模版。
在表示的过程中可以使用Struts2 框架中继承的标签。
2.2.2HibernateHibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web 应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
Hibernate作为数据持久化的中间件,足以让数据库在业务逻辑层开发中去冬眠。
它通过可扩展标记语言(XML)实现了类和数据表之间的映射,使程序员在业务逻辑的开发中面向数据库而改为面向对象开发。
使整个项目开发分工更加明确,提高了程序开发的效率。
configuration对象:Configuration 类负责管理Hibernate 的配置信息。
Hibernate 运行时需要获取一些底层实现的基本信息,其中几个关键属性包括:a. 数据库URLb. 数据库用户c. 数据库用户密码d. 数据库JDBC驱动类e. 数据库dialect,用于对特定数据库提供支持,其中包含了针对特定数据库特性的实现,如Hibernate数据类型到特定数据库数据类型的映射等。
以上信息一般情况下由hibernate.cfg.xml或者hibernate.properties文件来配置,实现与不同数据库的连接。
Session对象:Session是持久层操作的基础,相当于JDBC中的Connection: 实例通过SessionFactory实例构建:Configuration config = new Configuration().configure();SessionFactory sessionFactory = config.buildSessionFactory();Session session = sessionFactory.openSession();之后我们就可以调用Session所提供的save、find、flush等方法完成持久层操作。
因此Session对象也封装了所有对数据库的操作来实现Hibernate对数据库的操纵功能,如:Save()方法实现增加和保存;Delete()方法实现数据的删除;Update()方法实现数据更新和修改;Find()方法实现数据的检索;Hibernate会根据不同的操作自动生成相应的SQL语句,从而实现了程序员对PO对象的操作转化为对数据库关系表的操作。