您好,欢迎来到尚车旅游网。
搜索
您的当前位置:首页Java在线学习系统毕业论文

Java在线学习系统毕业论文

来源:尚车旅游网


厦门大学毕业论文设计

Java在线学习系统

摘 要

本文采用自顶向下的结构化的系统分析方法,阐述了一个功能全面的在线学习系统的开发过程、操作流程及其一些核心的技术。本文首先进行了项目概述,简单介绍了项目开发的背景、项目开发的目的和项目开发的意义;接下来是系统规划阶段,通过实际的业务流程调研,分析了系统的组织结构,具体完成了在线学习系统的需求分析、可行性分析、现行业务流程分析,并通过对现行业务流程的优化,得出了系统的业务流程;之后是系统分析,具体完成了数据流分析和数据字典;系统设计阶段主要完成了功能模块的划分、数据库的设计和系统界面设计。该阶段对各个模块的功能进行了详细设计,形成了本系统的功能模块图,在此基础上选择了合适的开发模式;数据库的设计先进行了概念结构设计,之后进行了逻辑结构设计,最后完成了数据库表的设计。

根据前几个阶段的分析和设计,本系统在设计方面采用B/S模式,同时使用JSP技术进行基本页面的设计与功能实现,后台数据库选用SQLSERVER数据库。本系统的设计实施为在线学习系统的运行做基础,为在线学习系统提供良好的条件。

关键词:学习网;结构化分析;B/S

i

厦门大学毕业论文设计

Java online learning system

Abstract

This paper using the top-down structured systeM analysis Method, this paper expounds the functions of a coMprehensive course website developMent process, operation process and soMe of the core technology. This paper first on the description of project, introduced the project developMent background, the purpose of the project developMent and the significance of developing project; The next stage is systeM planning, through the actual business process of the investigation and research, and the analysis of systeM structure, specific coMpleted quality course website needs analysis, feasibility analysis, the current business process analysis, and through to the current business process optiMization, concludes that the systeM of business process,After the systeM analysis, specific coMpleted the data flow analysis and data dictionary; SysteM design phase is coMpleted the function Module and database design and systeM interface design. This phase of the function of each Module of the detailed design, forMed the systeM function Module chart, on the basis of the choice of appropriate developMent Mode; The first database design the concept structure design, on the logical structure after design, finally coMpleted the design of database table

According to forMer several stages of the analysis and design, this systeM in the design on the B/S Mode, use at the saMe tiMe JSP technology of basic pages design and function realization, the backend database choose SQLSERVER database. This systeM design for asseMbly language iMpleMentation of the operation of the auxiliary JiaoXueWang do foundation, to provide auxiliary asseMbly language JiaoXueWang good conditions.

Key Words:Learning network; structural analysis; B/S

ii

厦门大学毕业论文设计

目 录

摘 要 ......................................................................................................................................................................... i Abstract ........................................................................................................................................................................... ii 第1章 概论 .................................................................................................................................................................. 1

1.1 课题背景........................................................................................................................................................ 1 1.2 课题意义........................................................................................................................................................ 2 ............................................................................................................................................................................... 2

MyEclipse .................................................................................................................................................. 2 ToMcat....................................................................................................................................................... 2 1.3.3 SqlServer .......................................................................................................................................... 2 JSP ............................................................................................................................................................. 3 Servlet ........................................................................................................................................................ 3

第2章 可行性分析及总体设计原则 ......................................................................................................................... 5

............................................................................................................................................................................... 5

...................................................................................................................................................................... 5 ...................................................................................................................................................................... 5 ...................................................................................................................................................................... 5 ............................................................................................................................................................................... 6 第3章 系统分析 .......................................................................................................................................................... 8

业务流程分析 ...................................................................................................................................................... 8 ............................................................................................................................................................................... 8 第4章 系统设计 ........................................................................................................................................................ 10

............................................................................................................................................................................. 10 ............................................................................................................................................................................. 11

.................................................................................................................................................................... 12 4.2.2数据库表设计 .................................................................................................................................. 15

第5章 系统实现 ........................................................................................................................................................ 18

............................................................................................................................................................................. 18 ............................................................................................................................................................................. 20

厦门大学毕业论文设计

.................................................................................................................................................................... 20 .................................................................................................................................................................... 22 .................................................................................................................................................................... 25 .................................................................................................................................................................... 27 .................................................................................................................................................................... 30 ............................................................................................................................................................................. 31

.................................................................................................................................................................... 31 .................................................................................................................................................................... 32 .................................................................................................................................................................... 34 .................................................................................................................................................................... 36

第6章 软件测试 ........................................................................................................................................................ 38

............................................................................................................................................................................. 38 ............................................................................................................................................................................. 38 ............................................................................................................................................................................. 39 ............................................................................................................................................................................. 39 ............................................................................................................................................................................. 39 结 论 ............................................................................................................................................................................ 41 参考文献 ...................................................................................................................................................................... 42 致谢 .............................................................................................................................................................................. 43 外文原文 ...................................................................................................................................................................... 44 中文翻译 ...................................................................................................................................................................... 54

厦门大学毕业论文设计

第1章 概论

课题背景

在21世纪这个信息高度发达,并且高速流通的时代,计算机的普及以及计算机网络技

术的应用,让大量普通人能够有机会接触到比以往更多的知识。建立一个自己的在线学习系统是十分必要的事情,这不仅能使更多的人享用宝贵的教育资料源,同时也对于提高学生自学能力,有相当大的帮助。

随着互联网技术的飞速发展,利用网络进行学习已经成为时代发展的必然趋势,建立在线学习系统,尽可能提高优质学习的利用率,对实现人才培养,促进社会经济发展都能起到十分重要的作用。也可以引导用户主动年该学习,提高学习效率,更为学习双方提供一个进行写作学习和交流的平台。

人口多而教育资源缺乏影响着我国受过高等教育的人在人口比例中所占的比重,这严重的制约了我国社会的发展与进步,这对于提高我国国民的文化科学素养十分不利。怎样才能让更多的人享有少部分人拥有的精品教育资源呢?对于这个问题,前人已经做了大量的研究。随着计算机技术以及计算机网络技术的飞速发展,人们终于找到了一条实现这种梦想的捷径,那就是寄希望于把各种教育资源移置到互联网上去,使得各地方的人都能够方便的获取到各种自己想要的知识,打破传统教育资源分配不均的限制,使得更多的人能够有机会获取到知识。

近年来,学校学生的数量逐渐增加,人工书写学习的方式已经不能满足如此庞大的数据。为了更好的适应信息时代的高效性,一个利用计算机来实现学校在线学习系统管理工作的系统将必然诞生。基于这一点,设计了一个在线学习系统,用来就学生在线学习系统进行管理,以便在最短的时间内,高效准确的完成整个学习程。

基于对上述的认识,收集相关资料和数据,查阅有关文献及技术参数,对学校的实际需求等方面进行了调研,发现目前所采用的手工记录的方法进行管理存在以下几个方面的弊端:对象范围广,数据存储不易;填写的数据多,且大量数据重复;不易存档,成千上万的信息和堆积如山的单据对管理人员来说是一个负担,需要大量的文档资料。鉴于以上种种原因,学校学习的管理急需一种软件来代替手工操作来管理数据资料。

计算机技术在现代管理中的应用,使计算机成为领导者和管理人员应用现代技术的重要工具[1]。计算机辅助高校管理活动,可以极大地增强管理者采集、处理信息的能力,从而有利于管理者及时决策。计算机系统能根据管理过程的变化情况,将原始数据、资料等进行加工、保存,管理人员可以在解决具体问题需要信息资料时,随时进行检索查询,了解整个在线学习系统的动态情况,进行动态管理,从而有效的处理在线学习系统的管理工作,实现在线学习系统信息管理的自动化,提高办学效率。

1

厦门大学毕业论文设计

课题意义

与传统的教育相比,网络学习是一种全新的教育模式,它可以突破时间和空间的限制,让更多的学习者共享优秀的教育资源。网络学习既具有开放性、交互性、协作性和自主性等特点,有具有异步性、实时性、生动性、集成性和大容量等优势。因此在网络学习平台系统的建设中,单纯地构建各种功能单一的系统并不能完全满足网络学习平台建设的要求,只有那些对数据和信息进行有效组织,整合了多种业务,为用户提供个性化服务的系统才能充分地发挥精品课程学习平台的作用。

建设在线学习网的根本目的是利用现代化的教育信息技术手段将相关学习知识内容上网并免费开放,以实现优质学习资源共享,提高学习质量和人才培养质量。

开发工具及技术

MyEclipse

MyEclipse,是一个十分优秀的用于开发Java, J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开元产品的支持十分不错。MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSP, CSS, Javascript, SQL, Hibernate。

1.3.2 ToMcat

ToMcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。可以这样认为,当在一台机器上配置好Apahce服务器,可利用它响应对HTML页面的访问请求。实际上ToMcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当运行toMcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

1.3.3 SqlServer

SQL(Structured Query Language),结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。绝大多数流行的关系型数据库管理系统都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select, Insert, Update, Delete, Create,以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。

2

厦门大学毕业论文设计

1.3.4 JSP

JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。

Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。JSP与Servlet一样,是在服务器端执行的,通常返回给客户端就是一个HTML文本,因此客户端只要有浏览器能浏览。JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。JSP技术的优点:

(1)一次编写,到处运行。除了系统之外,代码不用做任何更改。

(2)系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比ASP/.net的局限性是显而易见的。

(3)强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力。

(4)多样化和功能强大的开发工具支持。Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下。

(5)支持服务器端组件。web应用需要强大的服务器端组件来支持,开发人员需要利用其他工具设计实现复杂功能的组件供web页面调用,以增强系统性能。JSP可以使用成熟的JAVA BEANS 组件来实现复杂商务功能。

内部对象说明:request 客户端请求,此请求会包含来自GET/POST请求的参数; response 网页传回客户端的响应;pageContext 网页的属性是在这里管理; session 与请求有关的会话; application servlet正在执行的内容;out 用来传送响应的输出流; config 代码片段配置对象;page JSP网页本身; exception 针对错误网页,未捕捉的例外。 1.3.5 Servlet

servlet是在服务器上运行的小程序。这个词是在Java applet的环境中创造的,Java applet是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果得到为用户进行运算或者根据用户互作用定位图形等服务。

服务器上需要一些程序,常常是根据用户输入访问数据库的程序。这些通常是使用公共网关接口(CGI(Common Gateway Interface))应用程序完成的。然而,在服务器上运行Java,这种程序可使用Java编程语言实现。在通信量大的服务器上,Javaservlet的优点在

3

厦门大学毕业论文设计

于它们的执行速度更快于CGI程序。各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程,这意味着服务器端处理请求的系统开销将明显降低。

(1)客户端发送请求至服务器端; (2)服务器将请求信息发送至Servlet;

