毕业论文范文网-论文范文
电气工程 会计论文 金融论文 国际贸易 财务管理 人力资源 学前教育 德语论文 工程管理 文化产业 工商管理 会计专业 行政管理 广告学
机械设计 汉语文学 英语论文 物流论文 电子商务 法律论文 工商管理 旅游管理 市场营销 药学论文 播音主持 人力资源 金融论文 保险学
制药工程 生物工程 包装工程 模具设计 测控专业 工业工程 教育管理 行政管理 计算机论 电子信息 市场营销 法学论文 财务管理 投资学
体育教育 小学教育 印刷工程 土木工程 书法论文 护理论文 心理学论 信息管理 公共事业 给水排水 新闻专业 摄影专业 广电编导 经济学
  • 范文首页 |
  • 毕业论文 |
  • 论文范文 |
  • 计算机论文 |
  • 外文翻译 |
  • 工作总结 |
  • 工作计划 |
  • 现成论文 |
  • 论文下载 |
  • 教学设计 |
  • 免费论文 |
  • 原创论文 |
搜索 高级搜索

原创毕业论文

当前位置:毕业论文范文网-论文范文 -> 免费论文 -> 计算机论文

Browser/Server模式下管理系统的开发

作者: 浏览:12次
免费专业论文范文
免费专业论文
政治工作论文
计算机论文
营销专业论文
工程管理论文范文
医药医学论文范文
法律论文范文
生物专业论文
物理教学论文范文
人力资源论文范文
化学教学论文范文
电子专业论文范文
历史专业论文
电气工程论文
社会学专业论文
英语专业论文
行政管理论文范文
语文专业论文
电子商务论文范文
焊工钳工技师论文
社科文学论文
教育论文范文
数学论文范文
物流论文范文
建筑专业论文
食品专业论文
财务管理论文范文
工商管理论文范文
会计专业论文范文
专业论文格式
化工材料专业论文
英语教学专业论文
电子通信论文范文
旅游管理论文范文
环境科学专业论文
经济论文
人力资源论文范文
营销专业论文范文
财务管理论文范文
物流论文范文
财务会计论文范文
数学教育论文范文
数学与应用数学论文
电子商务论文范文
法律专业论文范文
工商管理论文范文
汉语言文学论文
计算机专业论文
教育管理论文范文
现代教育技术论文
小学教育论文范文
机械模具专业论文
报告,总结,申请书
心理学论文范文
学前教育论文范文

收费计算机专业论文范文
收费计算机专业论文
Delphi
ASP
VB
JSP
ASP.NET
VB.NET
java
VC
pb
VS
dreamweaver
c#.net
vf
VC++
计算机论文
毕业论文范文题目:Browser/Server模式下管理系统的开发,论文范文关键词:Browser/Server模式下管理系统的开发
Browser/Server模式下管理系统的开发毕业论文范文介绍开始:

目   录
摘 要--------------------------------------------------------2
ABSTRACT-----------------------------------------------------2
第一章 综述 (绪论) ------------------------------------------3
 1.1 MVC设计模式------------------------------------------3
 1.2 JSP Model1 和 JSP Model2-----------------------------4
第二章 理论部分-----------------------------------------------7
 2.1 Struts概述-------------------------------------------7
 2.2 Struts的工作流程-------------------------------------9
 2.3 JDBC原理---------------------------------------------11
第三章 实践部分----------------------------------------------13
 3.1 目标系统需求说明-------------------------------------13
 3.2 MVC的实现--------------------------------------------15
 3.3 实践结果----------------------------------------------34
第四章 结论---------------------------------------------------36
致谢----------------------------------------------------------36
附录----------------------------------------------------------37
 关于三江学院师资库的需求说明------------------------------37
 参考文献-------------------------------------------------39
 英文文献-------------------------------------------------42
 中文翻译-------------------------------------------------49

摘要
 本文主要论述了MVC设计模式的原理、JSP Model1 和 JSP Model2的起源和理论知识以及JDBC的基本知识等。出于理论联系实际的需要,在本文中还详细介绍了以下内容:1,由于我们使用了Struts开源项目,所以本文对Struts的工作流程有详细的介绍。同时结合MVC设计模式,展现了Struts是如何实现MVC设计模式的。2,关于项目开发的关键性描述。软件开发的成功离不开需求分析与设计工作,本文简要介绍了笔者在需求分析以及设计方面所做的工作。3,编码技巧展示。笔者利用登录模块展示MVC设计模式。开发者将登录模块用MVC方式分解,利用Struts框架,将登录模块分解为View层、Controller层、Model层。本文展示了相关的编码,其中重点介绍了所编写的ActionForm类以及Controller层。论文最后给出了程序运行的效果实例。


ABSTRACT
 This text mainly discusses about the basic knowledge of the design-principle  of MVC , the theoretical knowledge and the origins of JSP Model1 and JSP Model2, and basic knowledge of JDBC. In practice, as we use the open source software of Struts, all the workflow in Struts have detailed introduction, combine the MVC design mode at the same time, emerge how Struts is carry out the MVC design mode .The successfuly software develop can not get away from need analysis and the design works, at the beginning of the experiment, the synopsis introduced analytical in the need and the work that the design aspect do, then make use of the MVC design mode and decompositing the landing mode , describe how the exploitation Struts carries on the coding of View layer, Controller layer, Model layer in our coding process.It point introduced the ActionForm and the Controller layer that coded by me.Finally , give the result that procedure circulate solid example.

第一章  综述
 设计模式就是一系列的对象以及对象间的关系,据此对某一特定的软件设计问题提供一个久经检验的、可扩展的方案。在Browser/Server模式下,Model-View-Controller(MVC)模式无可争辩地成为了最广为人知、最著名的设计模式了。
 在这次的开发中,我们就使用了在MVC模式下,由Apache软件组织提供的一项开放源代码产品Struts。它为Java Web应用提供了模型-视图-控制器(Model-View-Controller,MVC)框架,尤其适用于开发大型可扩展的Web应用。Struts为我们的Web应用提供了一个通用框架,使得我们可以把精力集中在如何解决实际的师资业务问题上。
 
1.1 MVC设计模式
 MVC是Model-View-Controller,即模型-视图-控制器。MVC是一种设计模式,它强制性地把应用程序的输入、处理和输出分开。MVC把应用程序分成三个核心模块:模型、视图、控制器,它们分别担负不同的任务。图1-1显示了这几个模块各自的功能以及它们的相互关系。


视图
 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入,但是它并不进行任何的实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新。
模型
 模型时应用程序的主体部分。模型表示业务数据和业务逻辑。一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,所以提高了应用的可重用性。
控制器
 控制器接受用户的输入并调用模型和视图去完成用户的需求。当Web用户单击Web页面中的提交按钮来发送HTML表单时,控制器接收请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据。
MVC处理过程
 现在我们来总结MVC处理过程。首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理:然后模型根据用户请求进行相应的业务逻辑处理,并返回数据;最后控制器调用相应的视图来格式化模型返回的数据。并通过视图呈现给用户。
