




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
教学单位 计科系 本科毕业论文(设计)2008年05月28日基于J2EE平台的高校学籍管理系统摘要:随着Internet的发展,社会生活中越来越多的工作都实现了办公自动化,用网络解决生活和工作中问题成为这个时代的进步的标志。本文设计和开发的高校学生学籍管理系统旨在使校园教学、教务管理、学生管理信息网络化,解决以往信息传递效率低、安全性差等问题。其研究结果表明,使用该系统可以大大提高工作效率,节省人力资源,提高高校行政管理的管理水平。本系统通过B/S模式实现用户与管理系统的信息交流及交互,所谓B/S模式即浏览器/服务器模式,用户通过浏览器来访问管理系统。和以往的C/S模式相比,在服务的便捷性上有了无可比拟的提高,同时方便管理人员对系统的管理和维护。利用Struts框架技术实现了系统的MVC开发。随着J2EE开发平台的日趋成熟,JAVA技术得到了迅猛发展,Struts框架结合JAVA的JSP技术和Servlet技术以及SQL Server数据库开发出完美的JAVA Web应用程序,本系统就是Struts结合JSP开发应用的一个典型实例。关键字:学籍管理系统;Struts框架;B/S模式;JSP技术;Servlet技术 College School Roll Management System Based on J2EEAbstract: With the Internets development, and social life in more and more work to realize office automation, network solutions using live and work in this era has become the symbol of progress. In this paper, design and development of college students school management system aimed at making the campus teaching and educational administration, student management information network to solve the past, the low efficiency of the transmission of information, poor security issues. Their research results showed that the use of the system can greatly improve efficiency and save human resources, improve the administration of the university management level. The system through the B / S model users to exchange of information management systems and interactive, so-called B / S model that is browser / server model, the user through the browser to access management systems. And the previous C / S model compared to the convenience of the service on a unparalleled increase, while management of the system to facilitate the management and school roll. Struts framework using technology to achieve the MVC development of the system. With the J2EE development platform has matured, JAVA technology has been rapid development, Struts framework with JAVA technology and the JSP Servlet technology, and SQL Server database to develop the perfect JAVA Web applications, the system is the combination of JSP Struts development and application of a typical Examples. Keyword: School Roll Management System; Struts framework; B / S model; JSP technology; Servlet Technology目 录1概述11.1系统研究目的及意义11.2研究背景11.3 系统概述21.4本章小结22 J2EE平台、面向对象及数据库概述32.1 J2EE平台、面向对象及数据库概述32.2 Struts原理72.3 Struts优缺点192.4本章小结203系统功能实现及界面展示213.1系统总体规划213.2 功能实现及用户界面213.3本章小结314 开发工具介绍324.1 Eclipse和MyEclipse介绍324.2 Tomcat服务器介绍334.3本章小结355总结36参考文献37致 谢381概述1.1系统研究目的及意义目前我国的教育体制正处在不断改革,创新的阶段,随着社会的发展和经济时代的到来,还有学校的教学质量的提高,生源不断扩大。尤其是自从国家实施大众化教育,实行高考扩招以来,我国高校学生数量急剧增大。学校管理就成了一个现实问题摆在了人们面前。学校如同企业,如果没有好的管理和来竞争力?在国际社会飞速发展的今天,我国也已成功加入世贸组织的今天,不得不让我们认真对待每一个问题。 学生学籍管理是学校管理中异常重要的一个环节,作为学校,除了育人,就是育知,学生学籍管理的计算机化是整个学校教务管理中的重要一部分,能否实现这一步关系到学校办学整体效率的高低,介与它的重要性,学生学籍管理系统的开发与应用就逐渐提入议程,并占着越来越重要的份量。 运用学生学籍管理系统可以减轻学院教学人员的工作量,加快查询速度,加强管理,以及国家各部门关于信息化的步伐,使各项管理更加规范化。还有就是缩小开支,提高工作效率与准确率。可以使学生能够合理安排时间,能够尽快的知道自己的考试学籍,投入新的课程的学习或复习这次没有考过的课程。并且学生学籍管理系统的应用也为今天的高校教育在未来市场的竞争力的提高达下坚实的基础。 在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,怎样提高工作效率是人们首先考虑的问题。学生学籍管理是一个非常繁琐与复杂的一项工作,一个原因就是工作量大,不好管。对于一个学校而言,更应该运用一些本地资源,提高管理的力度,对学生负责,对自己的重任负责。 1.2研究背景学生学籍管理是各大学的主要日常管理工作之一,涉及到校、系、师、生的诸多方面,随着教学体制的不断改革,尤其是学分制、选课制的展开和深入,学生学籍日常管理工作及保存管理日趋繁重、复杂。迫切需要研制开发一款功能强大,操作简单,具有人性化的学生学籍管理系统。在国外高校,与国内不同,他们一般具有较大规模的稳定的技术队伍来提供服务与技术支持。而国内高校信息化建设相对起步较晚。在数字校园理论逐步应用的过程中,各高校一方面不断投资购建各种硬件、系统软件和网络,另一方面也不断开发实施了各类教学、科研、办公管理等应用系统,形成了一定规模的信息化建设体系。但是,由于整体信息化程度相对落后,经费短缺,理论体系不健全等原因,国内高校教务管理系统在机构设置、服务范围、服务质量及人员要求上与国外高校相比都有一定的差距。 纵观目前国内研究现状,在安全性和信息更新化方面存在有一定的不足,各现有系统资料单独建立,共享性差;在以管理者为主体的方式中,信息取舍依赖管理者对于信息的认知与喜好,较不容易掌握用户真正的需求,也因此无法完全满足用户的需求。因此,教务管理软件应充分依托校园网,实现教务信息的集中管理、分散操作、信息共享,使传统的教务管理朝数字化、无纸化、智能化、综合化的方向发展,并为进一步实现完善的计算机教务管理系统和全校信息系统打下良好的基础。 1.3 系统概述高校学籍管理系统面向全校师生提供学生基本信息查询,学生成绩查询等基本服务功能. 对不同权限用户提供相应的信息查询功能,信息录入功能及信息更新功能. 根据不同业务,采集相应数据,并整理成规范的数据格式,并对数据进行统计和分析,为教学管理提供有效的数据集合和支持;依据不同的需求展示数据信息,使之能够受控地被不同的角色访问和处理;1.4本章小结本章对高校学籍管理系统的研究目的、意义及背景作了研究,得出的结论是在当前的环境下,研究开发高校学籍管理系统很有实用价值。并对系统的基本功能作了简单描述。2 J2EE平台、面向对象及数据库概述2.1 J2EE平台、面向对象及数据库概述2.1.1 J2EE平台介绍J2EE平台提供了你设计、建造、测试、部署分布式多层次应用所需要的所有内容。J2EE教程对平台特性、API和工具进行了有深度的介绍。如果你需要J2EE应用设计方面的帮助,J2EE BluePrints Digest对在J2EE平台上,开发多层次、瘦客户应用,提供了高层次的描述。应用编程模式由技术主体和原则组成,指导J2EE应用开发人员确定最合理的实施选择、最有效的使用JSP和Servlets,在实现业务逻辑时选择好的设计、有效的把J2EE安全模型映射到企业计算环境和体系结构。2.1.2面向对象技术介绍所谓面向对象(Object-Oriented),指的是把现实世界中的现象以更接近自然的形式在计算机的信息世界中反映出来。面向对象技术代表了一种全新的程序设计思路和观察、表述、处理问题的方法,与传统的面向过程的开发方法不同,面向对象的程序设计和问题求解力求符合人们日常自然的思维习惯,降低、分解问题的复杂性,提高整个求解过程的可控性、可监测性和可维护性,从而达到以较小的代价和较高的效率获得较满意效果的目的。在20世纪80年代,面向对象技术从无到有,逐渐引起了业界的关注。这主要是因为微电子技术的迅速发展使网络的广泛应用成为可能,而网络工作站要求有高质量的图形用户界面(GUI),丰富的工具和集成开发环境,推动了计算机主流朝着面向对象的方向进展;同时,随着计算机应用在工程活动中的不断深入,软件规模不断扩大,复杂程度提高,要求具有高度表达能力的数据结构,而面向对象模型恰好适应了这一发展需求;最后软件工业自身也提出了对新的软件开发过程模型和新的方法论的要求,这就需要摆脱原有的结构化程序设计方法的束缚,把希望寄托于面向对象技术。面向对象技术的兴起给业界注入了新鲜的血液。各大软件厂商纷纷推出面向对象的程序设计语言,如C+,Dephi,Java,C#等,和各种基于面向对象技术的可视化软件开发环境,如PowerBuilder,VB,Dephi,Eclipse等。如今,软件工程中流行的软件构件思想也同样以面向对象理论为基础。随着研究的不断深入,面向对象技术的应用越来越广泛。面向对象的思想潜移默化地融入到许多不同的领域,如程序设计语言,软件开发方法学,操作系统,人工智能,实时控制系统,人机界面,开发工具与环境,甚至于硬件设计等。在软件开发中,面向对象技术相对于之前的程序设计方法能够更好地适应当今软件开发在规模、复杂性、可靠性和质量、效率上的种种需求,己经成为软件开发中的的基本方法。2.1.3数据库概述数据库技术是应数据管理任务的需要而产生的。在应用需求的推动下,在计算机硬件、软件发展的基础上,数据管理技术经历了人工管理、文件系统、数据库系统三个阶段。与人工管理和文件系统相比,数据库系统有数据结构化、数据的共享性高,冗余低、数据易扩充、数据独立性高、数据由DBMS统一管理和控制等优点。数据库的发展按其数据模型也可分为四个阶段:层次模型数据库、网状模型数据库、关系模型数据库和面向对象模型数据库。层次数据库和网状数据库在20世纪70年代到80年代初非常流行,在数据库系统产品中占据了主导地位,现在己基本上被关系数据库系统取代。与层次模型和网状模型相比,关系数据库所采用的关系模型有以下优点:1)关系模型建立在严格的数学模型基础之上。2)关系模型的概念单一。无论实体还是实体之间的联系都用关系表示,对数据的检索结果也是关系。所以其数据结构简单、清晰,用户易懂易用。3)关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了软件系统开发人员的工作。关系数据模型的主要缺点是,由于存取路径对用户透明,查询效率不如层次模型和网状模型。因此为了提高性能,必须对用户的查询进行优化,增加了开发数据库系统的难度。关系数据库系统(RDBMS)发展历史大致可以分为三个阶段。第一阶段从E.E.Codd 1970年提出关系模型后,七十年代对关系数据库的理论研究和原型开发时代。这一时期莫定了关系模型的理论基础。研究了关系数据库语言,开发出了关系数据库管理系统的一些原型,是以IBM公司的SYSTEM R和Berkeley大学的Ingress为代表。第二阶段是从七十年代后期开始,RDBMS的实用阶段。这一时期一方面从理论上攻克了诸如查询优化,并发控制,完整性机制和故障恢复等一系列重大技术问题。从而使得数据库走向实用化、商业化。这一时期开发了大量的商业RDBMS产品。以Oracle,DB2,Informix,Ingress,RDB等为代表。第三阶段是从八十年代以来,微机在性/价比上的提高,网络技术的成熟并实用化,计算机进入各个领域,大量的大规模的信息系统的建立,要求计算机应用领域由集中到分布,由单机到网络,由信息管理,辅助决策到联机事务处理,到企业级的联机事务处理。这一时期以客户/服务器的体系结构出现为标志。其代表产品有Sybase和Microsoft公司1986年推出的SQL Server为代表。面向对象程序设计方法在计算机的各个领域都产生了深远的影响。自然也给遇到挑战的数据库技术带来了希望和机会。因此,在面向对象流行的时候,数据库厂商也在进行着面向对象数据库(OODB)的研究。这些研究在上个世纪八十年代就初现端倪。面向对象数据库(OODB)的研究一般有两个方向:一个是在主流的关系数据库的基础上加入对象化特征,使之提供面向对象的服务,但访问语言还是基于SQL,即对象关系数据库(ORDBMS);另一个方向就是彻底抛弃关系数据库,用全新的面向对象的概念来设计数据库,这就是对象数据库(ODBMS)。1)对象关系数据库(ORDBMS)随着许多关系数据库厂商开始提供对象化服务,各自的接口开始互不兼容,在经历一些麻烦之后,关系数据库厂商感觉到规范化的必要,因为当初关系数据库雄霸天下时SQL92标准起了很大作用,大家可以按照统一的编程方式来访问高性能的商用数据库。关系数据库厂商集中起来,重新将对象化服务规范起来,形成了SQL99规范,将其中的对象结构等内容规范起来,开始一个崭新的面向对象的关系数据库(ORDBMS)的历程。Oracle是一个传统的关系数据库厂商,在对象化的道路上,Oracle当然采取追加对象化特征的道路,以侵入数据对象化的市场,保持Oracle在数据库领域的领导地位。如果说Oracle7.4使Oracle走向全盛的话,从Oracle8开始,Oracle就成为关系数据库加对象类型的先驱。在Oracle8中,我们可以定义一些数据结构(Record),将普通的类型包装在其中成为数据元素,然后可以在客户端按Record结构进行访问,初步提供了面向对象的数据库服务。2)对象数据库(ODBMS)对象数据库就是采用全新的面向对象概念来设计数据库的全新数据库类型。在这方面,主要以一些大学研究机构进行设计和开发,有些也形成了产品,不过由于市场方面的原因(主要是关系数据库的容易上手和市场绝对领导地位)和ODBMS先天的一些弱点(比如查询引擎很难优化),使ODBMS没有象关系数据库那样流行起来。不过对象数据库的对象化特点还是令人割舍不下,目前还是有一些很好的产品在市场上,从商用的到免费的都用。目前在ODBMS领域占据领导地位的是Versant,FastObjects和ObjectStore等几大厂商,并且,市场份额也在逐步扩展。免费的产品包括C+编写的Ozone、纯Java的db4o等等。还有一些研究机构开发一些底层的面向对象数据库引擎,但只提供一些底层的API,不提供管理方面的功能,以及一些算法提供开放式接口,让厂商去选择和实现。比如美国威斯康新大学计算机系数据库组的SHORE引擎,就是一个非常出色的面向对象数据库引擎,现在还在积极的更新中,一些其它研究机构和数据库厂商采用它完成了自己的特别的对象数据库,比如专用于地理信息的数据库、专用于宇宙空间数据研究的数据库等等。目前对象数据库最大的障碍是缺乏统一的规范,各个数据库厂商有各自的访问接口。对象数据库比起关系数据库来,不只是基本的几种数据类型那么简单,它还涉及继承处理、多态等一大堆面向对象特征的实现,规范化道路当然困难重重。这也是对象数据库无法普及的一个重要原因。3)关系数据库关系数据库能够透明地处理记录的添加、删除、排序操作:通过主键与字段名随机访问记录与字段;还可以通过表间关系或表内关系表达对象间的各种约束和关联。就现阶段而言,由于关系数据库的理论非常完善,并且得到了数十年的实践考验,不论从性能还是数据完备性的角度,关系数据库都有着无可比拟的优势,是包括面向对象的软件项目在内的大多数软件系统数据存储的首要选择。2.2 Struts原理2.2.1 Struts框架工作原理 Struts是基于Model 2之上的,而Model 2是经典的MVC(模型视图控制器)模型的Web应用变体,这个改变主要是由于网络应用的特性-HTTP协议的无状态性引起的。Model 2的目的和MVC一样,也是利用控制器来分离模型和视图,达到一种层间松散耦合的效果,提高系统灵活性、复用性和可维护性。在多数情况下,你可以将Model 2与MVC等同起来。图1表示一个基于Struts技术的典型网络应用,从中可以看出Model 2中的各个部分是如何对应于Java中各种现有技术的。图1 基于Struts框架的网络应用在利用Model 2之前,我们是把所有的表示逻辑和业务逻辑都集中在一起(比如大杂烩似的JSP),有时也称这种应用模式为Model 1,Model 1的主要缺点就是紧耦合,复用性差以及维护成本高。既然Struts是基于Model 2之上,那它的底层机制也就是MVC,图2是Struts中的MVC实现示意图。图2 Struts中的MVC示意图首先,控制器(ActionServlet)进行初始化工作,读取配置文件(struts-config.xml),为不同的Struts模块初始化相应的ModuleConfig对象。比如配置文件中的Action映射定义都保存在ActionConfig集合中。相应地有ControlConfig集合、FormBeanConfig集合、ForwardConfig集合和MessageResourcesConfig集合等。控制器接收HTTP请求,并从ActionConfig中找出对应于该请求的Action子类,如果没有对应的Action,控制器直接将请求转发给JSP或者静态页面。否则控制器将请求分发至具体Action类进行处理。在控制器调用具体Action的execute方法之前,ActionForm对象将利用HTTP请求中的参数来填充自己(可选步骤,需要在配置文件中指定)。具体的ActionForm对象应该是ActionForm的子类对象,它其实就是一个JavaBean。此外,还可以在ActionForm类中调用validate方法来检查请求参数的合法性,并且可以返回一个包含所有错误信息的ActionErrors对象。如果执行成功,ActionForm自动将这些参数信息以JavaBean(一般称之为form bean)的方式保存在Servlet Context中,这样它们就可以被其它Action对象或者JSP调用。Struts将这些ActionForm的配置信息都放在FormBeanConfig集合中,通过它们Struts能够知道针对某个客户请求是否需要创建相应的ActionForm实例。Action很简单,一般只包含一个execute方法,它负责执行相应的业务逻辑,如果需要,它也进行相应的数据检查。执行完成之后,返回一个ActionForward对象,控制器通过该ActionForward对象来进行转发工作。我们主张将获取数据和执行业务逻辑的功能放到具体的JavaBean当中,而Action只负责完成与控制有关的功能图3给出了客户端从发出请求到获得响应整个过程的图解说明。图3 Struts应用的详细流程图2.2.2 Struts的视图组件Struts框架的视图负责为客户提供动态网页内容。Struts视图主要由JSP网页构成,此外,Struts框架还提供了Struts客户化标签和ActionForm Bean。这些组件提供对国际化,接收用户输入的表单数据,表单验证和错误处理等的支持。使开发者可以把更多的精力放在实现业务需求上。1)在视图中使用JavaBeanJavaBean是可重用的,平台独立的JAVA组件,JavaBean支持属性,事件,方法和持久化。Struts框架仅利用了JavaBean的一小部分特性。在Struts应用中的JavaBean和普通的Java类很相似,不过,它应该遵守以下规范:a)必须提供不带参数的构造方法。b)为Bean的所有属性提供公共类型的get/set方法。c)对于boolean类型的属性,如果存在isXXX()方法,那么该方法返回boolean类型的属性值。d)对于数组类型的属性,应该提供getXXX(int index)和setXXX(int index,Property Element value)方法,用来读取或设置数组中的元素。2)DTO数据传输对象JavaBean除了可以用来创建业务对象,实体业务对象包含了模型的状态信息。此外,Strtus框架还可以利用JavaBean来创建数据传输对象(Data Transfer Object,简称DTO)。DTO用于在不同的层之间传递数据。利用DTO传输数据有以下几个好处:a)减少传输数据的冗余,提高传输效率。b)有助于实现各个层之间的独立,使每个层分工明确。模型层负责业务逻辑,视图层负责向用户展示模型状态。采用DTO,模型层对视图层屏蔽了业务逻辑细节,向视图层提供可以直接显示给用户的数据。ActionForm Bean是Struts框架提供的DTO,用于在视图层和控制层之间传递HTML表单数据。控制层可以从ActionForm Bean中读取用户输入的表单数据,也可以把来自模型层的数据存放到AtionForm Bean中,然后把它返回给视图。AtionForm Bean还具有表单验证功能,可以为模型层过滤不合法的数据。2.2.3 Strtus的模型组件模型代表应用的业务数据和逻辑。Struts框架并没有为设计和创建模型组件提供现成的框架。不过,Strtus允许使用其他模型框架来处理应用的业务领域,如EJB(Enterprise JavaBean)和JDO(Java Data Obiect),以及常规的JavaBean和ORM(Object-Relation Mapping)等。1) 模型在MVC中的地位模型是应用中最重要的一部分,它包含了业务实体和业务规则,负责访问和更新持久化数据。应该把所有的模型组件放在系统中的同一个位置,这有利于维护数据的完整性,减少数据冗余,提高可重用性。模型应该和视图以及控制器之间保持独立。在分层的框架结构中,位于上层的视图和控制器依赖于下层的模型的实现,而下层模型不应该依赖于上层的视图的控制器的实现。Struts应用的各个层次之间的依赖关系如图4所示。 依赖关系加强 依赖关系减弱视图层控制层模型层持久化层网络层图4 Struts应用中各层的依赖关系如果在模型组件中通过Java的import语句引入了视图和控制器组件,这就违反了以上原则,下层组件访问上层组件会使应用的维护,重用和扩展变得困难。1) 模型的概念和类型在软件开发领域,模型用来表示真实世界的实体。在软件开发的不同阶段,需要为目标系统创建不同类型的模型。在分析阶段,需要创建概念模型,在设计阶段,需要创建设计模型。可以采用面向对象建模语言UML来描述模型。a) 概念模型在建立模型之前,首先要对问题域进行详细的分析,确定用例,接下来就可以根据用例来创建概念模型。概念模型用来模拟问题域中的真实实体。概念模型描述了每个实体的概念和属性,以及实体之间的关系。但在这个阶段并不描述实体的行为。创建概念模型的目的是帮助更好地理解问题域,识别系统中的实体,这些实体在设计阶段很可能变为类。b) 设计模型概念模型是在软件分析阶段创建的,它帮助开发人员对应用的需求获得清晰精确的理解。在软件设计阶段,需要在概念模型的基础上创建设计模型,可以用UML类框图、活动图以及状态图来描述设计模型。根据UML语言,类之间存在四种关系:关联(Association) 关联指的是类之间的引用关系。例如订单对象OrderBO需要引用CustormerBO对象,来表明这个订单是由哪个客户发出的。如果类A引用类B,那么被引用的类B将被定义为类A的属性。依赖(Dependency) 依赖指的是类之间的访问关系。如果类A访问类B的属性或方法,那么可以说类A依赖类B。与关联关系不同的是,无需把类B定义为类A的属性。累积(Aggregation) 累积指的是整体与个体之间的关系,可以把累积看做一种强关联关系。例如购物车ShoppingCart和购物条目ShoppingCartItem之间就是累积关系。一个购物车包含多个购物条目。一般化(Generalization) 一般指的是类之间的继承关系。2) 业务对象(BO)业务对象,即Business Object(BO),是对对真实世界的实体的软件抽象。它可以代表业务领域中的人、地点、事物或概念。业务对象包括状态和行为。业务对象可分为三种类型:实体业务对象,过程业务对象和事件业务对象在应用中使用业务对象有许多好处,最重要的一点就是业务对象提供了通用的术语和概念,不管是技术人员还是非技术人员都可以共享并理解它们。它们可以直接地代表真实世界中的概念,开发小组的所有成员都能理解它们,如果针对同一个业务领域需要开发出多个应用,那么这些应用可以共享这些业务对象。业务对象的可重用特性可以提高应用开发速度,减少冗余。此外,业务对象可以隐藏实现细节,对外只暴露接口。如果业务对象的某个方法需要传入java.util.ArrayList类型的参数,那么应该把参数定义为java.util.List接口类型。当应用中的业务对象在内存中创建后,它们不可能永远存在。最后,它们要么从内在中清除,要么被持久化到数据存储库中。内存无法永久保佑数据,因此必须对业务对象进行持久化。否则,如果对象没有被持久化,用户在应用运行时发出的订单信息将在应用结束后随之消失。一旦数据被持久化,它们可以在应用运行时被重新讲稿到内存中,并重新构造出业务对象。业务对象的持久化过程如图5所示。图5 业务对象的持久化关系型数据库被广泛用来存储数据。关系型数据库中存放的是关系型数据,它是非面向对象的。把业务对象映射到非面向对象的数据库中,存在着阻抗不匹配(impedance mismatch),因为对象由状态和行为组成,而关系型数据库则由表组成,对象之间的各种关系和关系型数据库中表之间的关系并不一一对应。例如对象之间的继承关系就不能直接映射到关系型数据库中。2.2.4 Struts控制器组件Struts控制器组件负责接收用户请求、更新模型、以及选择合适的视图组件返回给用户。控制器组件有助于将模型层和视图层分离,有了这种分离,就可以在同一个模型的基础上得心应手地开发多种类型的视图。Struts控制器组件主要包括:a)ActionServlet组件:充当Struts框架的中央控制器。b)RequestProcessor组件:充当每个子应用模块的请求处理器。c)Action组件:负责处理一项具体的业务。Struts框架采用控制器组件来预处理所有的客户请求,这种集中控制方式可以满足MVC设计模式的两大需求:首先,控制器在用户输入数据和模型之间充当媒介/翻译者的角色,提供一些通用功能,如安全、登入和其他针对具体用户请求的重要服务,当系统的这些通用功能出现需求变更时,不需要修改整个应用,只需要修改局部的控制器组件即可。其次,由于所有的请求都经过控制器过滤,因此可以降低视图组件之间,以及视图组件和模型组件之间的相互依赖关系,提高每个组件的相对独立性。由控制器组件来决定把合适的视图组件返回给用户,这可以减少视图组件之间直接的、错综复杂的链接关系,使应用更加灵活,便于维护。Strtus框架采用ActionServlet和RequestProcessor组件进行集中控制,并采用Action组件来处理单项业务。Struts的控制器组件主要完成以下任务:1)接收用户请求。2)根据用户请求,调用合适的模型组件来执行相应的业务逻辑辑。3)获取业务逻辑执行结果。4)根据当前状态以及业务逻辑执行结果,选择合适的视图组件返回给用户。1ActionServlet类Org.apache.sruts.action.ActionServlet类是Struts框架的核心控制器组件,所有的用户请求都先由ActionServlet来处理,然后再由ActionServlet把请求转发给其他组件。Struts框架只允许在一个应用中配置一个ActionServlet类,在应用的生命周期中,仅创建ActionServlet类的一个实例,这个ActionServlet实例可以同时响应多个用户请求。Servlet容器在启动时,或者用户首次请求ActionServlet时加载ActionServlet类。在这两种情况下,Servlet容器都会在ActionServlet被加载后立即执行它的init()方法,这可以保证当ActionServlet处理用户请求时已经被初始化。以下是ActionServlet的init()方法完成的初始化流程。1)调用initInternal()方法,初始化Struts框架内在的消息资源,如与系统日志相关的通知、警告和错误消息。2)调用initOther()方法,从web.xml文件中加载ActionServlet的初始化参数,如config参数。3)调用initServlet()方法,从web.xml文件中加载ActionServlet的URL映射信息。此外还会注册web.xml和Struts配置文件所用的DTD文件,这些DTD文件用来验证web.xml和Struts配置文件的语法。4)调用initModuleConfig()方法,加载并解析默认子应用模块的Struts配置文件;创建ModuleConfig对象,把它存储在ServletContext()中。5)调用initModuleMessageResources()方法,加载并初始化默认子应用模块的消息资源;创建MessageResources对象,把它存储在ServletContext中。6)调用initModuleDataSources()方法,加载并初始化默认子应用模块的数据源。如果在Struts配置文件中没有定义元素,就忽略这一流程。7)调用initModulePlugins()方法,加载并初始化默认子应用模块的所有插件。8)当默认子应用模块被成功地初始化后,如果还包括其他子应用模块,将重复流程(4)(7),分别对其他子应用模块进行初始化。2 ActionServlet的process()方法当ActionServlet实例接收到HTTP请求后,在doGet()或doPost()方法中都会调用process()方法来处理请求。以下是ActionServlet的process()方法的源代码:Protected void process(HttpServletRequest request,HttpServletResponse response)throws IOException.ServletExcptionModouleUtils.getInstance().selectModule(request, getServletContext(); getRequestProcessor(getModuleConfig(request).process(request,response);Process()方法本身看上去并不复杂,但是它所调用的其他方法的实现比较复杂。在process()方法中,首先调用org.apache.struts.util.Module()类的selectModule()方法,这个方法选择负责处理当前请求的子应用模块,然后把与子应用模块相关的MouduleConfig和MessageResources对象存储到request范围中,这使得框架的其余组件可以方便地从request范围中读取这些对象,从而获取应用配置信息和消息资源。Process()方法的第二步操作为获得RequestProcessor类的实例,然后调用RequestProcessor类的process()方法,来完成实际的预处理请求操作。可以创建ActionServlet类的子类,同时我们也可以扩展ActionServlet类以达到需要的目的。3 RequestProcessor类对于多应用模块的Struts应用,每个子应用模块都有各自的RequestProcessor实例。在ActionServlet的process()方法中,一旦选择了正确的子应用模块,就会调用子应用模块的RequestProcessor实例的process()方法来处理请求。在ActionServlet调用这个方法时,会把当前的request和response对象传给它。Struts框架只允许应用中存在一个ActionServlet类,蛤是可以存在多个客户化的RequestProcessor类,每个子应用模块都拥有单独的RequestProcessor类。如果想RequestProcessor想类的一些默认功能,可以覆盖RequestProcessor类中的相关方法。RequestProcessor类的process()方法负责实际的预处理请求操作,该方法依次执行以下流程。1)调用processMultipart()方法。如果HTTP请求方式来POST,并且请求的contentType属性以“multipart/form-data”开头,标准的HttpServletRequest对象将被重新包装,以方便处理“multipart”类型的HTTP请求。如果请求方式为GET,或者contentType属性不是“multipart”,就直接返回原始的HttpServletRequest对象。2)调用processPath()方法,获得请求URL的路径,这一信息可用于选择合适的Struts Action组件。3)调用processContent()方法,当ControllerConfig对象的locale属性为true,将读取用户请求中包含的Locale信息,然后把Locale实例保存在session范围内。4)调用processContent()方法,读取ControllerConfig对象的contentType属性,然后调用response.setContentType (contentType)方法,设置响应结果的文档类型和字符编码。processContent()方法的代码如下:Protected void processContent(HttpServletRequest request,HttpServletResponse response)String contentType=moduleConfig.getControllerConfig().getContentType();If(contentType!=null)Response.setContentType(contentType);5)调用processNoCache()方法,读取ControllerConfig对象的nocache属性,如果nocache属性为true,在响应结果中将加入特定的头参数:Pragma、Cache-Control和Expires,防止页面存储在客户浏览器的缓存中。processNoCache()方法的代码如下: Protected void processNoCache(HttpServletRequest request,HttpServletResponse response)if(moduleConfig.getControllerConfig().getNocache()response.setHeader(“progma”, “No-cache”);response.setHeader(“Cache-Control”, “No-cache”);response.setHeader(“Expires”, 1);6)调用processPreprocess()方法。该方法不执行任何操作,直接返回true.子类可以覆盖这个方法,执行客户化的预处理请求操作。7)调用processMapping()方法,寻找和用户请求的URI匹配的ActionMapping,如果不存在这样的ActionMapping,则向用户返回恰当的错误消息。8)调用processRoles()方法,先判断是否为Action配置了安全角色,如果配置了安全角色,就调用isUserInRole()方法判断当前用户是否具备必需的角色;如果不具备,就结束请求处理流程,向用户返回恰当的错误消息。9)调用processActionForm()方法,先判断是否为ActionMapping配置了ActionForm,如果配置了ActionForm,就先从ActionForm的存在范围内寻找该ActionForm实例;如果不存在,就创建一个实例。接下来把它保存在合适的范围中,保存时使用的属性key为ActionMapping的name属性。10)调用processPopulate()方法。如果为ActionMapping配置了ActionForm,就先调用ActionForm的reset()方法,再把请求中的表单数据组装到ActionForm中。11)调用processValidate()方法,如果为ActionMapping配置了ActionForm,并且ActionMapping的validate属性为true,就调用ActionForm的validate()方法。如果validate()方法返回的ActionErrors对象中包含ActionMessage对象,说明表单验证失败,就把ActionErrors对象存储在request范围内,再把请求转发到ActionMapping的input属性指定的Web组件。如果ActionForm的validate()方法执行表单验证成功,就继续执行下一步请求处理流程。12)调用processInclude()方法,判断是否在ActionMapping中配置了include属性。如果配置了这个属性,就调用RequestDispatcher的include()方法,请求处理流程结束,否则继续下一步。14)调用processActionCreate()方法,先判断是否在Action缓存中存在这个Action实例,如果不存在,就创建一个Action实例,把它保存在Action缓存中。15)调用processActionPerform()方法,该方法再调用Action实例的execute()方法。Execute()方法位于try/catch代码中,以便捕获异常。16)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 摄影工作室行业服务方案
- 农业科研院所2025年农产品无损检测技术创新路径研究
- 河北省衡水市安平县安平中学2025-2026学年高一上学期开学测试历史试卷
- 河北省面试真题及答案
- 数学篮球题目及答案
- 2025年山西省教师职称考试(语文)(小学)测试题及答案
- CN222977475U 一种锻钢固定球阀的注脂结构 (成都成高阀门股份有限公司)
- CN120218158A 用于从经修剪的神经网络中去除掩膜的技术(辉达公司)
- 2025年良肢位考试题及答案
- CN120107265B 一种基于图像处理的油石静压成型质量检测方法 (西安博尔新材料有限责任公司)
- 养老规划师理论知识考核试题及答案
- 《煤矿安全规程》2025
- 燃气综合考试题及答案
- 应急预案评估管理办法
- 2025年职业指导师(中级)专业能力职业指导实务试卷
- DNA检测实验室建设与运营优化方案
- 2025江苏苏州昆山国创投资集团有限公司第一期招聘17人笔试参考题库附带答案详解版
- 皮肤撕脱伤的护理
- 茶叶质量安全培训课件
- 以语文为翼筑高中生健康心理之基:高中语文教学中的心理健康教育探索
- 安全副总经理岗位职责
评论
0/150
提交评论