(3)Servlet生成响应内容并将其传给服务器。响应内容动态生成,取决于客户端的请求;

(4)服务器将响应返回给客户端;

Servlet看起来像是通常的Java程序。Servlet导入特定的属于Java ServletAPI的包。因为是对象字节码,可动态地从网络加载,可以说Servlet对Server就如同Applet对Client一样,但是,由于Servlet运行于Server中,它们并不需要一个图形用户界面。从这个角度讲,Servlet也被称为FacelessObject。

一个servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器的应用程序。

4

厦门大学毕业论文设计

第2章 可行性分析及总体设计原则

可行性分析也称为可行性研究,是在调查的基础上,针对新系统的开发是否具备必要性和可能性,对新系统的开发从技术、经济、社会等方面进行分析和研究,以避免投资失误,保证新系统的开发成功[2]。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。

下面将分别从技术、经济、社会三个方面对在线学习系统的建设进行分析和研究。

根据在线学习网的系统功能、性能及实现系统的各种约束条件,根据新系统目标来衡量所需的技术是否具备,本系统是一个数据库管理和查询的系统,现有的技术已较为成熟,硬件、软件的性能要求、环境条件等各项条件良好,估计利用现有技术条件应完全可以达到该系统的功能目标。同时,考虑给予的开发期限也较为充裕,预计系统是可以在规定期限内完成开发的。

由以上分析可知,在线学习系统的开发在技术上是可行的

学校具有信息化的处理设施,并且拥有支持本系统的应用平台。因此无需再投入资金购买其他设施。系统的开发基于本人对程序开发的实践学习而来,学校无需资金投入,并且软件开发过程投入的成本不高,因此开发经费完全可以接受。

由以上分析可知,在线学习系统在经济上是可行的。

本系统的社会可行性主要从法律因素、用户使用可行性两方面进行研究。 (1)法律因素

本系统是根据在线学习系统的实际情况开发研制的,是通过大量的调研得出的,系统的软件设计是在独立的环境下完成的,无可供抄袭的软件产品。

(2)用户使用可行性

本系统对用户的要求,除了需要具备在Microsoft Windows平台上使用个人电脑的知识外,并不需要特别的技术能力。使用系统的管理员,需要具备对ToMcat服务器的使用能力,在投入使用前,无需对操作系统的人员进行培训。这样既减少投入成本又简化了操作环节。由以上分析可知,本系统具有社会可行性。

5

厦门大学毕业论文设计

本系统为了设计、实现和后期维护的方便,以及系统用户使用的便利,所以必须采取一定的设计原则。其主要设计原则有:

简单性:在实现系统的功能的同时,尽量让系统操作简单易懂,这对于一个系统来说是非常重要的。

针对性:本系统设计是针对在线学习系统的需求定向开发设计,所以具有专业突出和很强的针对性。

实用性:要求本系统能够满足在线学习系统的需求,因此具有良好的实用性。

一致性:页面整体设计风格以及命名规则的一致性:整体页面布局和用图用色风格及变量、类名和其他元素的命名规则保持一致。功能一致性:完成同样的功能应该尽量使用同样的元素。 元素风格一致性:界面元素的美观风格、摆放位置在同一个界面和不同界面之间都应该是一致的。变量命名规则的一致性:变量应该用统一的规则进行命名,做到任意变量均能从上下文推断其义。

先进性:本系统采用JSP技术、SQLSERVER等被广泛采用系统开发技术和数据库,因此本设计具有良好的先进性,具体表现在其具有良好的可扩展性,可开发性。

Java Servlet 与 JSP 的相关功能

JSP和Servlet的区别到底在应用上有哪些体现,很多人搞不清楚。简单的说,SUN首先发展出Servlet,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方式,是一句一句输出,所以,编写和修改HTML非常不方便。

JavaServer Pages(JSP)是一种实现普通静态HTML和动态HTML混合编码的技术,JSP并没有增加任何本质上不能用Servlet实现的功能。但是,在JSP中编写静态HTML更加方便,不必再用println语句来输出每一行HTML代码。更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计者进行HTML设计,同时留出供Servlet程序员插入动态内容的空间。后来SUN推出了类似于ASP的镶嵌型的JSP,把JSP TAG镶嵌到HTML语句中,这样,就大大简化和方便了网页的设计和修改。新型的网络语言如ASP,PHP,JSP都是镶嵌型的SCRIPT语言。 这是JSP和Servlet区别的运作原理层面。

从网络三层结构的角度看JSP和Servlet的区别,一个网络项目最少分三层:data layer(数据层),business layer(业务层), presentation layer(表现层)。当然也可以更复杂。Servlet用来写business layer是很强大的,但是对于写presentation layer就很不方便。JSP则主要是为了方便写presentation layer而设计的。当然也可以写business layer。写惯了ASP,PHP,CGI的朋友,经常会不自觉的把presentation layer和business layer混在一起。根据SUN自己的推荐,JSP中应该仅仅存放与presentation layer有关的东东,也就是说,只放输出HTML网页的部分。而所有的数据计算,数据分析,数据库联结处理,统统是属于business layer,应该放在Java BEANS中。通过JSP调用Java BEANS,实现两层的整合。

6

厦门大学毕业论文设计

实际上,微软前不久推出的DNA技术,简单说,就是ASP+COM/DCOM技术。与JSP+BEANS完全类似,所有的presentation layer由ASP完成,所有的business layer由COM/DCOM完成。通过调用,实现整合。为什么要采用这些组件技术呢?因为单纯的ASP/JSP语言是非常低效率执行的,如果出现大量用户点击,纯SCRIPT语言很快就到达了他的功能上限,而组件技术就能大幅度提高功能上限,加快执行速度。

另外一方面,纯SCRIPT语言将presentation layer和business layer混在一起,造成修改不方便,并且代码不能重复利用。如果想修改一个地方,经常会牵涉到十几页CODE,采用组件技术就只改组件就可以了。Servlet是一个早期的不完善的产品,写business layer很好,写presentation layer就很臭,并且两层混杂。所以,推出JSP+BEAN,用JSP写presentation layer,用BEAN写business layer。SUN自己的意思也是将来用JSP替代Servlet。这是技术更新方面JSP和Servlet的区别。

可是,这不是说,学了Servlet没用,实际上,你还是应该从Servlet入门,再上JSP,再上JSP+BEAN。强调的是:学了JSP,不会用Java BEAN并进行整合,等于没学。大家多花点力气在JSP+BEAN上。

我们可以看到,当ASP+COM和JSP+BEAN都采用组件技术后,所有的组件都是先进行编译,并驻留内存,然后快速执行。所以,大家经常吹的Servlet/JSP先编译驻内存后执行的速度优势就没有了。那么,为什么还用JSP+BEAN?因为Java实在前途远大。微软分拆后,操作系统将群雄并起,应用软件的开发商必定要找一个通用开发语言进行开发,Java一统天下的时机就到了。如果微软分拆顺利,从中分出的应用软件公司将成为Java的新领导者。目前的Java大头SUN和IBM都死气沉沉,令人失望。希望新公司能注入新活力。不过,新公司很有可能和旧SUN展开Java标准大战,双方各自制定标准,影响Java跨平台。

简单分析了一下JSP和Servlet的区别和Java Web开发方面的发展。现在的机器速度越来越快,Java的速度劣势很快就可以被克服。

7

太原理工大学毕业设计(论文)用纸

第3章 系统分析

业务流程分析

在进行业务流程分析时,需要按照原有信息流动过程,逐个地调查分析所有环节的处理业务、处理内容、处理顺序和对处理时间的要求,弄清各个环节需要的信息、信息来源、流经去向、处理方法、计算方法、提供信息的时间和信息形态(报告、报单、屏幕显示)等[4]。

业务流程分析可以帮助开发者了解该业务处理过程,发现和处理系统调查工作中的错误和疏漏。业务流程分析是通过业务流程图来进行,即用一些规定的符号及连线来表示某个具体业务处理过程如图3.1。

管理员

登录信息 登录 N

登录与否

公告管理 视频管理 学习资料管题目信息管理 会员信息管理 视频信息 题目信息 资料信息 公告信息 会员信息

数据流图

数据流程是指数据在系统中产生、传输、加工处理、使用、存储的过程[6]。数据流程分析是把数据在现行系统内部的流动抽象的独立起来,舍去了具体组织机构、信息载体、处理工具、物质、材料等,单从数据流动过程来考查实际业务的数据处理模式。

数据流程与数据流程分析是今后建立数据库系统和设计功能模块处理过程的基础。描述数据流程的工具是数据流程图以及其附带的数据字典、处理逻辑等图表。其中数据流程

8

太原理工大学毕业设计(论文)用纸

图是描述系统逻辑模型的主要工具,它以少数几种符号综合地反映出信息在系统中的流动、存储和传递。

在业务流程分析的基础上,对数据流进行了分析,从数据流动过程考察了实际业务的数据处理模式。该系统的数据流图分为顶层、一层、二层。现行的顶层数据流图如图3.2所示。

系统信息 在线学习网 管理员 输入账号

具体分析第一层数据流图,该层数据流图如图3. 3所示。

由于论文的篇幅限制不能一一列举数据流图,只给出了部分数据流图,其他的数据流图基本一致。

9

太原理工大学毕业设计(论文)用纸

第4章 系统设计

系统设计是一个把软件需求转换成用软件系统表示的过程。通过对目标系统的分析和

研究,做出了在线学习系统的总体规划,这是全面开发系统的重要基础。在对在线学习系统全面分析调查的基础上,制定出在线学习系统的总体规划。系统设计包括系统总体设计、系统详细设计、系统数据库设计、系统开发工具、开发技术和开发模式等。

从数据流图出发,对数据流图进行分析,得出的层次化的模块结构图. 在线学习系统前台功能模块图如图4-1所示。

在线学习网前台 浏视参 在在 线览频线于 学信学自注 习 息 测 册 习 图4-1前台功能模块图

10

太原理工大学毕业设计(论文)用纸

在线学习系统后台功能模块图如图4-2所示。

在线学习网后台 修学公学会会 改习告习员 密视信资信 码 频 息 料 息 自测题目 留言信息

图4-2 在线学习系统后台功能模块图

数据库是本系统的核心和基础。它设计的好坏直接影响着整个系统的质量。数据是一切系统设计的基础,通俗地说,数据库设计就像高楼大厦的根基一样,如果设计的不合理、不完善,将在系统开发过程中,甚至到后期的系统维护、功能变更和功能扩充时,引起较多问题,严重时甚至要重新设计,重做大量已完成工作。数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统。 (1)需求分析

调查和分析用户的业务活动和数据的使用情况,弄清所用数据的种类、范围、数量以及它们在业务活动中交流的情况,确定用户对数据库系统的使用要求和各种约束条件等,形成用户需求规约。 (2)概念设计