MVC的优点
 首先,多个视图能共享一个模型。
 其次,模型是自包含,与控制器和视图保持相对独立,所以可以方便地改变应用程序的数据和业务规则。
 此外,控制器提高了应用程序的灵活性和可配置性。
MVC的适用范围
 对于开发存在大量用户界面,并且业务逻辑复杂的大型应用程序,MVC将会使软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建MVC框架时会花费一定的工作量,但从长远的角度来看,它会大大提高后期软件开发的效率。
 
1.2 JSP Model1 和 JSP Model2
 在早期的Java Web应用中,JSP文件负责业务逻辑、控制网页并创建HTML,参见图1-2:
 
 JSP文件是一个独立的、自主完成所以任务的模块,这给Web开发带来一系列的问题:
HTML代码和Java程序强耦合在一起:JSP文件的编写者必须既是网页设计者,又是Java开发者。但实际情况是,多数Web开发人员要么只精通网页设计,能够设计出漂亮的网页外观,但是编写的Java代码很糟糕;要么仅熟悉Java编程,能够编写健壮的Java代码,但是设计的网页外观很难看。皆备两种才能的开发人员很少见。
内嵌的流程逻辑:要理解应用程序的整个流程,必须浏览所以网页,试想一下拥有100个网页的网站的错综复杂的逻辑。
调试困难:除了很糟的外观外,HTML标记、Java代码和java script代码都集中在一个网页中,使调试变得相当困难。
强耦合:更改业务逻辑或数据可能牵涉相关的多个网页。
美学:设想有1000行代码的网页,其编码样式看起来杂乱无章。即使有彩色语法显示,阅读和理解这些代码仍然困难。
 为了 界决以上问题,Sun公司先后制定了两种规范,称为JSP Model1 和 JSP Model2。虽然Model1在一定程度上实现了MVC,但是它的运用并不理想;直到基于J2EE的JSP Model2问世才得以改观。JSP Model2用JSP技术实现视图的功能,用Servlet技术实现控制器的功能,用JavaBeans技术实现模型的功能。
 JSP Model1和JSP Model2的本质区别在于处理用户请求的位置不同。在Model1体系中,如图1-3所示:

 JSP页面负责响应用户请求并将处理结果返回用户。JSP既要负责业务流程控制,又要负责提供表示层数据,同时充当视图和控制器,未能实现这两个模块之间的独立和分离。尽管Model1 体系十分适合简单应用的需要,它却不适合开发复杂的大型应用程序。不加选择地随意运用Model1,会导致JSP页内嵌入大量Java代码。尽管这对于Java程序员来说可能不是什么大问题,但如果JSP页面是由网页设计人员开发并维护的(通常这是开发大型项目的规范),这就确实是个问题了。从根本上讲,将导致角色定义不清和职责分配不明,给项目管理带来很多麻烦。
 JSP Model2体系结构,如图1-4所示:
 
 是一种联合使用JSP与Servlet来提供动态内容服务的方法。它吸取了JSP和Servlet两种技术各自的突出优点,用JSP生成表示层的内容,让Servlet完成深层次的处理任务。在这里,Servlet充当控制器的角色,负责处理用户请求,创建JSP页需要使用的JavaBean对象,根据用户请求选择合适的JSP页返回给用户。在JSP页内没有处理逻辑,它仅负责检索原先由Servlet创建的JavaBean对象,从Servlet中提取动态内容插入到静态模板。这是一种有突破性的软件设计方法,它清晰地分离了表达和内容,明确了角色定义以及开发者与网页设计者的分工。事实上,项目越复杂,使用Model2设计模式的好处就越大。
 有了对JSP以及MVC的基本概念后,我们就可以利用Struts框架,进行师资管理系统的开发了。
理论部分
 JSP Model1、JSP Model2以及MVC只是理论上的划分。在项目中,我们除了参照这些理论知识外,主要是使用了Struts框架,具体的版本为Struts-1.1-b3版。让我们来了解一下,什么是Struts。
 
2.1 Struts概述
 Struts实质上就是在JSP Model2的基础上实现的一个MVC框架。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由ActionServlet和Action来实现,视图由一组JSP文件构成。图2-1显示了Struts实现的MVC框架。
 
2.1.1 Struts视图
 视图就是一组JSP文件。在这些JSP文件中没有业务逻辑,也没有模型信息,只有标签,这些标签可以是标准的JSP标签或客户化标签,如Struts标签库中的标签。
 此外,通常把Struts框架中的ActionForm Bean也划分到视图模块中。ActionForm Bean也是一种JavaBean,除了具有一些JavaBean的常规方法,还包含一些特殊的方法,用于验证HTML表单数据以及将其属性重新设置为默认值。Struts框架利用ActionForm Bean来进行视图和控制器之间表单数据的传递,参见图2-2。Struts框架把用户输入的表单数据保存在ActionForm Bean中,把它传递给控制器,控制器可以对ActionForm Bean中的数据进行修改,JSP文件使用Struts标签读取修改后的ActionForm Bean的信息,重新设置HTML表单。
 
2.1.2 模型
 模型表示应用程序的状态和业务逻辑。对于大型应用,业务逻辑通常由JavaBean或EJB组件来实现。
2.1.3 控制器
 控制器由ActionServlet类和Action类来实现。ActionServlet类是Struts框架中的核心组件。ActionServlet继承了java.servlet.http.HttpServlet类,它在MVC模型中扮演中央控制器的角色。ActionServlet主要负责接收HTTP请求信息,根据配置文件struts-config.xml的配置信息,把请求转发给适当的Action对象。如果该Action对象不存在,ActionServlet会先创建这个Action对象。
 Action类负责调用模型的方法,更新模型的状态,并帮助控制应用程序的流程。对于小型简单的应用,Action类本身也可以完成一些实际的业务逻辑。
 对于大型应用,Action充当用户请求和业务逻辑处理之间的适配器,其功能就是将请求与业务逻辑分开,Action根据用户请求调用相关的业务逻辑组件。业务逻辑由Java Bean或EJB来完成,Action类侧重于控制应用程序的流程,而不是实现应用程序的逻辑。通过将业务逻辑放在单独的Java包或EJB中,可以提高应用程序的灵活性和可重用性。
 当ActionServlet控制器收到用户请求后,把请求转发到一个Action实例。如果这个实例不存在,控制器会首先创建它,然后调用这个Action实例的execute()方法。Action的execute()方法返回ActionForward对象,它封装了吧用户请求再转发给其他Web组件的信息。用户定义自己的Action类,即Action的子类时,必须覆盖execute()方法。在Action基类中该方法返回null。
2.1.4 Struts的配置文件struts-config.xml
 上面讲到一个用户请求是通过ActionServlet来处理和转发的。那么,ActionServlet如何决定把用户请求转发给哪个Action对象呢?这就需要一些描述用户请求路径和Action映射关系的配置信息了。在Struts中,这些配置映射信息都存储在特定的XML文件struts-config.xml中。在该配置文件中,每一个Action的映射信息都通过了一个<action>元素来配置。
 这些配置信息在系统启动的时候被读入内存,供Struts在运行期间使用。在内存中,每一个<action>元素都对应一个org.apache.struts.ActionMapping类的实例。
 
2.2 Struts的工作流程
 对于采用Struts框架的Web应用,在Web应用启动时就会加载并初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象中,例如Action的映射信息存放在ActionMapping 对象中。当ActionServlet接收到一个客户请求时,将执行如下流程:
 检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。
 如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
 根据配置信息决定是否需要表达验证。如果需要验证,就调用ActionForm的validate()方法。
 如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功。
 ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action。如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。
 Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。
 ActionForward对象指向的JSP组件生成动态网页,返回给客户。
 对于以上流程的流程(4),如果ActionForm的validate()方法返回一个包含一个或多个ActionMessage的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含用户提交表单的JSP组件,在这种情况下,不会再创建Action对象并调用Action的execute()方法。
 图2-3显示了Struts响应用户请求的工作流程。

2.3 JDBC原理
 Struts框架为我们提供了MVC的实现途径,但Model部分与底层数据库之间还缺乏一座桥梁,这就是JDBC驱动。让我们简单介绍一下JDBC驱动的原理。
 JDBC是一种可用于执行SQL语句的Java API(Application Programming Interface应用程序设计接口)。它由一些Java语言编写的类和界面组成。JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。
2.3.1 JDBC的诞生
 自从Java语言于1995年5月正式公布以来,Java风靡全球。出现大量的用java语言编写的程序,其中也包括数据库应用程序。由于没有一个Java语言的API,编程人员不得不在Java程序中加入C语言的ODBC函数调用。这就使很多Java的优秀特性无法充分发挥,比如平台无关性、面向对象特性等。随着越来越多的编程人员对Java语言的日益喜爱,越来越多的公司在Java程序开发上投入的精力日益增加,对java语言接口的访问数据库的API的要求越来越强烈。也由于ODBC的有其不足之处,比如它并不容易使用,没有面向对象的特性等等,SUN公司决定开发一Java语言为接口的数据库应用程序开发接口。在JDK1.x版本中,JDBC只是一个可选部件,到了JDK1.1公布时,SQL类包(也就是JDBCAPI)就成为Java语言的标准部件。
2.3.2 JDBC技术概述
 JDBC由一些Java语言写的类、界面组成。JDBC给数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。
 通过使用JDBC,开发人员可以很方便地将SQL语句传送给几乎任何一种数据库。也就是说,开发人员可以不必写一个程序访问Sybase,写另一个程序访问Oracle,再写一个程序访问Microsoft的SQLServer。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统(DBMS)。不但如此,使用Java编写的应用程序可以在任何支持Java的平台上运行,不必在不同的平台上编写不同的应用。Java和JDBC的结合可以让开发人员在开发数据库应用时真正实现“Write Once,Run Everywhere”。
  Java具有健壮、安全、易用等特性,而且支持自动网上下载,本质上是一种很好的数据库应用的编程语言。它所需要的是Java应用如何同各种各样的数据库连接,JDBC正是实现这种连接的关键。
 JDBC扩展了Java的能力,如使用Java和JDBCAPI就可以公布一个Web页,页中带有能访问远端数据库的Applet。或者企业可以通过JDBC让全部的职工(他们可以使用不同的操作系统,如Windwos,Machintosh和UNIX)在Intranet上连接到几个全球数据库上,而这几个全球数据库可以是不相同的。随着越来越多的程序开发人员使用Java语言,对Java访问数据库易操作性的需求越来越强烈。
 MIS管理人员喜欢Java和JDBC,因为这样可以更容易经济地公布信息。各种已经安装在数据库中的事务处理都将继续正常运行,甚至这些事务处理是存储在不同的数据库管理系统中;而对新的数据库应用来说,开发时间将缩短,安装和版本升级将大大简化。程序员可以编写或改写一个程序,然后将它放在服务器上,而每个用户都可以访问服务器得到最新的版本。对于信息服务行业,Java和JDBC提供了一种很好的向外界用户更新信息的方法。
2.3.3 JDBC两层模型和三层模型
 JDBC支持两层模型,也支持三层模型访问数据库。如图3所示,两层模型中,一个Java Applet或者一个Java应用直接同数据库连接。这就需要能直接被访问的数据库进行连接的JDBC驱动器。用户的SQL语句被传送给数据库,而这些语句执行的结果将被传回给用户。数据库可以在同一机器上,也可以另一机器上通过网络进行连接。这被称为“Client/Server”结构,用户的计算机作为Client,运行数据库的计算机作为Server。这个网络可是Intranet,比如连接全体雇员的企业内部网,当然也可以是Internet。
 如图4所示,在三层模型中,命令将被发送到服务的“中间层”,而“中间层”将SQL语句发送到数据库。数据库处理SQL语句并将结果返回“中间层”,然后“中间层”将它们 返回用户。MIS管理员将发现三层模型很有吸引力,因为“中间层”可以进行对访问的控制并协同数据库的更新,另一个优势就是如果有一个“中间层”用户就可以使用一个易用的高层的API,这个API可以由“中间层”进行转换,转换成底层的调用。而且,在许多情况下,三层模型可以提供更好的性能。
 到目前为止,“中间层”通常还是用C或C++实现,以保证其高性能。但随着优化编译器的引入,将Java的字节码转换成高效的机器码,用java来实现“中间层”将越来越实际。而JDBC是允许从一个Java“中间层”访问数据库的关键。
 
第三章 实  践  部  分
 无论用到任何框架、模型、概念,开发一套软件系统所不可缺少的是需求分析、系统设计部分。在本文中不再赘述需求分析的重要性,限于篇幅只能简单介绍我们在需求分析及系统设计方面所做的一些工作。在此将重点介绍我们是如何实现MVC设计模式,将它从理论真正上升到实践。
 
3.1 目标系统需求说明
 软件开发前期的需求分析与系统设计是一个软件成功与否的关键所在,它们也占据了软件开发过程中的大量时间,限于篇幅,不能将整个需求分析与系统设计的过程完整的表述出来,在附录中将给出一份从用户处第一次提取的“需求说明”报告。对系统功能的划分我们也做了大量的工作,包括许多图表,图3-1-1显示了系统管理员所能操纵的模块(另一种普通用户权限与其形式上类似,只是具体的权限不同)。
 
 系统就是这样,通过我们与用户的沟通,被一层层的分解下去,直至我们对系统有个全面的了解、掌握。再来看一下“教师管理”中所包含的模块:
 
 根据需求分析以及我们已知并且进行设计、划分过的功能模块,我们设计出了系统的底层数据库,如图3-1-3所示:
 
 由于在团队中有专门的DBA(Data Base Administrator),所以这个数据库是由他专门维护的,这也保证了数据库版本的连续性、可维护性。有了前期的分析设计以及构建底层数据库,我们就能将MVC进行下去了。
 