对用户要求描述的现实世界(可能是一个工厂、一个商场或者一个学校等),通过对其中诸处的分类、聚集和概括,建立抽象的概念数据模型。这个概念模型应反映现实世界各部门的信息结构、信息流动情况、信息间的互相制约关系以及各部门对信息储存、查询和加工的要求等。所建立的模型应避开数据库在计算机上的具体实现细节,用一种抽象的形式表示出来。以扩充的实体—(E-R模型)联系模型方法为例,第一步先明确现实世界各部门所含的各种实体及其属性、实体间的联系以及对信息的制约条件等,从而给出各部门内所用信息的局部描述(在数据库中称为用户的局部视图)。第二步再将前面得到的多个用户的局部视图集成为一个全局视图,即用户要描述的现实世界的概念数据模型。

11

太原理工大学毕业设计(论文)用纸

(3)逻辑设计

主要工作是将现实世界的概念数据模型设计成数据库的一种逻辑模式,即适应于某种特定数据库管理系统所支持的逻辑数据模式。与此同时,可能还需为各种数据处理应用领域产生相应的逻辑子模式。这一步设计的结果就是所谓“逻辑数据库”。 (4)物理设计

根据特定数据库管理系统所提供的多种存储结构和存取方法等依赖于具体计算机结构的各项物理设计措施,对具体的应用任务选定最合适的物理存储结构(包括文件类型、索引结构和数据的存放次序与位逻辑等)、存取方法和存取路径等。这一步设计的结果就是所谓“物理数据库”。

概念机构设计的任务是在需求分析阶段产生需求分析说明书的基础上按照特定的方法把他们抽象为一个不依赖与任何一个具体的的机器的数据模型,既概念模型,概念模型式设计在的直以来能够从复杂的细节中解脱出来。从而只集中在更重要的信息的组织机构和处理模型上。

从数据需求分析中得出系统的实体属性图。 (1)管理员实体属性图如图4-3所示。

用户ID 登录帐号 管理员 登录密码 图4-3管理员实体属性图

12

太原理工大学毕业设计(论文)用纸

(2)会员信息实体属性图如图4-4所示。

会员ID 登录密码 会员信息 图4-4会员实体属性图

登录帐号 会员姓

(3)学习资料实体属性图如图4-5所示。

内容 标题 附件 学习资料 资料ID

图4-5学习资料实体属性图

时间

13

太原理工大学毕业设计(论文)用纸

(4)公告信息实体属性图如图4-6所示。

标题 公告 公告信息 图4-6公告信息实体属性图

内容 发布时间

(5)留言信息实体属性图如图4-7所示。

留言信息

图4-7留言信息实体属性图

标题 内容 留言ID 留言时间

(6)视频信息实体属性图如图4-8所示。

内容 视频信息

14

附件 标题 视频ID 发布时间 图4-8视频信息实体属性图

太原理工大学毕业设计(论文)用纸

(1)管理员信息表(t_adMin)

管理员信息表主要用于系统管理员的信息,主要字段包括:编号、登陆账号、登陆密码。

表4.1 管理员信息表(t_adMin)

字段名 数据类型 字段描述 编号 登陆账号 登陆密码 长度 主键 userId userNaMe userPw Int varchar varchar 10 50 50 √ (2)学习资料信息表(t_doc)

学习资料信息表主要用于管理员发布的学习资料信息,主要字段包括:编号、标题、介绍等。

表4.2 学习信息表(t_doc)

字段名 id title content fujian fujianYuanshiMing shijian

数据类型 Int varchar varchar varchar varchar varchar 字段描述 编号 标题 内容 附件 附件原始名 发布时间 长度 10 50 50 50 50 50 主键 √ (3)视频信息表(t_shipin)

学习视频信息表主要用于管理员发布的视频信息,主要字段包括:编号、视频标题、附件等。

表4.3 学习视频信息表(t_shipin)

字段名 Id title content fujian shijian

15

数据类型 Int varchar varchar varchar varchar

字段描述 编号 标题 内容 附件 发布时间 长度 10 50 50 50 50 主键 √

太原理工大学毕业设计(论文)用纸

(4)会员信息表(t_user)

学生表主要存储学生的基本信息,主要字段包括:ID、学号、姓名、性别、年龄、登录帐号、登录密码等。

(t_huiyuan)

字段名 id loginnaMe loginpw xingMing

数据类型 Int varchar varchar varchar 字段描述 编号 账号 密码 姓名 长度 10 50 50 50 主键 √ (5)自测题目信息表(t_tiMu)

自测题目信息表主要存储测试题目的基本信息,主要字段包括:ID、学号、姓名、性别、年龄、登录帐号、登录密码等。

(t_zct)

字段名 id naMe xuanxianga xuanxiangb xuanxiangc xuanxiangd daan fenshu

数据类型 Int varchar varchar varchar varchar varchar varchar Int 字段描述 编号 题目名称 选项A 选项B 选项C 选项D 题目答案 题目分数 长度 10 50 500 500 500 500 500 5 主键 √ (6)公告信息表(t_gonggao)

公告信息表主要存储管理员发布的公告信息,主要字段包括:ID、公告标题、公告内容、发布时间等。

(t_gonggao)

字段名 id title content shijian

16

数据类型 Int varchar varchar varchar 字段描述 长度 10 50 5000 50 主键 √ ID 公告标题 公告内容 发布时间

太原理工大学毕业设计(论文)用纸

(7)留言信息表(t_liuyan)

公告信息表主要存储学生和老师的留言信息,主要字段包括:ID、留言标题、留言内容、留言时间等。

(t_liuyan)

字段名 数据类型 字段描述 长度 主键 id title content shijian

Int varchar varchar varchar ID 公告标题 公告内容 发布时间 10 50 5000 50 √ 17

太原理工大学毕业设计(论文)用纸

第5章 系统实现

1.描述:为了保证系统的安全性,要先使用本系统必须先登陆到系统中,用户需要正确的账号和密码登录本系统。用户首先会用管理员登陆的网页,在登陆过程中,输入登录用户名和密码,管理员只有一个,所以对于管理员的登录他拥有最高的权限,所以管理员所输入的帐号和密码并没有输入到与普通会员一样的数据库表中去,管理员有自己的数据库表。

2.程序运行效果图如图5.1所示。

图5.1 系统登陆页面设计

3.在登陆页面输入用户名和密码以,点击提交按钮,跳转到登陆的service中,在该service中会对用户名密码,验证码进行判断,通过与数据库中的所存在的帐号和密码进行对比如果验证通过进入对应的页面,并且设置管理的状态表示已经登录,在没有退出的情况下不能进行的二次的重复的登录,以下是loginservice关键代码:

public String login(String userNaMe,String userPw,int userType) {

String result=\"no\";

if(userType==0)//系统管理员登陆 { String sql=\"select * froM t_adMin where userNaMe=? and userPw=?\"; Object[] paraMs={userNaMe,userPw}; DB Mydb=new DB(); Mydb.doPstM(sql, paraMs); try

18

太原理工大学毕业设计(论文)用纸

{

ResultSet rs=Mydb.getRs();

boolean Mark=(rs==null||!rs.next()?false:true); if(Mark==false) { result=\"no\"; } else { result=\"yes\"; TAdMin adMin=new TAdMin(); adMin.setUserId(rs.getInt(\"userId\")); adMMe(rs.getString(\"userNaMe\")); adMin.setUserPw(rs.getString(\"userPw\")); WebContext ctx = WebContextFactory.get(); HttpSession session=ctx.getSession(); session.setAttribute(\"userType\ session.setAttribute(\"adMin\ } rs.close(); } catch (SQLException e) { SysteM.out.println(\"登录失败!\"); e.printStackTrace(); } finally { Mydb.closed(); } }

19

太原理工大学毕业设计(论文)用纸

(1)公告信息录入

1.描述:管理员输入公告相关正确信息后点击录入按钮,如果是没有输入完整的公告信息,都会给出相应的错误提示,不能录入成功。输入数据都通过forM表单中定义的方法onsubMit=\"return checkForM()\"来检查,checkForM()函数中是各种的校验输入数据的方式。对于公告管理中的标题、内容应相应的填写,时间由本地时间提供不需要自己填写,将内容填写完后提交,只能在管理员见面进行修改,不能在用户见面进行修改。

2.程序效果图如下图5.12所示。

图5.2 公告信息录入

(2)公告信息管理

1.描述:管理员点击左侧的菜单“公告信息管理”,页面跳转到公告信息管理界面,调用后台的action类查询出所有的公告信息,并把这些信息封转到数据集合List中,绑定到request对象,然后页面跳转到相应的jsp,通过查询数据库中的数据对公告中的信息进行显示并有jsp见面显示出公告信息。

2.程序效果图如下图5.13所示。

图5.3 公告信息管理页面

20

太原理工大学毕业设计(论文)用纸

公告信息管理关键代码:

public void gonggaoAdd(HttpServletRequest req,HttpServletResponse res) {

String id=String.valueOf(new Date().getTiMe()); Meter(\"title\"); Meter(\"content\");

String shijian=new Date().toLocaleString(); String sql=\"insert into t_gonggao values(?,?,?,?)\"; Object[] paraMs={id,title,content,shijian}; DB Mydb=new DB(); MM(sql, paraMs); Mydb.closed();

req.setAttribute(\"Message\操作成功\");

req.setAttribute(\"path\ String targetURL = \"/coMMon/success.jsp\"; dispatch(targetURL, req, res); }

public void gonggaoDel(HttpServletRequest req,HttpServletResponse res) {

String id=Meter(\"id\");

String sql=\"delete froM t_gonggao where id=?\"; Object[] paraMs={id}; DB Mydb=new DB(); MM(sql, paraMs); Mydb.closed();

req.setAttribute(\"Message\操作成功\");

req.setAttribute(\"path\ String targetURL = \"/coMMon/success.jsp\"; dispatch(targetURL, req, res); }

public void gonggaoMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException {

List gonggaoList=new ArrayList(); String sql=\"select * froM t_gonggao\"; Object[] paraMs={};

21

太原理工大学毕业设计(论文)用纸

DB Mydb=new DB(); try { MM(sql, paraMs); ResultSet rs=Mydb.getRs(); while(rs.next()) { Tgonggao gonggao=new Tgonggao(); gonggao.setId(rs.getString(\"id\")); gonggao.setTitle(rs.getString(\"title\")); gonggao.setContent(rs.getString(\"content\")); gonggao.setShijian(rs.getString(\"shijian\")); gonggaoList.add(gonggao); } rs.close(); }

catch(Exception e) {

e.printStackTrace(); }

Mydb.closed();

req.setAttribute(\"gonggaoList\

req.getRequestDispatcher(\"adMin/gonggao/gonggaoMana.jsp\").forward(req, res); }

(3)公告详细信息查看

1.描述:先是点击公告信息管理,页面跳转到公告信息管理界面,浏览所有的公告信息,点击要查看的公告信息,弹出公告信息详细信息界面。 (4)公告信息删除

1.描述:先是点击公告信息管理,页面跳转到公告信息管理界面,浏览所有的公告信息,点击要删除的公告信息,弹出的确定对话框,即可删除该公告信息。

(1)在线留言信息管理

22

太原理工大学毕业设计(论文)用纸

1.描述:管理员点击左侧的菜单“在线留言信息管理”,页面跳转到在线留言信息管理界面,调用后台的action类查询所有在线留言信息。并对相应的留言进行删除和修改,然后在action中,将相应的Id号发给数据库并进行del删除,及物理删除。这样就讲留言板的信息删除了。

2.程序效果图如下图5.14所示。

图5.4 在线留言信息管理

在对action的操作中先得到Id号然后对数据库中的操作将路径传给相应的表格,删除Id号后对刷新jsp页面并对其更新。这样就把留言板删除了,如果要添加留言,输入数据都通过forM表单中定义的方法onsubMit=\"return checkForM()\"来检查,checkForM()函数中是各种的校验输入数据的方式。

在线留言信息管理关键代码:

public void liuyanDel(HttpServletRequest req,HttpServletResponse res) {

Meter(\"id\");

String sql=\"delete froM t_liuyan where id=?\"; Object[] paraMs={id}; DB Mydb=new DB(); MM(sql, paraMs); Mydb.closed();

req.setAttribute(\"Message\操作成功\");

req.setAttribute(\"path\ String targetURL = \"/coMMon/success.jsp\"; dispatch(targetURL, req, res); }

23

太原理工大学毕业设计(论文)用纸

public void liuyanMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException {

List liuyanList=new ArrayList(); String sql=\"select * froM t_liuyan\"; Object[] paraMs={}; DB Mydb=new DB(); try { MM(sql, paraMs); ResultSet rs=Mydb.getRs(); while(rs.next()) { Tliuyan liuyan=new Tliuyan(); liuyan.setId(rs.getString(\"id\")); liuyan.setTitle(rs.getString(\"title\")); liuyan.setContent(rs.getString(\"content\")); liuyan.setShijian(rs.getString(\"shijian\")); liuyan.setUser_id(rs.getString(\"user_id\")); Me(liuService.getUserNaMe(rs.getString(\"user_id\"))); liuyanList.add(liuyan); } rs.close(); }

catch(Exception e) { e.printStackTrace(); }

Mydb.closed();

req.setAttribute(\"liuyanList\

req.getRequestDispatcher(\"adMin/liuyan/liuyanMana.jsp\").forward(req, res);

(2)在线留言信息删除

1.描述:先是点击在线留言信息管理,页面跳转到在线留言信息管理界面,浏览所有

24 }

太原理工大学毕业设计(论文)用纸

的在线留言信息,点击要删除的在线留言信息,即可删除该在线留言信息。

(1)资料信息录入

1.描述:管理员输入资料相关正确信息后点击录入按钮,如果是没有输入完整的资料经理信息,都会给出相应的错误提示,不能录入成功。输入数据都通过forM表单中定义的方法onsubMit=\"return checkForM()\"来检查,checkForM()函数中是各种的校验输入数据的方式。

2.程序效果图如下图5.15所示。

图5.5 资料信息录入

(2)资料信息管理

1.描述:管理员点击左侧的菜单“资料管理”,页面跳转到资料管理界面,调用后台的servlet类查询所有资料信息。

2.程序效果图如下图5.16所示。

图5.6 资料信息管理

资料管理关键代码:

public void docAdd(HttpServletRequest req,HttpServletResponse res)

25

太原理工大学毕业设计(论文)用纸

{

String id=String.valueOf(new Date().getTiMe()); Meter(\"title\"); Meter(\"content\"); Meter(\"fujian\");

String fujianYuanshiMMeter(\"fujianYuanshiMing\"); Meter(\"shijian\"); String del=\"no\";

String sql=\"insert into t_doc values(?,?,?,?,?,?,?)\";

Object[] paraMs={id,title,content,fujian,fujianYuanshiMing,shijian,del}; DB Mydb=new DB(); MM(sql, paraMs); Mydb.closed();

req.setAttribute(\"Message\操作成功\"); req.setAttribute(\"path\ String targetURL = \"/coMMon/success.jsp\"; dispatch(targetURL, req, res); }

public void docDel(HttpServletRequest req,HttpServletResponse res) {

Meter(\"id\");

String sql=\"delete froM t_doc where id=?\"; Object[] paraMs={id}; DB Mydb=new DB(); MM(sql, paraMs); Mydb.closed();

req.setAttribute(\"Message\操作成功\"); req.setAttribute(\"path\ String targetURL = \"/coMMon/success.jsp\"; dispatch(targetURL, req, res); } public void docMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException {

List docList=new ArrayList();

String sql=\"select * froM t_doc where del='no'\";

26

太原理工大学毕业设计(论文)用纸

Object[] paraMs={}; DB Mydb=new DB(); try { MM(sql, paraMs); ResultSet rs=Mydb.getRs(); while(rs.next()) { Tdoc doc=new Tdoc(); doc.setId(rs.getString(\"id\")); doc.setTitle(rs.getString(\"title\")); doc.setContent(rs.getString(\"content\")); doc.setFujian(rs.getString(\"fujian\")); Ming(rs.getString(\"fujianYuanshiMing\")); doc.setShijian(rs.getString(\"shijian\")); docList.add(doc); } rs.close(); }

catch(Exception e) { e.printStackTrace(); }

Mydb.closed();

req.setAttribute(\"docList\

req.getRequestDispatcher(\"adMin/doc/docMana.jsp\").forward(req, res); }

(3)资料信息删除

1.描述:先是点击资料管理,页面跳转到资料管理界面,浏览所有的资料信息,点击要删除的资料,弹出的确定对话框,即可删除该资料信息。

(1)视频信息录入

1.描述:管理员输入视频相关正确信息后点击录入按钮,如果是没有输入完整的视频

27

太原理工大学毕业设计(论文)用纸

经理信息,都会给出相应的错误提示,不能录入成功。输入数据都通过forM表单中定义的方法onsubMit=\"return checkForM()\"来检查,checkForM()函数中是各种的校验输入数据的方式。

2.程序效果图如下图5.17所示。

图5.7 视频信息录入

(2)视频信息管理

1.描述:管理员点击左侧的菜单“视频管理”,页面跳转到视频管理界面,调用后台的servlet类查询所有视频信息。

2.程序效果图如下图5.18所示。

图5.18 视频信息管理

视频管理关键代码:

public void shipinAdd(HttpServletRequest req,HttpServletResponse res) {

String id=String.valueOf(new Date().getTiMe()); StrinMeter(\"title\"); Meter(\"content\"); Meter(\"fujian\");

28

太原理工大学毕业设计(论文)用纸

String fujianYuanshiMMeter(\"fujianYuanshiMing\"); Meter(\"shijian\"); String del=\"no\";

String sql=\"insert into t_shipin values(?,?,?,?,?,?,?)\";

Object[] paraMs={id,title,content,fujian,fujianYuanshiMing,shijian,del}; DB Mydb=new DB(); MM(sql, paraMs); Mydb.closed();

req.setAttribute(\"Message\操作成功\");

req.setAttribute(\"path\ String targetURL = \"/coMMon/success.jsp\"; dispatch(targetURL, req, res); }

public void shipinDel(HttpServletRequest req,HttpServletResponse res) { Meter(\"id\");

String sql=\"delete froM t_shipin where id=?\"; Object[] paraMs={id}; DB Mydb=new DB();

Mydb.doPstM(sql, paraMs); Mydb.closed();

req.setAttribute(\"Message\操作成功\");

req.setAttribute(\"path\

String targetURL = \"/coMMon/success.jsp\"; dispatch(targetURL, req, res); }

public void shipinMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException {

List shipinList=new ArrayList();

String sql=\"select * froM t_shipin where del='no'\"; Object[] paraMs={}; DB Mydb=new DB(); try { Mydb.doPstM(sql, paraMs);

29

太原理工大学毕业设计(论文)用纸

ResultSet rs=Mydb.getRs(); while(rs.next()) { Tshipin shipin=new Tshipin(); shipin.setId(rs.getString(\"id\")); shipin.setTitle(rs.getString(\"title\")); shipin.setContent(rs.getString(\"content\")); shipin.setFujian(rs.getString(\"fujian\")); Ming(rs.getString(\"fujianYuanshiMing\")); shipin.setShijian(rs.getString(\"shijian\")); shipinList.add(shipin); } rs.close(); }

catch(Exception e) { e.printStackTrace(); }

Mydb.closed();

req.setAttribute(\"shipinList\

req.getRequestDispatcher(\"adMin/shipin/shipinMana.jsp\").forward(req, res); }

(3)视频信息删除

1.描述:先是点击视频管理,页面跳转到视频管理界面,浏览所有的视频信息,点击要删除的视频,弹出的确定对话框,即可删除该视频信息。

1.描述:输入用户名和用户的原有密码,输入新密码以后点击修改按钮即可修改密码成功。对于管理员。

30

太原理工大学毕业设计(论文)用纸

2.程序效果图如图5.21所示。

图5.8 修改密码

1.描述:前台首页是浏览者打开一个网站后第一眼看到的网页,网站能不能吸引浏览者,在很大程度上取决于首页做得怎么样。首页包含内容虽然丰富但不杂乱,色彩搭配要合理,整体风格要独特。尤其是对于学习系统还要对网页的设计有学习的氛围,让人有学习的动力。

2.程序效果图如下图5.22所示。

图5.9 网站首页

31

太原理工大学毕业设计(论文)用纸

1. 描述:点击网站主页菜单的学习资料,进入学习资料信息列表,点击资料信息浏览具体内容,并可以下载。

2.程序效果图如下图5.23所示。

图5.10 学习资料下载

对学习资料的下载首先用户找到相应的学习资源在学习视频模块中然后点击下载,通过action

行为属性找到对于连接的URL属性中的地址,然后到数据库中查找对于的id号,通过在服务器中查找视频资源的源文件,并通过jsp页面现实下载文件对其下载,下载过程中不对数据库和服务器的资源修改,只是对其进行拷贝。

学习资料下载关键代码:

public void docAll(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException {

List docList=new ArrayList();

String sql=\"select * froM t_doc where del='no'\"; Object[] paraMs={}; DB Mydb=new DB(); try { MM(sql, paraMs); ResultSet rs=Mydb.getRs(); while(rs.next()) { Tdoc doc=new Tdoc(); doc.setId(rs.getString(\"id\")); doc.setTitle(rs.getString(\"title\"));

32

太原理工大学毕业设计(论文)用纸

doc.setContent(rs.getString(\"content\")); doc.setFujian(rs.getString(\"fujian\")); Ming(rs.getString(\"fujianYuanshiMing\")); doc.setShijian(rs.getString(\"shijian\")); docList.add(doc); } rs.close(); }

catch(Exception e) { e.printStackTrace(); }

Mydb.closed();

req.setAttribute(\"docList\

req.getRequestDispatcher(\"qiantai/doc/docAll.jsp\").forward(req, res); }

public void docDetailQian(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException {

String id=req.getParaMeter(\"id\"); Tdoc doc=new Tdoc();

String sql=\"select * froM t_doc where id=?\"; Object[] paraMs={id}; DB Mydb=new DB(); try { Mydb.doPstM(sql, paraMs); ResultSet rs=Mydb.getRs(); rs.next(); doc.setId(rs.getString(\"id\")); doc.setTitle(rs.getString(\"title\")); doc.setContent(rs.getString(\"content\")); doc.setFujian(rs.getString(\"fujian\")); doc.setFujianYuanshiMing(rs.getString(\"fujianYuanshiMing\")); doc.setShijian(rs.getString(\"shijian\")); rs.close();

33

太原理工大学毕业设计(论文)用纸

1. 描述:点击网站主页菜单的学习视频,进入学习视频信息列表,点击视频标题信息超链接,可以在线观看视频,登录系统后可以下载该视频。

}

catch(Exception e) { e.printStackTrace(); }

Mydb.closed();

req.setAttribute(\"doc\

req.getRequestDispatcher(\"qiantai/doc/docDetailQian.jsp\").forward(req, res); }

图5.11 学习视频下载

34

太原理工大学毕业设计(论文)用纸

视频下载的过程:首先用户找到相应的视频资源在学习视频模块中然后点击下载,通过action行为属性找到对于连接的URL属性中的地址,然后到数据库中查找对于的id号,通过在服务器中查找视频资源的源文件,并通过jsp页面现实下载文件对其下载,下载过程中不对数据库和服务器的资源修改,只是对其进行拷贝。

学习视频下载关键代码:

public void shipinAll(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException {

List shipinList=new ArrayList();

String sql=\"select * froM t_shipin where del='no'\"; Object[] paraMs={}; DB Mydb=new DB(); try { MM(sql, paraMs); ResultSet rs=Mydb.getRs(); while(rs.next()) { Tshipin shipin=new Tshipin(); shipin.setId(rs.getString(\"id\")); shipin.setTitle(rs.getString(\"title\")); shipin.setContent(rs.getString(\"content\")); shipin.setFujian(rs.getString(\"fujian\")); Ming(rs.getString(\"fujianYuanshiMing\")); shipin.setShijian(rs.getString(\"shijian\")); shipinList.add(shipin); } rs.close(); }

catch(Exception e) { e.printStackTrace(); }

Mydb.closed();

req.setAttribute(\"shipinList\

req.getRequestDispatcher(\"qiantai/shipin/shipinAll.jsp\").forward(req, res);

35

太原理工大学毕业设计(论文)用纸

}

public void shipinDetailQian(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException {

Meter(\"id\");

Tshipin shipin=new Tshipin();

String sql=\"select * froM t_shipin where id=?\"; Object[] paraMs={id}; DB Mydb=new DB(); try { MM(sql, paraMs); ResultSet rs=Mydb.getRs(); rs.next(); shipin.setId(rs.getString(\"id\")); shipin.setTitle(rs.getString(\"title\")); shipin.setContent(rs.getString(\"content\")); shipin.setFujian(rs.getString(\"fujian\")); Ming(rs.getString(\"fujianYuanshiMing\")); shipin.setShijian(rs.getString(\"shijian\")); rs.close(); }

catch(Exception e) { e.printStackTrace(); }

Mydb.closed();

req.setAttribute(\"shipin\

req.getRequestDispatcher(\"qiantai/shipin/shipinDetailQian.jsp\").forward(req, res); }

5.3.4留言板功能

1.描述:注册用户通过该模块实现实时留言功能。

留言板分为留言,留言版和留言管理,用户在内容出填写留言信息,提交后会显示提交成功,在留言版中会存在用户信息比容 姓名,时间,也容易得到相应的回复,对留言的内容做出解释和说明等。留言板的管理员有权对其中的不合法的留言进行删除和修改。

36

太原理工大学毕业设计(论文)用纸

2.程序效果图如下图5.28所示:

图5.12 系统留言界面

37

太原理工大学毕业设计(论文)用纸

第6章 软件测试

测试是开发时期最后一个阶段,是保证软件质量的重要手段。软件测试就是在受控制的条件下对系统或应用程序进行操作并评价操作结果的过程,所谓控制条件应包括正常条件与非正常条件。软件测试过程中应该故意地去促使错误的发生,也就是事情在不该出现的时候出现或者在应该出现的时候没有出现。从本质上说,软件测试是\"探测\",在“探测”中发现软件的毛病。

软件测试在软件生命周期中占据重要的地位,在传统的瀑布模型中,软件测试学仅处于运行维护阶段之前,是软件产品交付用户使用之前保证软件质量的重要手段。近来,软件工程界趋向于一种新的观点,即认为软件生命周期每一阶段中都应包含测试,从而检验本阶段的成果是否接近预期的目标,尽可能早的发现错误并加以修正,如果不在早期阶段进行测试,错误的延时扩散常常会导致最后成品测试的巨大困难。

事实上,对于软件来讲,不论采用什么技术和什么方法,软件中仍然会有错。采用新的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能完全杜绝软件中的错误,这些引入的错误需要测试来找出,软件中的错误密度也需要测试来进行估计。测试是所有工程学科的基本组成单元,是软件开发的重要部分。自有程序设计的那天起测试就一直伴随着。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中,用在测试上的开销要占30%到50%。如果把维护阶段也考虑在内,讨论整个软件生存期时,测试的成本比例也许会有所降低,但实际上维护工作相当于二次开发,乃至多次开发,其中必定还包含有许多测试工作。

程序测试的主要方法分为两大类,白盒测试和黑盒测试。

白盒测试:一种是以程序的内部逻辑结构为依据而设计测试用例的方法,因而又称结构测试或玻璃盒测试,将软件看成一个透明的白盒子,按照程序的内部结构和处理逻辑来选定测试用例,对软件的逻辑路径及过程进行测试,检查它与设计是否相符[20]。白盒测试就是要选取足够的测试用例,对源代码实行比较充分的覆盖,以便尽可能多地发现程序中的错误。主要有两种方法:一种称为逻辑覆盖法,另一种称为路径覆盖法。

(1)测试计划阶段:根据需求说明书,制定测试进度。 (2)测试设计阶段:依据程序设计说明书,按照一定规范化的方法进行软件结构划分和设计测试用例。

(3)测试执行阶段:输入测试用例,得到测试结果。

38

太原理工大学毕业设计(论文)用纸

(4)测试总结阶段:对比测试的结果和代码的预期结果,分析错误原因,找到并解决错误。

优点:迫使测试人员去仔细思考软件的实现、可以检测代码中的每条分支和路径、揭示隐藏在代码中的错误、对代码的测试比较彻底、最优化。

缺点:昂贵、无法检测代码中遗漏的路径和数据敏感性错误、不验证规格的正确性。

黑盒测试:也称功能测试,数据驱动测试等,它将待测对象堪称是一个黑盒子,在完全不考虑程序的内部结构和特性的情况下,只依据规格说明书检查程序的功能是否能正常使用。

黑盒测试主要是根据输入条件和输出条件的确定测试数据,来检查程序是否能产生正确的输出。进行黑盒测试主要有下面几种方法:等价分类法、边界值分析法、猜错法、因果图法。

本系统的测试综合了白盒测试、黑盒测试两种方法,但主要使用的是黑盒测试方法。在测试当中遵循了“尽早地和不断进行测试”,“保证测试用例的完整性和有效性”原则。通过测试达到以下测试目的:

1.功能检查:检查功能是否争取,是否遗漏或实现不了应该实现的功能等。 2接口检查:检查能否正确地接受信息或输出信息。

3数据检查:检查数据结构或外部信息是否有(如数据文件)访问错误。 4性能检查:检查性能需求能否得到满足。[21]

5初始化、终止检查:检查是否能进行正确地初始化或终止。

处理器:英特尔 Core i5-480M(双核) 内存:3GB 硬盘:500G

操作系统:Windows 7 数据库:SqlServer

通过对系统的全面测试,所有测试条目都已经通过,实现了基本要求,系统可以正常运行。

系统评价是指系统在正式运行了一段时间之后,对它在功能上、技术上和经济上所进行的审核评价。针对本系统的评价如下:

(1)系统功能评价

39

太原理工大学毕业设计(论文)用纸

根据本系统开发前所订的目标,在系统完成后经过测试运行,该系统达到了预定的开发目标,在实际使用中的功能可以满足用户需求。

(2)系统技术评价

本系统设计合理,功能达到了预期目标,且系统运行后稳定可靠,安全性高,具有实用性,大大提高了信访办公效率。

(3)系统经济评价

在规定时间内,该系统完成了系统分析时所确定的系统开发目标,达到了设计要求,投入使用后为用户节省了大量人力物力财力,提高了科学管理水平。

40

太原理工大学毕业设计(论文)用纸

结 论

计算机技术的飞速发展带动了很多行业的发展,计算机带给我们最直观的价值就是减少了人力物力的投资,提高了工作质量和效率,从而提高了整个社会的生产力。目前各大酒店充分利用计算机资源和网络资源来提高自身的管理水平,而有关在线学习系统的设计也成为在线学习系统争论的热点问题。

本文在分析在线学习系统的基础上,用JSP和SqlServer数据库设计并完成在线学习系统。通过系统调试结果显示,本系统基本完成了功能需求。在整个设计过程中,采用瀑布模型和结构化的设计方法。本系统界面美观友好,操作方便,做出了自己的特色。但由于时间仓促加上缺乏系统开发经验,系统在设计过程中不可避免地遇到了各种各样的问题,如:

1. 有些数据输入时没有及时的进行数据格式校验,不能保证数据绝对正确性。 2. 由于时间关系,系统功能实现不够完善,使用可能存在一些不方便。

本系统在实际使用过程中有可能出现一些问题,通过对系统的不断优化和完善,能够调试出真正符合实际情况的在线学习系统,形成统一、规范、科学、合理的在线学习系统。

\\

41

太原理工大学毕业设计(论文)用纸

参考文献

[1] 张孝祥、徐明华. JAVA基础与案例开发详解[M]. 清华大学出版社. 2009.45-46. [2] 康牧.JSP动态网站开发实用教程[M].清华大学出版社.2009.127-127. [3] 刘亚宾.精通Eclipse--JAVA技术大系[M].电子工业出版社.2005.167-168. [4] 于万波.网站开发与应用案例教程[M].清华大学出版社.2009.77-78. [5] 杨学瑜.高立军,软件开发过程与项目管理[M].电子工业出版社.2008.43-46. [6] 张洁才.Java web应用开发教程[M].科学出版社.2005.66-68. [7] 戴维尔.JavaScript程序员教程[M].电子工业出版社.2010.333-334.

[8] 黎连业、王华、李淑春.软件测试与测试技术[M].清华大学出版社.2009.321-322. [9] 黄梯云.管理信息系统[M].北京:电子工业出版社.2006 .216-217.

[10] JaMes D. McCaffrey等.NET软件测试自动化之道[M]. 北京:电子工业出版社.2007.213-214. [11] 甘仞初.信息系统开发[M].北京:经济科学出版社.2007.144-145.

[12] 马赫. DreaMweaver MX 2004 网页设计经典108例[M].中国青年出版社.2005.99-101. [13] 唐友国 湛洪波著.JSP网站开发详解[M].电子工业出版社.2008.111-112. [14] 卫红春等著.信息系统分析与设计[M].北京:清华大学出版社.2009.51-53. [15] 张大方 李玮等著.软件测试技术与管理[M].湖南:湖南大学出版社.2007.333-334. [16] (美)H.M.Deitel,P.Jdeitel.Java程序设计教程(第五版). 清华大学出版社.2004.212-212. [17] (美)Elliotte Rusty Harold.Java Network PrograMMing.东南大学出版社 .2005.122-123. [18] 孙卫琴等.精通struts:基于MVC的Java Web设计与开发[M]. 电子工业出版社.2005.144-144. [19] 张文静 林琪著.JSP程序设计[M].人民邮电出版社.2005.256-257.

[20] 孙卫琴 李洪成著.ToMcat与Java Web开发技术详解[M]. 电子工业出版社.2005.343-344. [21] (美)John J.Patrick.SQL基础(第二版).清华大学出版社.2004.77-79. [22] (美)David flanagan.Java技术手册(第五版).东南大学出版社.2006.33-35. [23] 黄裴、徐汀荣.电子商务原理与技术(第二版),科学出版社.2006.124-126.

42

太原理工大学毕业设计(论文)用纸

致谢

大学生活在这个时候即将划上一个句号。但是对于我的人生道路来说,这仅仅是一个逗号,我将面对的是又一次征程的开始。

回忆过去,许许多多的事情浮现在脑海:刚上大学时欢乐心情和兴奋的场景还历历在目。一切都是那么新鲜,那么富有吸引力。有快乐也有艰辛,有收获也有失落。衷心感谢信息学院所有支持帮助过我的老师,谢谢你们多年来的关心和爱护。同窗的友情同样难忘,你们与我共同走过了人生中不平凡的道路,给我留下了值得珍藏的美好记忆。

最后,我要特别感谢指导教师强彦老师和任聚财老师。本论文是在她们的悉心指导和热情帮助下完成的,老师认真负责的工作态度,严谨的治学精神和精深的理论水平都使我受益匪浅。她们无论在理论上还是在实践中,都给予我很大的帮助,使我专业技能的应用水平得到很大提高,这对于我以后的工作和学习都有益处。值此论文完成之际,特别向指导老师表示衷心的感谢和崇高的敬意,谢谢她们细心而又耐心地辅导,使得我得以顺利的完成毕业设计开发工作,同时也要感谢其他帮助过我的老师和同学,他们在我成长过程中给予了我很大的帮助,在此一并表示感谢。

由于本人水平有限,加上时间紧促,本文一定有不少缺点和不足,恳请各位老师给予帮助和指正。

43

太原理工大学毕业设计(论文)用纸

外文原文

SQL Server Connection Basics

SQL Server 2000 clients connect to SQL Server using a stack of APIs, object libraries, and protocols. Ken Henderson walks through each one and explains how they work and interoperate. (7 printed pages)

Introduction

The top of the stack is the API or object library layer. Applications connect to Microsoft® SQL Server through either API functions or interfaces exposed by an object library. Examples of APIs used to access SQL Server include ODBC and DB-Library. Examples of object libraries used to access SQL Server include OLE DB, ADO, and ADO.NET. Because ADO ultimately uses OLE DB to communicate with the server, there are really just two object libraries commonly used by Windows applications to communicate with SQL Server: OLE DB and ADO.NET. Connecting through ADO or ADO.NET is certainly more common than doing so over ODBC (although SQL Server's Query Analyzer and Enterprise Manager still connect over ODBC), so I'll discuss the client-side of SQL Server's connection architecture in terms of ADO/OLE DB and ADO.NET. Most apps these days get to SQL Server by way of an object library rather than ODBC or something similar.

ADO and OLE DB

OLE DB clients (also known as consumers) communicate with servers and other back-ends by means of a client-side provider. This provider is a set of one or more COM components that translate application requests into network interprocess communication (IPC) requests. In the case of SQL Server, the OLE DB provider that is most commonly used is SQLOLEDB, the

44

太原理工大学毕业设计(论文)用纸

Microsoft-provided OLE DB provider for SQL Server. SQLOLEDB comes with SQL Server and is installed as part of the Microsoft Data Access Components (MDAC) stack.

Applications that communicate with SQL Server using ADO do so by first establishing a connection to the server using a Connection object. ADO's Connection object accepts a connection string that specifies the OLE DB provider to be used as well as the parameters to pass to it. You'll see \"SQLOLEDB\" in this string if an app is connecting to SQL Server using the SQLOLEDB provider.

It's also possible for an ADO application to connect over ODBC to SQL Server. To do this, the app uses the OLE DB provider for ODBC and specifies an ODBC data source that references the target SQL Server in its connection string. In this scenario, the application communicates with OLE DB, and the OLE DB provider for ODBC makes the appropriate ODBC API calls to talk to SQL Server.

ADO.NET applications typically connect to SQL Server using the .NET Framework Data Provider for SQL Server. This native provider allows ADO.NET objects to communicate directly with SQL Server. Typically, an application uses a SqlConnection object to establish a connection, then uses a SqlCommand object to send commands to the server and receive results back from it. The SqlDataAdapter and SqlDataReader classes are typically used in conjunction with SqlCommand to interact with SQL Server from managed code applications.

By making use of the OleDbConnection class, ADO.NET applications can also use the SQLOLEDB OLE DB provider to interact with SQL Server. And they can access SQL Server by way of ODBC through the OdbcConnection class. So, from managed code alone, you have three distinct ways of accessing SQL Server from an application. This is good to know from a

45

太原理工大学毕业设计(论文)用纸

troubleshooting standpoint because it can help you isolate connection-related problems you encounter to a particular data access layer or library.

Client-Side Net-Libraries

The next layer down in the stack is the Net-Library. A Net-Library provides the conduit between the API or object library an application uses to communicate with SQL Server and the networking protocols used to exchange data with the network. SQL Server provides Net-Libraries for all major networking protocols. These libraries transparently handle sending requests from the client to the SQL Server and returning the server's responses to the client. You can configure which Net-Libraries are available on a particular client using SQL Server's Client Network Utility. Supported client-side protocols include TCP/IP, Named Pipes, NWLink, Multiprotocol (RPC), and a few others.

One Net-Library that's worth special mention here is the shared memory Net-Library. As the name suggests, this Net-Library uses Windows' shared memory facility to communicate between a SQL Server client and server. Naturally, this means that the client and server must reside on the same physical machine.

Because it is able to bypass the physical network stack, the shared memory Net-Library can be considerably faster than other Net-Libraries. Access to the shared memory region is protected by synchronization objects, so the speed of the communication between the client and server is constrained mainly by Windows' ability to signal and unsignal kernel objects and processes' ability to copy data to and from the shared memory region.

You can indicate that the shared memory Net-Library should be used by specifying either a period or (local) as your machine name when connecting. You can also prefix your machine\\instance name with lpc: when connecting to indicate that you want to use the shared memory Net-Library.

46

太原理工大学毕业设计(论文)用纸

Understand that, even when connecting to a SQL Server on the same machine, the shared memory Net-Library is not necessarily your best connection option. The directness of the connection between the client and server can limit its scalability in some situations. As with other elements in an application's overall architecture, you should always thoroughly test a given technology solution before assuming that it scales well or is faster than alternate approaches.

Connections

When a client connects, SQL Server's user mode scheduler (UMS) component assigns it to a particular scheduler. At startup, SQL Server creates a separate UMS scheduler for each CPU on the system. As clients connect to the server, they are assigned to the scheduler with the fewest number of connections. Once connected, a client never changes schedulers—it will remain on its assigned scheduler until it disconnects.

This has important implications for applications that establish multiple connections to the server. If an application is poorly designed or does not evenly distribute work across its connections, it's possible for the app to cause needless contention for CPU resources between some of its connections, while others remain virtually idle.

Say, for example, that at application establishes four connections to SQL Server that is running on a machine with two processors and that connections 1 and 3 end up on processor 0, while connections 2 and 4 end up on processor 1. If the lion's share of the app's work is carried out over connections 1 and 3, they will contend for CPU 0 while CPU 1 might remain virtually idle. In this situation, there's nothing the app can do but disconnect/reconnect some of its connections and hope that connections 1 and 3 end up on different CPUs (there's no way to specify processor affinity when connecting) or redistribute its workload across its connections such that they are more balanced. The latter is, of course, far preferable to the former.

Connection Memory

47

太原理工大学毕业设计(论文)用纸

SQL Server sets aside three packet buffers for every connection made from a client. Each buffer is sized according to the default network packet size specified by the sp_configure stored procedure. If the default network packet size is less than 8KB, the memory for these packets comes from SQL Server's buffer pool. If it's 8KB or larger, the memory is allocated from SQL Server's MemToLeave region.

It's worth noting that the default network packet size for the .NET Framework Data Provider for SQL Server is 8KB, so the buffers associated with managed code client connections typically come from SQL Server's MemToLeave region. This contrasts with classic ADO applications, where the default packet size is 4KB, and the buffers are allocated form the SQL Server buffer pool.

Events

Once connected, client requests typically fall into one of two broad categories: language events and remote procedure calls. Although there are certainly others, most requests from a SQL Server client to a server consist of one of these two types. A language event is a batch of T-SQL sent from the client to the server. For example, if you call the Execute method of an ADO Command object whose CommandText property is set to a T-SQL query and whose CommandType property is set to adCmdText, the query is submitted to the server as a language event. Likewise, if you set CommandType to adCmdTable and call the Execute method, ADO will generate an internal query that selects all the columns in the table identified by the CommandText property and submit it to the server as a language event. On the other hand, if you set CommandType to adStoredProc, calling Execute will cause ADO to submit a remote procedure call request to the server to execute the stored procedure listed in the CommandText property.

48

太原理工大学毕业设计(论文)用纸

Why do you care about whether you're submitting requests to the server as language events or RPCs? You care because RPCs, generally speaking, perform better, especially when you're repeatedly calling the same query with different filter values. Although SQL Server can auto-parameterize plain language event requests, its ability to do so is pretty limited. It will not attempt to auto-parameterize certain types of queries at all. This can cause different executions of what is essentially the same query to incur the cost of plan compilation on the server simply because they filter on different values. Quite often, this is not what you want—you want to compile a new plan for the first execution of a query, then reuse the plan for subsequent executions that happen to feature different parameters.

An RPC, on the other hand, encourages plan reuse by explicitly parameterizing a query rather than relying on the server to do it. A single plan is generated for the first execution of the procedure, and subsequent executions automatically reuse it, even if they supply different values for the parameters. Calling a stored procedure using an RPC versus doing so through a language event not only saves the execution time and CPU resources required for plan compilation, it also makes better use of SQL Server's memory resources because it avoids wasting memory on redundant execution plans.

This is the same reason that sp_executesql is generally preferred to EXEC() when executing dynamic T-SQL. Sp_executesql works by creating a stored procedure using the specified query, then calling it using the supplied parameters. Unlike EXEC(), sp_executesql provides a mechanism that allows you to parameterize dynamic T-SQL and encourage plan reuse. A dynamic query that is executed using sp_executesql has a much better chance of avoiding unnecessary compilation and resource costs than one ran using EXEC().

49

太原理工大学毕业设计(论文)用纸

TDS

RPCs, language events, and other types of requests sent from a client to SQL Server are formatted into a SQL Server-specific data format known as Tabular Data Stream (TDS). TDS is the \"language\" spoken between SQL Server clients and servers. Its exact format is no longer documented, but a client must speak TDS if it wishes to communicate with SQL Server.

Currently, SQL Server supports three versions of TDS: TDS 8.0 (for SQL 2000 clients), TDS 7.0 (for SQL Server 7.0 clients), and TDS 4.2 (for SQL Server 4.2, 6.0, and 6.5 clients). The only version that completely supports all SQL Server 2000 features is TDS 8.0. The others are maintained for backward compatibility.

Server-Side Net-Libraries

On the server side, client requests are initially received by listeners SQL Server sets up to listen on particular networking protocols. These listeners consist of networking libraries on the server and the server-side Net-Libraries that provide a conduit between them and the server. You can configure the protocols on which the server listens using the Server Network Utility. Except when dealing with clusters, SQL Servers support the same range of networking protocols as is supported by clients. For clustered SQL Servers, only TCP/IP and Named Pipes are available.

SQL Server sets up one thread per networking protocol on which it listens for client requests, and uses Windows' I/O completion port mechanism to wait for and process requests efficiently. As TDS packets are received from the network, the Net-Library listener reassembles them into their original client requests and passes them on to SQL Server's command-processing layer, Open Data Services (ODS).

Returning Results to the Client

When the server is ready to return results for a particular client request, it uses the same network stack over which the request was initially received. It sends results over the server-side

50

太原理工大学毕业设计(论文)用纸

Net-Library to the appropriate networking protocol, and these, in turn, are sent back across the network to the client in TDS format.

On the client-side, the TDS packets received from the server are reassembled from the IPC layer by the client-side Net-Library, then forwarded on to the API or object library that initiated the request.

Putting It All Together

Despite all the pieces involved, the roundtrip between a SQL Server client and server can be quite fast—sub-second response time is not unusual at all, especially when working with the shared memory Net-Library. There are several data points here that are worth keeping in mind as you build and tune your own SQL Server client applications:

If your app runs on the same machine as your SQL Server, consider using the shared memory Net-Library if you aren't already. Shared memory Net-Library-based connections are often considerably faster than other types of connections. Keep in mind what I said earlier, though: always thoroughly test a solution and compare it with viable alternatives before assuming that it is inherently better or faster. The proof is in the pudding.

Because a client is assigned to a particular UMS scheduler when it first connects and will not leave that scheduler until it disconnects, it's important to ensure that an application's workload is balanced across the connections it establishes to the server. Unbalanced workloads can cause unnecessary CPU contention and suboptimal resource usage.

The default network packet size you configure on the server and that clients specify when connecting directly affects how much memory they require on the server and the pool from which it is allocated. Keep this in mind as you configure servers for scalability and speed. Also keep in mind that, by default, ADO.NET apps will have a larger network packet size than ADO apps.

51

太原理工大学毕业设计(论文)用纸

Generally speaking, you should prefer RPCs to language events when sending requests to the server. Set the appropriate properties in the ADO or ADO.NET objects you're using to facilitate this.

When executing dynamic T-SQL, use sp_executesql rather than EXEC() when possible. About the only time this isn't possible is when using EXEC()'s ability to concatenate query fragments into dynamic query strings that exceed what can be stored in a single local variable (a rare situation).

When you run into client-side problems that you suspect may have to do with the object library or API you're using to reach the server, one troubleshooting technique you can use is to change the client-side mechanism you're using so that you can isolate the problem to a particular component. For example, let's say that you upgrade MDAC and begin seeing 17805 errors in your SQL Server error log indicating that malformed TDS packets are arriving from a client-side ADO application. You might try switching the app to use the OLE DB provider for ODBC, if you can do so without much trouble, to see whether the problem is related to the SQLOLEDB provider in some way. Conversely, if your ADO-based app has been connecting over ODBC, you might switch to SQLOLEDB to see if that remedies the problem or at least helps you narrow the scope.

Along these same lines, it sometimes makes sense to change out the Net-Library you're using when troubleshooting connection-related problems. If you're using TCP/IP, perhaps Named Pipes would be worth trying. For example, if you're running into an issue with your DHCP server and don't have a valid IP address, you won't be able to connect to SQL Server using TCP/IP. By switching to Named Pipes, you can quickly isolate the problem to something specific to TCP/IP. On the other hand, if you switch Net Libraries and still have the same problem, you can probably rule out Net-Library-specific issues. Perhaps the server is down or a piece of the network infrastructure between you and the server is not functioning properly. If nothing else, being able to

52

太原理工大学毕业设计(论文)用纸

easily change the Net-Library an app uses without having to change the app itself gives you a tool for helping isolate problems. Even if a particular Net-Library isn't viable for you in the long term, temporarily switching a client to use it can help narrow down where a connection-related issue resides.

5 3

太原理工大学毕业设计(论文)用纸

中文翻译

SQL Server 连接基础知识

摘要

SQL Server 2000 客户端通过由 API、对象库和协议组成的堆栈连接到 SQL Server。Ken Henderson 将逐一介绍该堆栈的每个组成部分,并说明它们如何工作以及如何进行交互操作。 引言

该堆栈的顶部是 API 或对象库层。应用程序通过对象库公开的 API 函数或接口连接到 Microsoft® SQL Server。用于访问 SQL Server 的 API 示例包括 ODBC 和

DB-Library。用于访问 SQL Server 的对象库示例包括 OLE DB、ADO 和 ADO.NET。由于 ADO 最终使用 OLE DB 与服务器通信,因此 Windows 应用程序在与 SQL Server 通信时实际上只使用两个常用的对象库,即 OLE DB 和 ADO.NET。由于通过 ADO 或

(但 SQL Server 的查询分析器和ADO.NET 进行连接通常比通过 ODBC 进行连接更普遍

企业管理器仍通过 ODBC 进行连接),因此本文将从 ADO/OLE DB 和 ADO.NET 的角度介绍 SQL Server 连接体系结构的客户端。如今,大多数应用程序均通过对象库(而非 ODBC 或类似 API)连接到 SQL Server。 ADO 和 OLE DB

OLE DB 客户端(也称作使用者)通过客户端提供程序与服务器以及其他后端程序进行通信。此提供程序是一组 COM 组件(一个或多个),用于将应用程序请求转换为网络进程间通信 (IPC) 请求。在使用 SQL Server 的情况下,最常用的 OLE DB 提供程序是

它是 Microsoft 为 SQL Server 提供的 OLE DB 提供程序。SQLOLEDB,SQLOLEDB 随

附于 SQL Server 中,并作为 Microsoft 数据访问组件 (MDAC) 库的一部分安装。

为了使用 ADO 与 SQL Server 进行通信,应用程序首先使用 Connection 对象建立与服务器的连接。ADO 的 Connection 对象接受一个连接字符串,该字符串指定要使用的

如果应用程序使用 SQLOLEDB 提供程序连接到 OLE DB 提供程序以及传递给它的参数。

SQL Server,则该字符串中将显示“SQLOLEDB”。

ADO 应用程序还可以通过 ODBC 连接到 SQL Server。为此,应用程序将使用适用于 ODBC 的 OLE DB 提供程序,并指定在其连接字符串中引用目标 SQL Server 的

这种情况下,应用程序与 OLE DB 进行通信,同时 ODBC 的 OLE DB 提ODBC 数据源。

供程序调用相应的 ODBC API,以便与 SQL Server 进行会话。

ADO.NET 应用程序通常使用 .NET Framework Data Provider for SQL Server 连接到

该本机提供程序使 ADO.NET 对象能够与 SQL Server 直接进行通信。通常,SQL Server。

应用程序使用 SqlConnection 对象建立连接,然后使用 SqlCommand 对象向服务器发送命

54

太原理工大学毕业设计(论文)用纸

令,并接收服务器返回的结果。SqlDataAdapter 和 SqlDataReader 类通常与 SqlCommand 一起使用,以便通过托管的代码应用程序与 SQL Server 进行交互。

通过 OleDbConnection 类,ADO.NET 应用程序还可以使用 SQLOLEDB OLE DB 提供程序与 SQL Server 进行交互。此外,它们可以通过 OdbcConnection 类使用 ODBC 访问 SQL Server。因此,仅通过托管代码,您就有三种不同的方法从应用程序访问 SQL Server。从故障排除的角度而言,了解这些方法是非常有用的,因为它可以帮助您将遇到的与连接相关的问题归结到特定的数据访问层或库。 客户端 Net-Library

该堆栈中的下一层是 Net-Library。Net-Library 在 API 或对象库(应用程序使用它与

与网络协议(用于与网络交换数据)之间提供了一个通道。SQL Server 进行通信)SQL Server

为所有主要的网络协议提供了 Net-Library。这些库以透明方式将客户端发出的请求发送到

并将服务器发出的响应返回给客户端。可以使用 SQL Server 的客户端网络实SQL Server,

用程序配置适用于特定客户端的 Net-Library。支持的客户端协议包括 TCP/IP、命名管道、NWLink、多协议 (RPC) 和其他一些协议。

尤其值得一提的 Net-Library 是共享内存 Net-Library。顾名思义,该 Net-Library 使用 Windows 的共享内存功能在 SQL Server 客户端与服务器之间进行通信。显然,这意味着客户端与服务器必须位于同一台物理计算机上。

由于它能够绕过物理网络堆栈,因此共享内存 Net-Library 要比其他 Net-Library 快得多。对共享内存区域的访问受到同步对象的保护,因此客户端与服务器之间的通信速度主要受限于 Windows 对内核对象进行调度的能力,以及进程与共享内存区域之间进行数据复制的能力。

可以在连接时将某个时间段或(本地)指定为您的计算机名,来指示使用共享内存 Net-Library。也可以在连接时为计算机\\实例名加上前缀 lpc:,来指示要使用共享内存 Net-Library。

注意,即使连接到同一台计算机上的 SQL Server,共享内存 Net-Library 也未必就是最佳的连接选项。在某些情况下,客户端与服务器之间的直接连接可能限制它的扩展性。与应用程序整体体系结构中的其他元素一样,应始终对给定技术解决方案进行全面的测试,然后才能判断它是否有良好的扩展性以及是否比其他方法更快。 连接

客户端进行连接时,SQL Server 的用户模式计划程序 (UMS) 组件将它指定给特定的计划程序。启动时,SQL Server 为系统上的每个 CPU 创建一个单独的 UMS 计划程序。当客户端连接到服务器时,这些客户端将指定给具有最少连接数的计划程序。连接后,客户端将不会更换计划程序 - 它将始终受到指定计划程序的控制,直到连接断开。

这对与服务器建立多个连接的应用程序很重要。如果应用程序性能较差,或无法在它的多个连接上平均分配工作,则在该应用程序的某些连接之间可能造成不必要的 CPU 资源争用,而其他连接实际上却处于空闲状态。

55

太原理工大学毕业设计(论文)用纸

例如,应用程序与双处理器计算机上运行的 SQL Server 建立了四个连接,连接 1 和

连接 2 和 4 隶属于处理器 1。如果应用程序的大部分工作通过连接 1 3 隶属于处理器 0,

和 3 执行,则这两个连接将争用 CPU 0,而 CPU 1 实际上可能仍处于空闲状态。这种情况下,应用程序只能断开某些连接或重新连接某些连接,并希望连接 1 和 3 隶属于不同的 CPU (连接时无法指定处理器隶属关系),或在它的连接上重新分配工作负荷,以便每个连接的工作负荷更加均衡。当然,后一种情况要远好于前一种情况。 连接内存

每个缓冲区的大小取决SQL Server 为客户端请求的每个连接保留三个数据包缓冲区。

于 sp_configure 存储过程指定的默认网络数据包大小。如果默认网络数据包大小小于 8 KB,则这些数据包的内存将由 SQL Server 的缓冲池提供。否则,该内存将由 SQL Server 的 MemToLeave 区域分配。

值得一提的是,.NET Framework Data Provider for SQL Server 的默认网络数据包大小为 8KB,因此,与托管代码客户端连接关联的缓冲区通常由 SQL Server 的 MemToLeave 区域提供。而典型的 ADO 应用程序却不同,它们的默认数据包大小为 4 KB,因此缓冲区将由 SQL Server 缓冲池分配。 事件

连接后的客户端请求通常分为两种广泛类别:语言事件和远程过程调用。尽管还存在其他类别,但大多数由 SQL Server 客户端发送到服务器的请求由以下两种类型之一构成:语言事件是从客户端发送到服务器的 一组 T-SQL。例如,如果调用 ADO Command 对象(其 CommandText 属性设置为 T-SQL 查询,CommandType 属性设置为 adCmdText)的 Execute 方法,则查询将作为语言事件提交给服务器。同样,如果将 CommandType 设置为 adCmdTable 并调用 Execute 方法,则 ADO 将生成一个内部查询(它将选择 CommandText 属性标识的表中的所有列),并将它作为语言事件提交给服务器。另一方面,如果将 CommandType 设置为 adStoredProc,则调用 Execute 将使 ADO 向服务器提交一个远程过程调用请求,以执行 CommandText 属性中列出的存储过程。

为何要关心将请求作为语言事件还是作为 RPC 提交给服务器呢?通常,这是因为

特别是在重复调用具有不同筛选值的同一查询时。尽管 SQL Server RPC 的功能更为出色,

可以自动将普通的语言事件请求参数化,但这种能力非常有限。它从不尝试自动将某些类型的查询参数化。这可能会导致基本相同的查询产生不同的执行,从而只因为这些不同的执行提供不同的值,而导致在服务器上白白浪费计划编译的成本。这通常不是您所希望的结果 - 您希望针对查询的第一次执行编译一个新的计划,然后将该计划重复用于具有不同参数的执行。

而 RPC 则通过显式参数化查询(而不是依赖服务器参数化查询)来支持计划重复使用。为过程的第一次执行生成一个计划后,随后的执行将自动重复使用该计划,即使它们提供的参数值不同。与通过语言事件调用存储过程相比,使用 RPC 调用存储过程不仅节省了计划编译所需的执行时间和 CPU 资源,还增强了 SQL Server 内存资源的利用率,因为它避免了冗余执行计划所浪费的内存。

56

太原理工大学毕业设计(论文)用纸

在执行动态 T-SQL 时,通常首选 sp_executesql 而不是 EXEC() 也出于同样的原因。Sp_executesql 的工作方式是:使用指定的查询创建一个存储过程,然后使用提供的参数调用它。与 EXEC() 不同,sp_executesql 提供了一个允许您参数化动态 T-SQL 并支持计划重复使用的机制。使用 sp_executesql 执行的动态查询比使用 EXEC() 的查询能够在更大程度上避免不必要的编译和资源消耗。 TDS

从客户端发送到 SQL Server 的 RPC、语言事件和其他类型的请求被格式化为称作表格数据流 (TDS) 的 SQL Server 特定数据格式。TDS 是 SQL Server 客户端和服务器之间使用的“语言”。对于它的确切格式将不作介绍,但是,如果客户端要与 SQL Server 进行通信,就必须使用 TDS。

目前,(适用于 SQL 2000 客户端)、SQL Server 支持三种版本的 TDS:TDS 8.0TDS 7.0(适用于 SQL Server 7.0 客户端)和 TDS 4.2(适用于 SQL Server 4.2、6.0 和 6.5 客户端)。完全支持所有 SQL Server 2000 功能的版本只有 TDS 8.0。其他版本保持向后兼容。

服务器端 Net-Library

在服务器端,客户端请求最初由 SQL Server 为侦听特定网络协议而建立的侦听器接收。这些侦听器由服务器上的网络库以及服务器端的 Net-Library(在它们与服务器之间提供管道)构成。您可以使用 SQL Server 网络实用程序配置服务器侦听的协议。SQL Server 与客户端支持同样范围的网络协议(处理群集的情况除外)。对于群集化的 SQL Server,只有 TCP/IP 和命名管道可用。

SQL Server 为侦听客户端请求所使用的每个网络协议设置一个线程,并使用

Windows 的 I/O 完成端口机制等待和有效处理请求。从网络接收到 TDS 数据包时,Net-Library 侦听器将其重新汇编为它们的原始客户端请求,并将这些请求传递到 SQL Server 的命令处理层,即开放式数据服务 (ODS)。 将结果返回到客户端

服务器在准备将特定客户端请求的结果返回时,将使用最初接收请求时所用的网络堆栈。它通过服务器端 Net-Library 将结果发送到相应的网络协议,随后这些结果将通过网络以 TDS 格式返回到客户端。

在客户端上,客户端 Net-Library 将从服务器接收的 TDS 数据包从 IPC 层重新汇编,并将其继续转发到初始化该请求的 API 或对象库。

小结

尽管涉及了所有组件,但 SQL Server 客户端与服务器之间的往返过程却相当快 - 特别是在使用内存 Net-Library 时,亚秒响应时间非常普遍。构建和调整您自己的 SQL Server 客户端应用程序时,以下几个与数据相关的问题值得注意:

• 如果应用程序与 SQL Server 运行在同一台计算机上,则建议您使用共享内存 Net-Library(如果尚未使用它)。基于共享内存 Net-Library 的连接通常比其他类

57

太原理工大学毕业设计(论文)用纸

型的连接快很多。在注意上述内容的同时,还应:始终全面测试解决方案并将它与其他可行方案进行对比,这样才能判断它是否确实更好或更快。事实胜于雄辩。 • 由于客户端在第一次连接时将指定给特定的 UMS 计划程序,并只有在断开连接后,才会摆脱该计划程序的控制,因此确保在应用程序与服务器建立的连接上均衡分配工作负荷非常重要。工作负荷不均衡可导致不必要的 CPU 争用并降低资源使用率。

• 在服务器上配置的默认网络数据包大小以及客户端在连接时指定的网络数据包大小将直接影响它们在服务器上所需的内存量和分配内存的池。对服务器进行扩展性和速度配置时,应记住这一点。还应记住,默认情况下,ADO.NET 应用程序的网络数据包大小比 ADO 应用程序的更大。 • 通常,在向服务器发送请求时,应首选 RPC 而非语言事件。为此,应在使用的 ADO 或 ADO.NET 对象中设置相应的属性。 • 执行动态 T-SQL 时,应在可能的情况下使用 sp_executesql 代替 EXEC()。唯一例外的情况是,当使用 EXEC() 的功能将查询片断连接而成的动态查询字符串的大小超过单个本地变量的存储大小时(这种情况非常少见)。 • 当遇到客户端问题,并且怀疑它可能和连接服务器时所用的对象库或 API 有关时,可以使用的一个故障排除技巧就是更改所用的客户端机制,这样可以将问题归结为特定的组件。例如,假设您升级 MDAC 并开始在 SQL Server 错误日志中看到 17805 错误,这表明客户端 ADO 应用程序发送的 TDS 数据包的格式不正确。您可能尝试让应用程序转为使用 ODBC 的 OLE DB 提供程序,如果您可以较为容易地做到这一点,应看看该问题是否与 SQLOLEDB 提供程序有一定的关系。相反,如果基于 ADO 的应用程序一直通过 ODBC 进行连接,则可以切换到 SQLOLEDB,看看这是否能解决问题,或至少帮助您缩小问题的范围。 · 同样,在对连接问题进行故障排除时,更改正在使用的 Net-Library 有时会有所帮助。如果使用 TCP/IP,命名管道也许值得一试。例如,如果 DHCP 服务器出现问题,并且没有有效的 IP 地址,则您将无法使用 TCP/IP 连接到 SQL Server。通过切换到命名管道,可以快速地将问题归结为 TCP/IP 特定的因素上。另一方面,如果在切换 Net Library 后仍存在同样的问题,则可以排除 Net-Library 方面的问题。问题的原因可能是服务器已关闭,或在您与服务器之间的某处网络基础设施无法正常工作。最后,还可以容易地更改应用程序使用的 Net-Library,而不必更改应用程序本身,这样就为您提供一个帮助缩小问题范围的工具。尽管从长远角度而言,使用某一特定 Net-Library 并不可行,但让客户端临时使用它可以帮助您缩小连接相关问题的范围。

58

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sceh.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务