3.2 MVC的实现
 在开发的过程中,我们利用局域网以及CVS团队开发管理软件,特别由于MVC设计模式自身对团队开发的良好支持,使得我们真正实现了团队开发,而其威力是不言而喻的。在MVC设计模式下,利用Struts框架,我们团队中有专门的Web设计人员开发View层(即JSP页面);由参与软件设计的人员(即我本人)开发Controller层(继承Struts框架中的Action、ActionForm类,负责流程控制,注:继承于ActionForm的类在MVC设计模式中属于View层);由专门的程序员设计Model层(即与具体业务逻辑相关的类,且与数据库进行操作)。由于在设计时定义好了相互间访问的接口,所以我们的工作是并行的,在写好自己的代码后,通过CVS团队开发软件,我们将自己的代码提交到服务器上,同时下载别人提交的代码,这样做大大提高了编程效率。而DBA则维护着数据库,包括对表的小范围修改、编写存储过程供Model层调用、维护测试数据等等。我将把我编写的部分,举一个例子,详细的介绍一下。
3.2.1 View层的实现
 View层是直接与用户交互的接口,在MVC设计模式中,要求它不要嵌入大量的业务代码,导致Web设计人员对其理解、维护的难度。在我们的开发过程中,我们没有在Web页面(JSP页面)中嵌入任何Java代码,而是由Web设计人员利用HTML、JSP以及Struts框架中自有的Tag来表现,下面以Login.jsp为例:
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %>
<html:html>
    <head>
     <title>
      Login
     </title>
    </head>
    <jsp:include page="bottom.jsp">
    </jsp:include>
 <!--the land password-->
     <div id="form" style="position:absolute; width:100%; height:115px; z-index:1;top: 160px;">
       <html:form action="/loginAction.do" method="post" focus="userID">
        <p align="center"><font size="2">
 <bean:message key="edu.sju.teacherinfo.Login.UserName"/>
 </font>
            <html:text property="userID" size="16" maxlength="16" />
        <p align="center"><font size="2">
 <bean:messagekey="edu.sju.teacherinfo.Login.UserPasswd"/>
 </font>
        <html:password property="psw" size="16" maxlength="16" />
        <br><br>
        <html:submit>
 <bean:message key="edu.sju.teacherinfo.Login.submitvalue"/>
 </html:submit>
        &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
        <html:reset>
 <bean:message key="edu.sju.teacherinfo.Login.resetvalue"/>
 </html:reset>
        <p align="center"><font size="2" color="red"><html:errors/>
 </font>
      </html:form>
    </div>
 <!--the information of the system-->
     <div id="text" style="position:absolute; width:100%; height:20px; z-index:6;top: 340px;">
     <marquee direction="up" behavior="scroll" align="middle" scrolldelay="150">
 <p align="center"><font size="2">
 <bean:message key="edu.sju.teacherinfo.Login.UserIntro"/>
 </font>
     </marquee>
    </div>
  </body>
</html:html>
由上面代码可以看出,这里没有任何程序设计语言代码,网页设计人员能够更好的理解它,提高了他们的效率和代码的可靠性。而对页面的基本验证的代码则留到了继承于Struts框架中ActiongForm类的自有类中:
package edu.sju.teacherinfo.actionform;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionError;
public class LoginActionForm extends ActionForm {
  private String psw;
  private String userID;
  public String getPsw() {
    return psw;
  }
  public void setPsw(String psw) {
    this.psw = psw;
  }
  public String getUserID() {
    return userID;
  }
  public void setUserID(String userID) {
    this.userID = userID;
  }
   public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest httpServletRequest) {
    /**@todo: finish this method, this is just the skeleton.*/
    ActionErrors actionerrors = new ActionErrors();
    if (this.userID.equals("") || this.userID.length() > 16){
       actionerrors.add("userID",new ActionError("edu.sju.teacherinfo.Login.userIDerrors"));
    }
    if (this.psw.equals("") || this.psw.length() > 16){
       actionerrors.add("psw",new ActionError("edu.sju.teacherinfo.Login.pswerrors"));
    }
    return actionerrors;
  }
   public void reset(ActionMapping actionMapping, HttpServletRequest httpServletRequest) {
    this.psw = null;
    this.userID = null;
  }
}
Login.jsp页面上的form标记中的元素(如<html:text>元素),都由对应的LoginActionForm中的validate()方法进行普通的输入验证。不将普通的验证放入业务逻辑代码中,有利于减轻业务逻辑代码的负担,而且使得业务逻辑代码更加清晰。在LoginActionForm中除了有一般的属性存取方法setX、getX()外,还继承了ActionForm中的validate()和reset()方法。其中,validate()方法对页面传入的属性进行验证,此处主要对用户名(userID)和密码(psw)的长度进行验证,如果有一项为空或者超出规定长度(16个字符长度),则直接返回一个错误信息直请求的页面;如果没有错误,则返回一个不包含任何错误的ActionErrors对象给Action,进一步进行业务逻辑验证。而reset()方法则对请求页面进行初始化操作,这里的reset()方法将页面的两个属性的值都置为空(null)。
3.2.2 Controller层的实现
 从JSP页面中发送的请求,经ActionForm验证并且没有错误后,都在继承了Struts框架中Action类的自有类中被集中处理,其默认的处理方法为继承于父类的public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm,HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse)。通过调用必要的业务逻辑进行处理后,Action对请求作出判断,决定将哪一个页面发回给浏览器,显示给用户,下面是对应于之前登录请求的LoginAction类:
package edu.sju.teacherinfo.action;
import edu.sju.teacherinfo.actionform.LoginActionForm;
import edu.sju.teacherinfo.model.UserModel;
import edu.sju.teacherinfo.commons.Constants;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionError;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.sql.DataSource;
import java.io.IOException;
import org.apache.struts.action.SessionActionMapping;
import javax.servlet.http.HttpSession;
public class LoginAction extends edu.sju.teacherinfo.action.BaseAction {
   public ActionForward execute(ActionMapping actionMapping,
 ActionForm actionForm,
 HttpServletRequest httpServletRequest,
 HttpServletResponse httpServletResponse)
 throws Exception {
    /**@todo: complete the business logic here, this is just a skeleton.*/
    LoginActionForm loginActionForm = (LoginActionForm) actionForm;
    ActionErrors actionerrors = new ActionErrors();
    UserModel userModel = new UserModel();
    Connection cn = null;
    ArrayList userArrayList = new ArrayList();
    HttpSession session;
    /* validate if the session has userID */
    session = httpServletRequest.getSession();
    if ((session.getAttribute(Constants.USER_ID) != null) &&
         (((String)(session.getAttribute(Constants.USER_ID))).equals
(loginActionForm.getUserID()) && (((String)(session.getAttribute(Constants.USER_PASSWORD)))
 .equals(loginActionForm.getPsw())))) {
     return actionMapping.findForward(Constants.SUCCESS_TO_MAIN);
   }
    userArrayList.add(loginActionForm.getUserID());
    userArrayList.add(loginActionForm.getPsw());
    //get Connection
    try {
      cn = this.getConnection(httpServletRequest, "dataSource");
      if (userModel.islegaluser(cn,userArrayList)){
        //add his ID to servlet,if he has logined,return error
 if(!edu.sju.teacherinfo.servlet.UserServlet.addUser
 (loginActionForm.getUserID(),session.getId())) {
          actionerrors.add("userID",
 new ActionError("edu.sju.teacherinfo.Login.same_user"));
          this.saveErrors(httpServletRequest,actionerrors);
          return actionMapping.getInputForward();
        }
        //valid user,add his ID and droit to session
         session.setAttribute(Constants.USER_ID,
 loginActionForm.getUserID());
        session.setAttribute(Constants.USER_PASSWORD,
 loginActionForm.getPsw());
        if (userModel.getUserDroit(cn,loginActionForm.getUserID()).
 equals("2")) {
          session.setAttribute(Constants.USER_DROIT,
 Constants.USER_DROIT);
        }
        //remove formbean
        httpServletRequest.removeAttribute(
 actionMapping.getAttribute());
        return actionMapping.findForward(Constants.SUCCESS_TO_MAIN);
      }
      //if the parssword is not match this user
      else{
        actionerrors.add("userID",new ActionError
 ("edu.sju.teacherinfo.Login.userID_no_match_psw"));
        this.saveErrors(httpServletRequest,actionerrors);
        return actionMapping.getInputForward();
      }
    }
    catch (Exception ex) {
       actionerrors.add(ActionErrors.GLOBAL_ERROR,new ActionError("edu.sju.teacherinfo.Error"));
      session.setAttribute(Constants.INPUT_PATH,
 actionMapping.getInputForward());
      this.saveErrors(httpServletRequest,actionerrors);
      throw new java.lang.Exception();
    }
    finally {
      if (cn != null) {
        try {
          cn.close();
        }
        catch (Exception ex1) {
           actionerrors.add(ActionErrors.GLOBAL_ERROR,new ActionError("edu.sju.teacherinfo.Error"));
          session.setAttribute(Constants.INPUT_PATH,
 actionMapping.getInputForward());
          this.saveErrors(httpServletRequest,actionerrors);
          throw new java.lang.Exception();
        }
      }
    }
  }
}
 LoginAction首先取得传入的LoginActionForm对象,查找Session中是否已含有相同的userID用于判断是否为重复登录的用户;然后又以LoginActionForm的userID、psw属性作为参数,调用Model层的UserModel类的islegaluser()方法,以验证用户输入的用户名和密码是否和数据库中存储的相一致;如果验证成功,并且Web应用程序中没有相同的用户名登录(以用户名位参数在UserServlet类中验证),则将用户名、密码、用户权限(由UserModel类的getUserDroit()方法取得)放入Session中,且将用户名放入UserServlet中,用于记录为当前正在使用的用户。这以前都验证完毕且没有错误后,程序返回一个ActionForward对象,以此对象控制程序跳转至主页面。如果其中任何一步验证没有通过,那么都会在ActionErrors对象中加入一条特定的错误信息,最后返回给请求页面,即Login.jsp。
 这里要说明的一点是,LoginAction并没有继承Struts的Action类,而是继承了自有的BaseAction类,这是为什么呢?还是让我们先来看看BaseAction的代码吧:
package edu.sju.teacherinfo.action;
import java.sql.Connection;
import javax.sql.DataSource;
import java.sql.SQLException;
import org.apache.struts.action.Action;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.util.MessageResources;
public class BaseAction extends Action {
  /**
   * get Connection from the DataSource.
   *
   * @param httpServletRequest HttpServletRequest
   * @param DataSource_Key String
   * @throws SQLException
   * @return Connection
   */
  protected Connection getConnection(
 HttpServletRequest httpServletRequest,
 String DataSource_Key)
 throws SQLException {
    Connection cn = null;
    DataSource ds;
    ds = getDataSource(httpServletRequest,DataSource_Key);
    cn = ds.getConnection();
    return cn;
  }
  /**
   *get MessageRources with key
   *
   * @param httpServletRequest HttpServletRequest
   * @param Key String
   * @return MessageResources
   */
  public static MessageResources getMessageRources(
 HttpServletRequest httpServletRequest,
 String Key) {
    BaseAction baseAction = new BaseAction();
    return baseAction.getResources(httpServletRequest,Key);
  }

  /**
   * get MessageRources
   *
   * @param httpServletRequest HttpServletRequest
   * @return MessageResources
   */
  public static MessageResources getMessageRources(
 HttpServletRequest httpServletRequest) {
    BaseAction baseAction = new BaseAction();
    return baseAction.getResources(httpServletRequest);
  }
}
 看到这里就十分清楚了,BaseAction继承了Struts的Action类,他除了继承了Action类的所有方法外,还添加了几个方法,例如getConnection()方法——用于取得数据库连接对象等等。Action类是所有继承了BaseAction的类的祖先类,这里体现了面向对象程序设计的继承和封装的特性,类与类之间有清晰的关系,而且减少了代码量。
 另外的一个疑问是页面如何知道自己是与哪一个ActionForm对应、ActionForm又是如何知道自己是与哪个Action对应,而在跳转处又没有给出具体的页面路径(URL),那它们又是如何选择的呢?这里就不得不提到Struts框架所提供的struts-config.xml配置文件了。它在Web应用程序启动的时候被载入,所有的请求都在此找到对应的目的地,它描述了数据源、View层与Controller层的对应关系、跳转的路径选择以及出错时显示的报错页面等等。让我们来看看它的内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config
PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
  <data-sources>
 <data-source>
  <set-property property="driverClassName"
 value="net.sourceforge.jtds.jdbc.Driver" />
    <set-property property="url"
 value="jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=TeacherInfo" />
    <set-property property="maxActive" value="10" />
    <set-property property="maxWait" value="5000" />
    <set-property property="defaultAutoCommit" value="false" />
    <set-property property="defaultReadOnly" value="false" />
    <set-property property="validationQuery" value="SELECT COUNT(*) FROM DBA" />
    <set-property property="username" value="sa" />
    <set-property property="password" value="sju" />
    </data-source>
  </data-sources>
  <form-beans>
     <form-bean name="loginActionForm"type="edu.sju.teacherinfo.actionform.LoginActionForm" />
 </form-beans>
   <global-exceptions>
     <exception key="edu.sju.teacherinfo.Error" path="/Error.jsp" scope="request" type="java.lang.Exception" />
   </global-exceptions>
 <global-forwards>
     <forward name="Error" path="/Error.jsp" />
     <forward name="login" path="/Login.jsp" />
 </global-forwards>
 <action-mappings>
     <action
input="/Login.jsp" name="loginActionForm" path="/loginAction" scope="request" type="edu.sju.teacherinfo.action.LoginAction" validate="true">
        <forward name="success_to_main" path="/Main.jsp" />
     </action>
 </action-mappings>
  <message-resources parameter="ApplicationResources" />
</struts-config>
 以上只是struts-config.xml文件的一小部分,但它却包含了登录部分的所有配置:<data-source></data-source>标签之间是对数据源的配置,包括JDBC driver的名称,数据源的URL等;<form-bean name="loginActionForm" type="edu.sju.teacherinfo.actionform.LoginActionForm" />配置了LoginActionForm类和它的别名,它将在稍后用到;<global-exceptions></global-exceptions>标记之间配置的是全局异常,当在struts-config.xml文件中注册的任何一个Action抛出异常的时候,都可用用这个全局异常的别名,引导程序到这个异常所标示出的公共错误页面;<global-forwards></global-forwards>标记之间配置的是全局转发,表示这种跳转是在struts-config.xml文件中注册的任何一个Action都可以用到的(利用别名);而<action input="/Login.jsp" name="loginActionForm" path="/loginAction" scope="request" type="edu.sju.teacherinfo.action.LoginAction" validate="true">       <forward name="success_to_main" path="/Main.jsp" />    </action>的配置可以说是重点了,“input”属性表示了请求的JSP页面为Login.jsp;而“name”属性表示了其与LoginActionForm类的对应关系;path属性与页面上<html:form></html:form>标记的action属性对应,标示出了页面上的<form>标签与ActionForm类的对应关系;scope属性表示了其存在在的范围;“type”属性表示这个Action由哪个类来处理;“validate”属性为true表示在经这个Action验证前,是否要经过与这个Action对应的ActionForm的验证;“forward”属性也是表示跳转的,但与<global-forwards></global-forwards>不同的是,这个跳转只能供自身的Action使用。在文件的最后是<message-resources parameter="ApplicationResources" />标记,它的“parameter”属性标示了资源文件的名称。什么是资源文件呢?简单的将,就是许多的页面上的文字信息(如中文信息等)并不直接以语言写在页面或程序中,而是名字对的方式写在资源文件中,在页面或程序中通过调用所需文字的标示,如<bean:message key="edu.sju.teacherinfo.Login.UserName"/>,这里的“edu.sju.teacherinfo.Login.UserName”在资源文件里对应的文字是“”。这样做的好处是,可以对表示层的文字进行集中管理,同时非常有利于国际化,试想我可以将资源文件里文字换成日文等,而无需修改程序。
 看看他们的的整体流程,如图所示:

 由图可以看出,Controller层是程序的核心部分,View层、Model层都与其交互。
 Controller层的UML类图如图所示:

 3.2.2 Model层的实现
 Model层主要涉及业务逻辑的处理,由于这里不是我编成的重点,在本文中只做简单介绍。在登录模块中,主要用到的Model层的类是UserModel。现给出在登录模块中用到的它的部分代码:
package edu.sju.teacherinfo.model;

import java.util.ArrayList;
import edu.sju.teacherinfo.sql.sqlManager;
import java.sql.*;
import java.sql.SQLData;
import java.util.Hashtable;
import java.lang.Integer;
import java.util.HashMap;
public class UserModel {

  public UserModel() {
  }

  /**
   * Return islegal user
   *
   * @return Boolean islegal user
   */
  public boolean islegaluser(Connection cn,ArrayList userArrayList) throws
      SQLException {
    Hashtable ht = new Hashtable();
    boolean isUser = false;
    sqlManager sqlmanager = new sqlManager();
    String SQLQuery = "select * from DBA where userID=? and psw=?";

    sqlmanager.setArrayListData(userArrayList);
    sqlmanager.setPstmtSql(SQLQuery);
    sqlmanager.setCn(cn);
    userArrayList = sqlmanager.getPreparedStatement_ArrayList();
    if (userArrayList.size() > 0)
      isUser = true;
    return isUser;
  }

  /**
   *get legality user's popedom
   *
   *@return String userPopedom
   */
  public String getUserDroit(Connection cn , String userID) throws SQLException {
    sqlManager sqlMr = new sqlManager();
    sqlMr.setCn(cn);
    sqlMr.setStmtSql("select droit from DBA where userID ='" + userID+"'");
    return sqlMr.getStatement_String();
  }
}
 所有的Model层的类并不直接与数据库进行交互,做这件事情的是sqlManager类,Model层的类通过sqlManager的实例与数据库交互。再来看看sqlManager的部分代码:
 package edu.sju.teacherinfo.sql;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.util.ArrayList;
 import java.util.Hashtable;
 import java.sql.Statement;
 import java.sql.CallableStatement;
 import java.util.HashMap;
 import java.sql.Types;
 import java.math.BigDecimal;
 public class sqlManager {
 private Connection _cn = null;
 private ArrayList _dataRowSet = null;
   private String _stmtSql = null;
   private String _pstmtSql = null;
   private String _cstmtSql = null;
     public void setStmtSql(String stmtSql){
     this._stmtSql = stmtSql;
   }
   public void setPstmtSql(String pstmtSql){
     this._pstmtSql = pstmtSql;
   }
   public void setCstmtSql(String cstmtSql){
     this._cstmtSql = cstmtSql;
   }
  
   public void setArrayListData(ArrayList dataRowSet){
     this._dataRowSet = dataRowSet;
   }
   public void setCn(Connection cn){
     this._cn = cn;
   }
   protected void setPreparedStatement(
 ArrayList al,PreparedStatement ps) throws SQLException
 {
     for(int i = 0; i<al.size() ; i++)
       ps.setObject( i+1, al.get(i));
   }
   public ArrayList getPreparedStatement_ArrayList() throws
       SQLException {
     PreparedStatement pstmt = _cn.prepareStatement(this._pstmtSql);
     ResultSetMetaData rsmd = null;
     ArrayList al = new ArrayList();
 
     //set setPreparedStatement
     this.setPreparedStatement(this._dataRowSet , pstmt);
 
     this._dataRowSet.clear();
     ResultSet rs = pstmt.executeQuery();
     rsmd =rs.getMetaData();
     while(rs.next()){
       Hashtable ht = new Hashtable();
       for(int i = 1; i <= rsmd.getColumnCount(); i++ ) {
         if (rs.getObject(i) == null) {
           ht.put(rsmd.getColumnName(i),"");
         }
         else {
           ht.put(rsmd.getColumnName(i),rs.getObject(i));
         }
       }
       al.add(ht);
     }
     pstmt.close();
     return al;
   }
 }
 Model层的UML类图如图所示:
3.3 实践结果
 登录界面:

 正确登录后的界面:

 
 验证错误界面:

 异常错误界面:


第四章 结论
 利用MVC设计模式以及Struts开源框架,以及其他一些工具软件例如CVS等,通过团队协作,我们成功的开发出了“三江学院师资管理系统”。它是一个纯面向对象、跨平台(由于Java语言的跨平台性,它可直接在Windows、Unix、Linux等主流操作系统上运行)、多用户、多线程(由Struts框架实现)的Web应用程序。用户上手容易、操作、维护方便,无需过多的培训。而利用MVC模式及Struts框架也是目前软件行业开发Web应用程序的主流开发模式。通过这次的开发,我们不但开发出了软件,提高了自己的实际工作能力,同时也拉近了自身与实际工作开发的距离,当走上工作岗位时,能快速适应工作。
 
致谢
 首先感谢院系各级领导为我们的这次设计所提供的良好环境,没有这么好的条件,我们也无法高效而快速的开发出程序;还要感谢我们的指导教师杨少雄老师,他以他自身丰富的实践经验和扎实的理论水平指导我们该如何把一个软件项目从需求分析到完成测试提交用户给做好。无论是在模型选择的大方向上,还是在具体编程以及环境搭建上出了问题,他都能给出有效的解决意见,引导我们把问题解决好,让我们得到了更多的锻炼。我还要感谢我们项目组的其他同学,没有你们的帮助、和鼓励,我一个人也无法走到最后;最后感谢所有给予我们帮助的老师、同学,如陶东辉老师、何平同学等,谢谢你们!
 
附录

 关于三江学院师资库的需求说明
 一.三江学院的教师可分成专任教师和兼职教师两部分。而专任教师又可分成专职教师和专聘教师两部分。此外,还有相当数量的教学辅助人员;还有班导师也将进入教师系列。从而三江学院师资库内应有五个子库:
 专职教师库;专聘教师库;兼职教师库;教辅人员库;班导师库。
 有时只需统计一个子库的数据;有时要统计两个或三个子库的数据。
 二.对于教师,高基表有性别、年龄、职称、岗位、学历、学位、学科、政治面貌、变动的要求:
 性别:男、女
 年龄:30岁及以下;31-35岁;36-40岁;41-45岁;46-50岁;51-55岁;61-65岁;66岁及以上。
 职称:正高级;副高级;中级;初级;无职称。
 注意:高基表需要每个年龄段内的性别与职称分布。
 岗位:首先区分专任教师和兼职教师,再分公共课基础课;专业课;其中还需分出“双师型“。专任教师中还要列出不任课人数:进修;科研;病休;其他。
 注意:每个岗位下要有职称分布。
 学历学位:博士;硕士;本科;专科及以下。
 注意:每个学历学位下,分别对专任教师和兼职教师要有职称分布。
 学科:哲学;经济学;法学;教育学,其中体育;文学,其中外语、艺术;历史学;理学;工学,其中计算机;农学,其中林学;医学;管理学;
 注意:每个学科下要有职称分布。
 变动:分增加教师和减少教师两面种。增加中又分:录用毕业生;外单位教师调入;校内外非教师调入。减少又分:自然减员;调离教师岗位;其他。
 政治面貌:共产赏员;共青团员;民主党派;华侨;港澳台;少数民族。
 注意:只需统计专任教师的政治面貌。下分性别即可。
 研究生指导教师情况:先按年龄分类,每类再分性别;职称;指导关系(博导、硕导、博硕导),关系下再分性别。
 注:带框项目只对转任教师统计。考虑已分四库,可用于每个库,也非坏事。
 教师库,自然每一位教师的自然情况、身体情况、教学情况、学术情况、政治情况等都需要知道,而且,要是动态的。即可以不断地添加。具体地讲,应有:
 1.自然情况:姓名;性别;民族;出生年月;政治面貌(何时何地加入何党派);学历学位(大学、研究生学习的毕业学校,毕业时间,所学专业,所获学历、学位);职称(何时何地经何部门批准具有何职称);目前的工作单位(专任教师应说明在三江学院的哪个单位,任何职;退休教师应说明在哪个学校退休,退休时任何职;兼职教师应说明现在何学校任何职);工作简历(何时何地在何单位任何职务);身份证号码;联系电话号码、手机号码;联系地址,邮政编码;E-mail;家庭情况,爱人、子女、父母、主要社会关系。
 2.身体情况:有何疾病;
 3.教学情况:何时在何校任教何课程;爱到何种表彰和奖励;编写过什么教材、参考书(由哪个出版社出版);发表过什么教学研究论文(什么刊物、什么会议上发表)。
 4.学术情况:参加过什么课题研究;发表过什么科研论文(什么刊物、会议上发表);编写过什么著作(由哪个出版社出版);引进过什么项目,有多少经费;参加什么学会,担任什么职务。
 5.思想品德情况:受过什么表彰;有无受过处分。
 6.业务进修情况:普通话等级;通过何种职称外语考试,管到哪一年;通过何种职称计算机考试,管到哪一年;参加什么业务进修,获得什么证书。
 7.在三江学院工作情况:
 XX-XX学年第X学期任教XXXXXX班的XXXXXX课程,XX学时。师生综合评价XX。受过什么表彰、奖励或处分。
 兼任过什么职务。何年月取得何证书,何去何从年月晋升何职称。
 
文    献    综    述
1.《精通Struts:基于MVC的Java Web 设计与开发》 :`Struts是目前非常流行的基于MVC的Java Web框架。本身详细介绍了在最新的Struts1.1以及不久将推出的Struts1.2 版本上设计和开发Java Web应用的各种技术。

2.《J2EE企业级应用开发》 :本书全面介绍了UML技术在J2EE企业级应用开发中各个过程、各个方面的应用。包括了企业级应用开发的基础、UML技术和企业级应用开发建模、设计模式的应用、需求建模、分析建模、组建建模、部署建模、客户层实现、表现层实现、业务层实现、数据访问的实现、分布的实现和完整的开发实例。除了介绍这些技术外,本身着重于企业级应用开发中的建模技术,并且使用一定的方法、模式来提供应有开发效率。

3.《UML数据库设计应用》 :本身提供了利用统一建模语言(Unified Modeling Language,UML)进行数据库设计的实用指南。本身的目标是针对那些必须与先生世界打交道的设计人员:他们必须缴付实际系统,以满足实际的业务需要。

4.《使用UML——关于对象和组件软件工程》 :本书旨在介绍使用UML进行面向对象和组件软件开发所必须的知识。本书包括软件工程和面向对象开发的概念、UML语言详述以及对用例的介绍,最后讨论了质量和质量保证、验证、确认和测试、软件项目管理及团队开发等问题。

5.《HomePage2000 HTML设计实务》 :本书从最基础的HTML开始,辅以详实的范例讲解,分别讲述了HTML语言;网页设计的要素:图像、文本、表格、分割窗口、表单核多媒体;网页设计的方法;最新的网页设计技术,如样式表、XML语言和JAVA Applet等内容。

6.《Java网络编程指南》 :Java语言的独特之处就在于从一开始就内政了对网络编程的支持。本身介绍了各种网络协议和开发各种网络宜用程序的Java工具库,从网络基础开始,到核心的、更高级的Java网络API,提供了有关Java组网的综合介绍。

7.《Servlet/JSP程序设计技术与实例》 :Servlet/JSP是开发Java服务器端应用程序的重要技术。本书全面介绍了与编写Servlet/JSP服务程序相关的各种技术。主要内容包括Servlet的生命周期、接受请求、生成响应、会话管理、JSP的语法综述、使用JSP的标准扩展机制、Servlet/JSP的环境、利用JDBC访问数据库、Applet和Servlet服务程序通信的各种技术、Servlet/JSP的安全,以及在Java网络程序设计中服务器侧应用的体系结构。

8.《数据库系统基础(第三版)》 :本书包括6部分内容和4个附录。第一部分介绍数据库设计技术两极(概念建模原理和物理文件存储技术)的基本概念。第二到第五部分对数据库系统基本原理最重要的方面进行了深入的讨论。第二部分描述关系数据模型和关系数据库管理系统,第三部分全面介绍对象数据库和对象——关系系统,第四部分包括与数据库设计相关的若干主题,第五部分讨论用于实现数据库管理系统的技术。第六部分介绍有影响的新数据库模型以及新兴的技术和应用。附录A给出许多可选用的显示ER和EER模式的图形记号,附录B给出磁盘的一些重要物理参数,附录C和D介绍基于网状数据库模型和层次数据库模型的传统数据库系统。

9.《数据仓库语数据挖掘》 :数据仓库(DW)与数据挖掘(DM)是20世纪90年代中期兴起的新技术。数据仓库和数据挖掘的结合为决策支持系统(DSS)开辟了新方向,它们也是商业智能(BI)的主要技术。本书主要介绍数据仓库系统、数据仓库的数据获取与管理、数据仓库的设计和开发、联机分析处理(OLAP)、数据挖掘与文本挖掘、决策树方法、粗糙集方法有关联规则挖掘、公式发现、神经网络与遗传算法、基于案例推理、决策支持系统与商业智能等内容。本书包含作者多年来在数据仓库与数据挖掘中的研究成果。

10.《数据库系统概论(第三版)》 :本书是在第二版基础上修订而成的,与第二版相比较,在整体结构上进行了适当的调整,增加了数据库新技术方面的内容。全书内容包括:数据库模型、数据库系统结构、关系数据库系统、SQL语言、复杂数据理论、数据库维护、数据库设计、关系数据库管理系统、数据库技术新进展、面向对象数据库系统、分布式数据库系统、并行数据库系统等。

11.《SQL Server 2000实用教程》 :本书系统地介绍了分布式数据库技术的基础理论、SQL Server 2000的安装与配置、用企业管理器及查询分析器对数据库进行管理与操作、Transact-SQL 编程、安全性管理、视图的使用、存储过程及触发器的管理,并通过实例介绍了如何通过Visual Basic 及ASP访问SQL Server 2000 数据库等,在附录中添加了上机操作指导的内容。

12.《Java网络程序设计》 :Java网络程序设计Java作为一种跨平台的程序语言,其版本涵盖的范围较广,从定位与嵌入式系统应用的J2ME、定位与客户端程序应用的J2SE,到定位于服务器程序应用的J2EE,java营各种不同的需求均完整地提供了相关的解决方案。此书作为java技术的专题讨论书,分上下两篇。上篇就TCP/IP通信协议、java专题与新技术作了深入讨论,包裹各类体系结果、编程方法等,涵盖了java网络程序设计中的各类应用。下篇为企业网络技术片,介绍了企业级软件的构建模式及java技术解决方案,对于其中所设计的客户端应用程序、协议标准、应用机制、数据源连接、流程处理等,均从理论及应用的角度作了精辟阐述。

13.《Struts KICK START》 :本书教您使用Jakarta Struts,现今最流行的JSP开发框架——建构应用程序,目标是让您迅速起步并快速掌握和使用Struts框架。本书是一本容易上手的书,包括大量的应用示例和代码片断。本书从对Struts及其Model-View-Contoller(MVC)架构的探讨开始,通过丰富的示例应用演练使用Struts标记库——HTML、JavaBean、逻辑操作等的原则与实践;如何使用Struts和JBoss完成同EJB的集成;如何使用Apache Axis发布并使用Web服务;如何使用JUnit等工具调试和测试Struts应用等Struts开发的方方面面,适合Struts开发者初学入门。

14.《JBuilder 精髓》 :本书深入浅出的介绍了JBuilder的精髓,全书共分6篇。第1篇基础篇,简单介绍了JBuilder的功能;第2篇讲述了网络及WEB应用,包括常见网络应用开发、APPlet、JSP、Servlet和Web Service应用开发等;第3篇讲述数据库应用开发;第4篇讲述JAVA的组件技术——JavaBean的开发;第5篇讲述EJB应用及应用服务器的安装等;第6篇为高级应用篇,分别介绍了JBuilder 9中单元测试、Cactus、UML浏览器、重构及Javadoc等实用而强大的功能。
15.JasperReport使用指南:本指南介绍了JR的基本原理,介绍了如何在Java程序中如何调用JasperReport绘制电子报表,并同时讲解了如何使其产生多种展现格式的方法。


以上为本篇毕业论文范文Browser/Server模式下管理系统的开发的介绍部分。
本论文在计算机论文栏目,由论文网(www.zjwd.net)整理,更多论文,请点论文范文查找

毕业论文降重 相关论文

收费专业论文范文
收费专业论文
汉语言文学论文
物理学论文
自动化专业论文
测控技术专业论文
历史学专业论文
机械模具专业论文
金融专业论文
电子通信专业论文
材料科学专业论文
英语专业论文
会计专业论文
行政管理专业论文
财务管理专业论文
电子商务国贸专业
法律专业论文
教育技术学专业论文
物流专业论文
人力资源专业论文
生物工程专业论文
市场营销专业论文
土木工程专业论文
化学工程专业论文
文化产业管理论文
工商管理专业论文
护理专业论文
数学教育专业论文
数学与应用数学专业
心理学专业论文
信息管理专业论文
工程管理专业论文
工业工程专业论文
制药工程专业论文
电子机电信息论文
现代教育技术专业
新闻专业论文
艺术设计专业论文
采矿专业论文
环境工程专业论文
西班牙语专业论文
热能与动力设计论文
工程力学专业论文
酒店管理专业论文
安全管理专业论文
交通工程专业论文
体育教育专业论文
教育管理专业论文
日语专业论文
德语专业论文
理工科专业论文
轻化工程专业论文
社会工作专业论文
乡镇企业管理
给水排水专业
服装设计专业论文
电视制片管理专业
旅游管理专业论文
物业管理专业论文
信息管理专业论文
包装工程专业论文
印刷工程专业论文
动画专业论文
环境艺术专业论文
信息计算科学专业
物流专业论文范文
人力资源论文范文
营销专业论文范文
工商管理论文范文
汉语言文学论文范文
法律专业论文范文
教育管理论文范文
小学教育论文范文
学前教育论文范文
财务会计论文范文

电子商务论文范文

上一篇:在线学习管理系统文档 下一篇:B/S系统下数据访问及报表生成技术

最新论文

精品推荐

毕业论文排版

热门论文


本站简介 | 联系方式 | 论文改重 | 免费获取 | 论文交换

本站部分论文来自网络,如发现侵犯了您的权益,请联系指出,本站及时确认删除 E-mail:229120615@qq.com

毕业论文范文-论文范文-论文同学网(www.zjwd.net)提供计算机论文毕业论文,毕业论文范文,毕业设计,论文范文,毕业设计格式范文,论文格式范文

Copyright@ 2010-2024 zjwd.net 毕业论文范文-论文范文-论文同学网 版权所有