论基于MVC实现的电子政务系统_第1页
论基于MVC实现的电子政务系统_第2页
论基于MVC实现的电子政务系统_第3页
论基于MVC实现的电子政务系统_第4页
论基于MVC实现的电子政务系统_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于MVC实现的电子政务系统摘要随着计算机和信息技术的迅速开展,网络己经成为我们日常生活、学习和工作的根底设施。各种基于网络的分布式办公系统层出不穷,电子政务系统就是其中之一。电子政务系统利用网络可以将各种资源进展有效的组合,迅速进步政务活动的效率,是政府部门进展信息化建立的重要途径。迅速开展,不断变化的经济、社会内容决定了电子政务系统必须可以满足政务活动的多变性。因此如何使电子政务系统可以具有最大的可扩展性和重用性就成为电子政务系统开发中必须重视和解决的问题。MVC设计形式的核心思想就是分层设计,将显示逻辑、业务逻辑以及流程控制互相别离,别离不同的层次,分为模型层(Model)、视图层(Yiew)、控制器(Controller)。各层次之间互相独立,接口明晰,祸合度低,模块间具有较大的独立性,从而增强了系统的可维护性和可扩展性。通过分层设计,各个层次的模块可由不同的开发人员开发,独立层次的模块扩展也将对其他层次模块的影响降为最低。这种特性恰恰满足了电子政务系统开发的需要。特别是J2EE平台出现之后,提供了各种成熟且功能强大的组件和容器技术。程序开发人员可以利用这些成熟的组件和容器技术,使之担任MVC各层次中的各个角色,降低了系统开发的难度,提高了系统开发的效率。Struts架构作为一种基于J2EE平台的框架,详细实现了MVC形式。Struts提供不同的组件工作于不同的层次,担任不同的角色,并提供了丰富的标签库,大大增强了对视图层的支持,从而使电子政务系统的开发更加便捷。论文从理论上阐述了MVC形式应用于电子政务系统设计开发的意义,对MYC形式的原理和组成构造进展了深化的分析,介绍了实现MVC形式的Struts框架的各个组成局部及控制流程.最后以作者实习期间参与的上海市人民政府外事办公室电子政务系统的子系统—上海市因公护照签证管理信息系统作为开发实例,详细介绍了如何将MVC形式应用于电子政务系统设计开发中,以及在设计各个层次时应该遵循的详细规那么和考前须知。并针对于上海市外事办公室特殊的网络环境,成功解决了数据同步的难题。关键字:电子政务,设计形式,MVC,Struts}J2EEAbstractWiththedevelopmentoftheComputerScienceandtheInformationTechnology,thenetworkhasbecomeakindofbasicinfrastructuresinourdailylife.KindsofsystemsbasedonnetworkappearedandtheE-GOVSystemisoneofthem.TheE-GOVSystemcanorganizealltheinformationeffectively,sharethemamongallthedepartments,andimprovetheworkefficiencygreatly,soitisakindofmostimportantwaytobuildtheE-G4V.ThecontentofeconomyandsocietywhichisdevelopingquicklyhasdecidedthattheE-GOVSystemshouldalsosatisfythechangeoftheactivegovernment.SoithasbeenapressingpmblemhowtomaketheE-GOVSystemmuchmoreextensiveand,reusable.TheMVCpatternisakindoflayerspattern.ItseparatesthewholestructureintoseveralLayers:Mod呱ViewandController.Allthelayersexistsseparately,阮interfaceamongthemisclearandmakethecouplinglowest.SothischaracteristicsatisfiestheneedoftheE-GOVSystem.Especiallyitbasesonthe12EEplatformwhichprovideskindsofcomponentsandcontainerswhichthedeveloperscaausetobetherolesinMVC.Anditmakesthedevelopmentmucheasierandimprovestheefficiencygreatly.StrutsisakindofframeworkbasedontheJ2EEplatformandrealizestheMVCpattern.BesidestheseStrutsgiveuslargetagJibsandimprovesthesupportaboutView.ThispaperintroducestheadvantagestoapplytheMVCtothedevelopmentofE-G4VSystemdevelopmentfirstly.Thenanalyzethestructure,thedetailsoftheMVCpatternandthemainpartsofStrutsframeworkwhichrealizestheMVCpattern.AtlastbasedontheShanghaiVisaandPassportManagementInformationSystem,asubsystemoftheShan沙aiE-GovSystem,thepaperintroduceddetailshowtousetheMVC}tternduringthedevelapmentofthesystems.Keywords:liGov,DesignPattern,MVC,Struts,J2EE第一章引言1.1电子政务系统开发开展现状20世纪90年代以来,伴随信息技术的开展,信息化已经成为各国普遍关注的焦点问题。在国家信息化建立进程中,政府信息化又成为信息化建立的重点。电子政务是政府信息化的主要形式,它是指国家机关在政务活动中,全面应用现代信息技术、网络技术,以及办公自动化技术等,进展办公、管理和为社会提供公共效劳的一种全新的管理方式。美国的电子政务起源于20世纪90年代初。1993年,克林顿政府成立了“国家绩效评估委员会〞,递交了?创立经济高效的政府?和?运用信息技术改造政府?两份报告,提出应当用先进的信息网络技术克制美国政府在管理和提供效劳方面所存在的弊端,这使得构建“电子政府〞成为美国政府改革的一个重要方向,也揭开了美国电子政务建立的序幕。为保障政府信息化开展,美国还制定了一系列法律法规,对政府信息化开展起着重要的保障和标准的作用。我国电子政务建立起步较晚,2Q02年下半年国家也公布了其纲领性文件?中共中央办公厅、国务院办公厅关于转发(国家信息化指导小组关于我国电子政务建设指导意见)的通知?.经过几年的开展,我国的电子政务系统开展也获得了长足的进步,已经不再只是政务管理信息化形式的一种简单意义上的补充[1],不少rr企业也将电子政务系统的设计开发作为自己的商业范畴。例如神州数码、方正集团、浪潮集团、沈阳东软软件股份等企业已经有成熟的电子政务系统平台产品投入实际应用。电子政务应用系统,对在机关政务活动中产生的信息资源进展采集、整合、管理等操作,以分布式的构造结合数据库技术,对整个信息资源进展检索、共享。随着Web开发技术开展日趋成熟,越来越多的电子政务应用系统转向基于阅读器的BIS系统架构,逐渐舍弃复杂的CIS构造,从而节省了软件的开发本钱及开发周期。通过构建基于Web的分布式电子政务应用系统,实现了各类异构系统的互通互联、各类信息的全面共享,最终消除“信息孤岛〞,到达政务机关信息共享化与智能化的目的[2]。1.2MVC形式在电子政务系统开发应用中的意义电子政务是由网络技术和电子技术的进步与创新开展起来的,因此电子政务系统的开发涉及到多项技术的交融,例如:网络开发技术、数据库技术、信息平安技术、中间件技术、工作流技术等等,是一个庞大的系统工程。加之如今电子政务系统软件的开发没有标准的标准遵循,如今很多电子政务系统构造混乱,模块体积庞大、效率低、藕合度高,代码重用率低,从而导致很多电子政务系统重复开发,成本费用居高不下,系统功能可扩展性差,稳定性和可靠性低等弊端。近年来,随着网络技术迅速开展,J2EE平台的日趋完善及广泛应用,基于BIS多层体系构造的Web应用程序已经成为分布式软件的首选形式,强烈的冲击着传统的C/S体系构造。在此大环境下,电子政务系统的开发也逐渐向BIS形式靠拢。随着面向对象编程技术的深化开展,出现了多种框架模型,简化了应用程序的开发。框架式是可重用的,可以在他的根底之上开发特定的应用程序[3],基于J2EE平台的MvC形式同样具有可重用的特性,为基于B/S的电子政务系统的开发提供完善的框架,成功的解决了在电子政务系统开发中所出现绝大多数的问题。MVC设计形式是80年代Smallta1k}80出现的一种软件设计形式,如今已经被广泛的使用。MVC的出现不仅实现了功能模块和显示模块的别离,同时还进步了应用系统的可维护性、可扩展性、可移植性和组件的可复用性。尽管MVC设计模式很早就已经被提出,但在早期的Web工程开发中,程序语言和HTML的别离一直难以实现,而且脚本语言的功能相对较弱,缺乏支持MVC设计形式的一些必要的技术根底,因此在Web工程的开发中引入MVC却是步履维艰。直到基于12EE的3SPModel2问世时才得以改观。它用JSP技术实现视图的功能,用Servlet技术实现控制器的功能,用JavaBeanIEJB技术实现模型的功能。MVC设计形式成功解决了应用系统开发过程中所遇到的主要弊端,也为电子政务系统的开发提供了较为完善的解决方案,得到TT业内的支持。MVC设计形式的开展,详细实现MVC形式的各种架构也随之出现,其中不乏很多开源框架。Struts框架就是最为优秀的一种,得到市场的认可,Struts于2001年7月正式发布,当前的版本是}.2oStruts提供了构建基于MVC的应用程序的根底或框架,提供了核心的MVC功能,并附带了多个JSP标签库,因此可以更快、更轻松的开发基于MVC的Web应用程序。1.3本论文的研究目的和技术道路本论文的研究目的是对Mvc形式进展深化研究,阐述MvC形式各个组成部分(模型、视图、控制器)在软件开发中所担当的角色及功能,将MVC形式与其他软件框架形式进展比较,深化研究详细实现MVC框架模型的Struts框架技术,并将其应用于电子政务应用系统的开发中,结合J2EE平台技术,为电子政务应用系统的开发提供标准的MVC框架开发形式。本文中使用的开发实例是上海市外事办公室电子政务系统的子系统—上海市因公护照签证管理信息系统,此系统已经成功部署运行。1.4本论文的组织本文的组织构造如下:第一章引言。主要讲述电子政务系统开发的现状,以及Mvc设计形式应用于电子政务系统开发的现实意义。第二章应用系统的体系构造。主要介绍应用系统的一般体系构造,如传统cps的两层体系构造、Bas系统的三层体系构造以及基于】2EE平台的多层体系结构。并根据比照给出了电子政务系统应该采用多层体系构造的理由。第三章应用Struts详细实现MVC形式。本章将对设计形式的概念、MVC设计形式的核心思想和组成局部以及详细实现MVC设计形式的Struts框架进展论述,并详细阐述Struts框架的核心组件及流程控制等。第四章Mvc形式在电子政务系统开发中的实例。本章将以上海市因公护照签证管理信息系统为例,详细研究如何在电子政务系统设计开发中详细应用Mvc设计形式及其详细实现架构s}r}框架。并介绍了系统本身的功能构造以及详细开发中所解决的难题。第五章总结与展望。本章总结全文,指出本系统设计的缺乏及下一步工作的研究重点。第二章应用系统体系构造2.}传统CIS两层体系构造在应用程序开展的早期,由于受到硬件程度以及网络开展程度等外界因素的限制,以及对分布式系统没有过高的要求,传统的应用系统开发普遍采用crs<ClientfServer客户端/效劳器端)两层体系构造。其构造图如图2-1所示。图2-1C/S两层体系构造其中客户端负责向用户提供操作界面,承受用户输入数据信息,通过恳求(Request)向效劳器端发送数据,承受效劳器端的响应(Response),并将响应结果向用户显示。效劳器端主要负责被动承受客户端的恳求,承受数据并进展响应的逻辑处理,以及数据持久化工作,并发送响应,将处理结果返回给客户端。CIS(客户端/效劳器)两层体系构造是一种通用的、基于消息的模块化构造,可以进步系统的灵敏性、可操作性和可扩展性[4]。客户端可以进展局部简单的逻辑处理工作,降低效劳器端的工作负荷,这在早期效劳器端硬件程度不高的情况下,确实具有较高的合理性。但在实际应用中CIS已经暴露出一些弊端和缺点。由于CIS只有两层构造,结构比较简单,只能适用于专用的或者小范围的局域网内部,面向特定的用户群。但随着网络的扩展,对应用系统分布式性能的要求也随之进步,因此CIS体系构造不可以适应更广的网络应用环境。CIS体系机构不可防止的整体性考虑,构件的重用性要求不高,可扩展性低。由于CIS体系构造决定了必须在用户机器上安装客户端应用程序,因此增加了系统开发和维护的难度,从而增加了系统开发的本钱费用。2.2BIS三层体系构造随着网络技术的迅速开展,网络覆盖范围得到快速的扩展,因此用户对应用系统分布式的要求也随之进步,此外,应用程序的开发开场更加关注模块和构件的可重用性,以及逻辑构造的层次性.由于GS体系构造的应用系统一般适用于特定的小型局域网,构件重用性、可扩展性低下,以及开发和维护本钱居高不下等在实际应用中所暴露出来的种种问题,己经明确说明GS体系构造己经不可以满足分布式应用系统的开发要求。取而代之的是BIS(BrowserlServer阅读器用及务器)体系结构。Web技术经过了十几年的开展,己经成为Internet和局域网的重要组成局部,也为BIS体系构造的出现和广泛应用提供了前提条件。基于BIS的应用系统在用户端取消了客户端软件的开发和安装,取而代之的仅仅是在用户机器上安装阅读器(Browser)。但由于阅读器仅仅起到向用户提供交互界面的作用,并不具有较强的逻辑处理功能,因此需要将逻辑处理功能转移到效劳器端,自然增加了效劳器端的工作负荷,因此需要增强效劳器端的设计与开发,对效劳器端再进展分层。效劳器端也逐渐别离成Web效劳器和数据库效劳器。BlS三层体系构造图如图2-2。图2-2B/S三层体系构造客户端阅读器(Browser)只负责为用户提供友好的交互界面,搜集用户输入参数,在用户触发一定事件后,向Web效劳器tWebServer)发出恳求(Request),并将恳求参数传送给Web效劳器。Web效劳器主要负责商业逻辑处理,承受恳求参数,调用响应的方法进展逻辑运算,并可以根据用户需要访问数据库效劳器(DataBaseServer)。在商业逻辑处理完毕后,Web效劳器将处理结果通过H1TP响应(Response)发送给阅读器显示给最终用户。数据库效劳器(DataBaseServer)主要负责数据信息的存储工作。数据库效劳器从Web效劳器中别离出来,有助于减轻Web效劳器的工作负荷,也有助于系统数据信息的管理组织。使得效劳器端商业逻辑处理和数据信息处理互相独立,层次清楚,有助于系统的扩展性的进步。相对于GS体系构造,基于BIS的应用系统更加容易建立在广域网上,可以面向不可知的用户。BIS体系构造要求系统构件相对独立,可以较好的重用,减少了重复开发,此外仅需要在用户端安装阅读器,大大减少了系统开发维护本钱。鉴于以上优势,Microsoft推出全面支持网络的构件搭建平台,Sun和IBM也推出了IavaBean构件技术,使得BIS体系构造成熟完善,大有取代GS体系构造的趋势。随着越来越多的企业级分布式的事务处理要求的进步,三层体系构造中Web效劳器的工作负荷也不断加大。需要继续对Web效劳器的层次构造进展细分,对于细分的方法根据不同的技术平台而不同。本文的以下章节将着重研究基于}z>}技术的细分方法。2.3基于J2EE的Web多层体系构造网络的开展迫切需要有效的企业系统的开发,构建出高质量、高度可用的企业应用,多层体系构造应运而生。客户机不断被压缩,逐渐被阅读器所替代,因此也促使在进展系统设计开发过程中更加注重效劳器的设计与开发,对效劳器进展细分。在技术方面,应用效劳器技术和容器组件技术的出现为企业级网络的分布式应用提供了优秀的技术支持,促使了这种趋势的开展和完善。如今最流行和实用的分布式系统开发语言就是JavaoJava语言从1995年出现以来,根据不同的市场需要,己经开展成三个不同的应用平台:J2ME,IZSE,J2EE.其中J2EE(Java2Platform,EnterpriseF.c}ition)是Suu公司结合多家I'T业大型公司,把所有与企业相关的标准、API进展整合推出的企业级版本,是一个开发分布式企业级应用的标准平台,为程序开发人员提供了一个多层次的分布式体系构造和一系列开发技术标准。其中多层次分布式体系构造是指根据功能把应用逻辑再进展细分,每个层次支持相应的效劳器和组件,组件在分布式效劳器的组件容器中运行,容器间通过相关的协议进展通讯,实现组件间的互相调用。J2EE平台为效劳器端的细分提供了不同的组件、容器以及标准,例如JSP,Servlet组件及应用效劳器容器,EJB组件及EJB容器等等,各种不同的组件及容器部署在不同层次上,不同的层次可以部署在一样效劳器或者不同效劳器上。基于J2EE的Web多层体系构造图如图2-3。图2-3基于J2EE的Web多层体系构造客户层可以是桌面应用程序,也可以是基于Web的应用程序,主要负贵向最终用户提供友好的可视化交互界面。本文主要研究基于Web应用系统的体系结构,因此担任客户层角色的应该为Web阅读器(WebBrowser),阅读器并不具备完善的逻辑处理功能,只是负责发送恳求以及显示响应结果,可以下载静态的HTML页面或者由Web层生成的动态HTML页面,属于一种瘦客户端。Web层产生表示逻辑。根据用户恳求,承受恳求参数,并调用业务层处理单元,在获得处理结果后动态生成表示单元返回给客户层阅读器。J2EE平台为Web层提供了JSP,Servlet组件及Web容器—应用效劳器。JSP和Servlet组件承受用户恳求,并根据逻辑处理结果产生动态的显示页面。应用效劳器那么负责对JSP,Servlet等组件的管理工作。业务层主要负责处理应用的核心业务逻辑,以满足特定业务领域的业务逻辑处理需求。12EE平台为业务层提供了EJB组件及E1B容器。E3B组件可以接收恳求数据,对数据进展复杂的逻辑处理,如有需要可以将数据发送到企业信息系统层进行持久化操作,还可以根据需要检索数据,返回处理结果。EJB可以分为三种:会话Bean(SessionBeaa)、实体Bean(EntityBean)、消息驱动Bean(MessageDrivenBean)。不同的EJB负责不同的功能,统一由EJB容器管理。通常情况下,许多企业应用将Web层和业务层一起发布,称为J2EE效劳器。但ETB本身也存在内部构造复杂、体积庞大的缺点,因此在一般企业级应用系统中不建议使用EJB作为业务层的处理组件,而是建议进展轻量级开发。局部业务逻辑处理可以由JavaBean组件以及应用效劳器容器所代替,从而降低程序开发难度,但大型企业应用仍然建议使用EJB组件.企业信息系统层(EISTies)是处理企业数据信息的系统软件,包括ERP、数据库系统等等。主要负责对企业数据信息的管理、存储等持久化工作。本文所要介绍的上海市因公护照签证管理信息系统主要采用数据库系统。基于J2EE的Web多层体系构造对原来的效劳器端功能模块进展了合理的细分,并提供了完善的组件及容器管理机制,可以有效地控制因重复开,增强应用系统的重用性,充分发挥了面向对象开发的优势。J2EE通过提供统一的开发平台,降低了开发多层应用系统的费用和复杂度,同时提供对现有应用系统集成的有力支持【5】【6】。2.4电子政务系统采用基于J2EEWeb多层体系构造的理由电子政务系统在实际应用中的易用性、强健性、可重用性、可扩展性是系统设计首先考虑的问题【7】。因此既需要考虑更好的实现整个系统的设计开发,也要考虑到系统整体框架的特性以及将来的扩展性。基于J2EE的w}多层体系构造所具有如下优势,正好满足了电子政务系统以上要求:}.J2EE利用Java平台来简化企业解决方案的设计、开发、部署和管理等相关复杂问题,也就具备了Java语言“一次编写,到处运行〞的先天性优势,12EE平台本身具有平台无关性I【8】。.2.J2EE平台提供了完善的组件,进步了系统的重用性。随着经济的迅速发展,社会内容的不断丰富,作为社会的管理者,政府的管理职能、地位和管理内容也再不断的扩大变化。电子政务系统的需求也随之变化,因此电子政务系统对重用性和可扩展性的要求不断进步。J2EE平台利用组件技术和容器技术进步了系统模块的重用性,可以方便的整合原有的电子政务系统,防止了不必要的重复开发。3.易于部属,实用化。由于基于IEEE的Web多层体系构造压缩了客户端的功能,属于BIS构造,在客户端只需要用户安装Web阅读器,而且如今市场上的主流操作系统都会绑定安装阅读器。另一方面,由于业务的不同,电子政务系统主要面向于政府工作人员,应用系统对工作人员的计算机程度不能要求太高,直接使用阅读器就可以对电子政务系统进展纯熟的操作。基于JzEE的Web多层体系构造恰好满足了用户此种需求。4.较强的强健性和稳定性。电子政务系统一旦部署施行就需要全天候运行,因此需要较强的稳定性和强健性。多层次构造虽然不能保证其中一层出现问题,其他层次不受影响,但最重要的数据信息作为单独的一层进展设计,可以保证在系统出现问题时,原有的重要数据不会丧失。此外,多层体系构造将效劳器端工作负荷和业务逻辑分布到不同层次上进展,不同层次的模块单元可以部署在不同机器上,防止了个别机器工作负荷太重的现象,因此降低了系统出现问题的可能性,进步了系统的稳定性。S,节约系统开发本钱.首先基于J2EE的Web多层体系构造使得开发人员不再过多的关注客户端应用程序的开发,只是需要设计用户交户界面即可,节省了系统开发在时间和人力上的开销。此外)2EE平台为程序开发人员提供了友好的功能完善的组件及其容器,开发人员可以从内部细节实现中解脱出来,更加关注系统整体逻辑设计。最后此种体系构造进步了系统的重用性和扩展性,可以较好的整合原有系统,防止不必要的重复开发,从而缩短了开发周期,节约了开发本钱。鉴于以上优势,基于J2EE的Web多层体系构造已经成为进展电子商务、电子政务等基于wpb开发的首选方案。本文中所研究设计的上海市因公护照签证管理信息系统也采用此种体系构造。解决了系统的体系构造问题,下面的章节将研究系统将采用什么样的设计开发形式。2.5本章小结本章按照软件体系构造从简单到复杂的顺序,首先简单介绍了传统的GS两层体系构造,针对于GS两层体系构造所暴露出来的缺陷,比照介绍了更加实用的sls三层体系构造。12EE平台的迅速开展,基于J2EE平台的多层体系构造由于具备成熟的组件及其容器技术,迅速开展起来,逐渐成为开发Web应用系统的首选体系构造。这也是本章重点介绍的局部。本章的最后,结合基于J2EE的多层体系构造的优点,给出了电子政务系统开发采用此种多层体系构造的原因。第三章应用Struts实现MVC形式3.1软件设计形式概述确立了系统的体系构造,理解到系统的关键局部已经集中到效劳器端的各个层次的设计与实现,就需要一定的标准来帮助系统设计和开发人员对效劳器端进展合理的设计与开发,这就涉及到采用何种设计形式的问题。设计形式的概念最初来源于城市建筑形式,但也同样适用于面向对象的软件开发中。在面向对象的软件开发中,设计形式就是特定环境中标准设计问题的重复性解决方案门。设计形式可以帮助开发人员在特定的环境里整理系统设计与开发过程中所面临的问题以及欲采取的解决方案,为系统开发抽象出一种模型,并可以复用。每一个形式描绘了一个不断重复发生的问题,以及该问题解决方案的核心,并可以一次一次的使用该方案而不需要重复开发。每个形式是由三局部组成的一个原那么,这个原那么描绘特定环境、问题和解决方案之间的关系[8】设计形式的根本思想就是,公共的“习惯用法〞在软件设计中被不断重复发现,因此这些形式应该被有意识的归纳整理,并用于类似的问题的解决上,一般而言,设计形式具有四个根本要素【9】.1.形式名称(PatternName)一个助记名,用一两个词来描绘形式的问题、解决方案和效果。命名一种新的形式就会增加一个新的设计词汇。设计形式允许开发人员在较高的抽象层次上进展设计。基于一个统一的形式词汇表,开发人员之间就可以在讨论形式并在编写文档时使用。形式名称可以帮助开发人员考虑,便于交流设计思想和设计结果,找到恰当的设计形式名称也是设计形式编写工作的难点之一。2,问题(Problem)描绘应该在何时使用设计形式。它解释设计问题存在的前因后果,它可能描绘特定的设计问题,也可能描绘导致不灵敏设计的类或者对象构造。有时候,问题部分会包括使用形式必须满足的一系列先决条件。3.解决方案(Solurion)描绘设计的组成成分,它们之间的互相关系及各自的职责和协作方式。因为模式就像一个模版,可应用于多种不同场合,所以解决方案并不描绘一个特定而详细的设计或实现,而是提供设计问题的抽象描绘和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。4.效果(Consequences)描绘形式应用的效果及使用形式应权衡的问题。尽管描绘设计决策时,并不总提到形式效果,但它们对于评价设计选择和理解使用形式的代价及好处具有重要的意义。软件效果大多关注对时间和空间的衡量,它们也表达了语言和实现问题。因为复用是面向对象设计的要素之一,所以形式效果包括它对系统的灵敏性、扩大性或可移植性的影响,显式的列出这些效果对理解和评价这些形式很有帮助。设计形式都是从理论经历中抽象而来,是被“发现〞,而不是“写作分出来E1el。设计形式不单描绘对象,而且描绘对象之间的通信方式,并可以重用,使得更加简单方便的复用成功的体系构造,也使新系统的开发者更加容易理解设计思路,这也是设计形式得到市场和开发人员认可的重要原因。3.2J2EEWeb设计形式如上所述,J2EE平台为B/S系统开发提供了各种成熟的组件及其容器技术,逐渐成为开发Web应用程序的主流。在应用J2EE平台开发Web应用程序时经常提到设计形式Model1和Model2,下文将对这两种详细的设计形式进展简单的介绍。3.2.1Web设计形式Model1J2EE平台向程序开发人员提供了JSP组件。在ISP开展早期,由于其便于掌握而且可以便捷的进展Web应用程序的开发,很快成为基于】2EE的Web应用程序的主要技术。在JSP页面中可以很容易的同时实现内容的显示,业务逻辑的处理以及流程控制,从而快速的完成应用开发。因此在早期的BIS应用程序效劳器端模块几乎全部由JSP文件组成〞i1,这种以JSP文件为中心的设计形式就叫Model1.设计形式Model1的构造图如图3-1所示。图3-1Model1构造图ModelI的根底是JSP文件.首先JSP文件接收到阅读器的Request恳求,从I-ITTP的恳求中提取参数,调用相应的业务逻辑处理会话,其中相应的业务逻辑处理单元或者数据库访问操作等也是JSP文件,也可能会借助一定的JavaBean类来处理一局部比较复杂的业务逻辑,但是大量的业务逻辑仍然在JSP文件中处理。此外,JSP文件或者JavaBean类都可以直接对数据库进展操作。最后生成文档。一系列这样的JSP文件形成一个完好的Model1应用。在ModelI中,JSP页面也可以单独响应恳求并将处理结果返回客户。这个模型简单易用,可以可以很好的满足小型应用的需要。但是从工程化的角度考虑,它也有一些缺乏之处:(1)应用的实现一般是基于过程的,一组JSP页面实现一个业务流程,假如要进展改动,必须在多个地方进展修改。这样非常不利于应用扩展和更新。CZ)由于应用不是建立在模块上的,业务逻辑和表示逻辑混合在JSP页面中没有进展抽象和别离。所以非常不利于应用扩展和改动。大量使用Model1,常常会导致页面被嵌入大量的Java代码。特别是当需要处理的业务逻辑比较复杂时,情况会变得非常严重。对于Java程序员来说,这不算大的问题,但假如开发者是前端界面设计人员,那么代码的开发和维护将出现困难。在任何工程中,这样的形式总会导致定义不清的响应和工程管理的困难,因此不能满足大型应用的要求。为理解决Model1紧祸合、复用性差和维护本钱高的问题yz},在开发大型系统中必须采用另外一种设计形式,这就是Model2v3.2.2Web设计形式Model2Model2表示的是基于MVC形式的框架(如图3-2所示[13b。"Model〞代表应用的业务逻辑。"View〞代表应用的表示面(由JSP页面产生)."Controller〞是提供给用的处理过程控制,负责承受客户端web阅读器发送来的所有恳求,并根据处理意见的不同结果,转发到对应的JSP页面实如今阅读器客户端的显示。通过这种设计模型把应用逻辑、处理过程和显示逻辑分成不同的组件实现,这些组件可以进展交互和重用,从而弥补了Mode11的缺乏。Model2具有组件化的优点从而更易于实现对大规模系统的开发和管理,但是开发这样的系统要比简单的JSP开发复杂的多,它需要更多的时间学习和掌握。这就要求开发人员必须以基于组件的方式考虑和设计应用系统的构造。原来通过建立一组JSP页面就能实现的应用如今需要对功能模块重新划分,需要变成多个步骤地设计和实现过程。其次的页面和组件必须在这种框架下实现,所以相应的增加了附加开发的工作。图3-2Model2构造图由构造图可以看出,该设计形式的优势是很明显的。首先,它将计算和显示清楚地分开了,在JSP页面上没有出现处理过程,在业务逻辑或商业逻辑中没有数据格式。这种别离的另一个好处是程序员可以专注于后台逻辑单元代码的开发,HTML编写者可以专注于用户界面JSP的开发。其次控制器负责控制转向。在页面和逻辑中不会出现任何决策,这就进步了一个应用程序的性能和可扩展性,因为恳求可以被导向架构的不同的组件,甚至是不同的效劳器。Model2详细实现了MVC设计形式的大体思想。MVC形式在交互式系统开发中具有强大的优势,因此被开发人员逐步引入J2EE体系之中,成为J2EE进展交互式应用开发时,特别是Web应用开发时的一个非常重要的设计形式。下面就对MVC设计形式进展详细介绍。}r}n根本设计形式MVC(Model-View-Controller)设计形式,即模型一试图一控制器形式,源·传统的面向对象语言smallTalk-80,早期它主要用于设计用户界面,是一个经典泊设计形式114]。由于使用该形式设计的界面具有多窗口、交互式等特点,在20世燕80年代初期被许多系统采纳,如Macintosh和Windows。随着软件设计形式的出现和完善,以及面向对象技术的成熟,MVC设计形式逐渐成为一种较完善的面卜对象设计形式,它所应用的范围也不再局限于界面设计。MVC设计形式是设计弓互式应用时广泛采用的一种设计形式,也是J2EE平台推荐在开发Web应用时使的设计形式。Sun公司推出的J2EE平台是一个面向对象的、完好的大型应用开蛋平台,MVC形式可以有效的进步分布式应用系统中组件的重用才能和事务控制白灵敏性,分析系统的用户界面、业务逻辑以及业务流程控制。在互联网快速开展今天,MVC形式己被广泛应用在各企、事业ERP、电子商务和电子政务等应用a统的开发中【15】MVC形式的根本思想是将应用数据和业务逻辑、数据的表示以及数据的交互相别离,即别离为不同的实体,主要三个局部:模型(Model)、视图CView)和控制器(Controller)。下面将对这三个组成局部进展详细介绍,图3一显示了MVC形式三个主要组成局部之间的流程构造【16】:图3-3MVC设计形式构造图MVC形式的处理过程为:首先控制器接收用户的恳求,并决定调用模型进展处理:然后模型根据用户恳求进展相应的业务逻辑处理,并返回数据;最后控制器调用相应的视图来格式化模型返回的数据,并通过视图呈现给用户【17】视图(View):表示模型的状态,是应用系统的外观。对应电子政务、电子商务等Web应用中的用户界面层,视图是应用程序中用户界面相关的局部,向用户提供友好的交互的界面。视图元素通过阅读器展示给用户,这些视图元素可以是HTML,也可以为XML或者柳plet。在MVC形式下视图不应当处理数据,视图主要工作仅限于对视图上数据的采集和处理以及承受用户的恳求,然后将用户的请求提交给控制器来处理以及向用户显示所获得的返回信息,当模型层返回数据发生变化时,视图也要自动更新,以便维持系统数据的一致性【18】模型(Model):业务逻辑层,处理业务逻辑和数据访问,业务流程和业务规那么都属于模型局部。模型承受视图的恳求数据,然后将处理的结果返回给视图,是用来实现详细功能的模块,是应用程序的主体局部。模型表包含了应用程序的核心,它封装了应用程序的数据构造和事务逻辑,集中表达了应用程序的状态,但它并不理解视图和控制器的信息。一个模型可以为多个视图提供数据,多个视图的不同显示通过Control层的控制调度实现[19].此外,所有属于系统持久化状态的数据都应该保存于模型对象中。一个模型的接口提供了访问和更新模型状态以及执行封装在模型中的复杂进程的方法。当模型发生变化时模型就会通过控制器通报视图。控制器(Controller):流程控制层,定义了系统的行为,所实现的行为包括业务处理和修改模型状态。控制器是联络模型和视图之间的纽带,控制模型与视图之间的交互过程。一方面控制器接收来自系统视图层的用户参数信息,并将其组装转换为系统模型层所可以解释的数据或者事务对象,同时控制器也将识别用户的动作,将其解释为对Model层的方法调用。另一方面,控制器会将Mode!层的逻辑处理结果,调用适当的View层组件向用户显示反应信息。在MVC形式中,控制器是一个中介者的身份,以用户的恳求为线,将模型和视图连接在一起,它不作任何数据处理。构建基于MVC的模型框架的核心就是设计有效的控制器。在MVC形式中,存在三个非常重要的关系:View和Model之间的关系、Controller和Model之间的关系以及Con}oller和View之间的关系。视图和模型之间有如下关系:当模型中的数据状态发生了变化,模型会通知视图数据有更新,视图那么重新恳求数据,正确显示模型数据;每一个视图在显示给用户时,都要求去查询模型或者访问模型中封装的方法和数据,一个模型可以对应多个视图,同时,也可以为一个模型创立新的视图而无需修改模型。而控制器和模型之间的关系相比照较简单,即控制器只负责向业务处理模型转交用户的恳求。控制器和视图之间的关系为,视图可以向控制器提交用户的恳求,而控制器可以选择显示的视图,也可以决定视图应该显示什么,同时也可以决定是否承受视图提交的用户恳求。在Web系统开发中,例如电子政务系统开发,采用MVC形式,可以将应用逻辑、处理过程和显示逻辑分成不同的组件来实现。通过三者之间的别离到达层次-间的松散祸合,以实现代码重用和易于修改,进步系统得灵敏性、重用性和可维护性,适应了日益复杂的Web应用系统的设计要求12o}zi1e3.2.4MVC核心组成形式GoF在他们的著作中归纳总结了23个经典的设计形式,每一个设计形式都给出了完美的解决方案。相对而言,MVC是一个较高层次的形式,它是由几个更基本的设计形式组合而成。与MVC亲密相关的主要有三个形式:观察者形式<Observer)、策略形式(Strategy)和组合形式(Composite)。观察者形式(Observer)定义了对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。某一个数据可能有多种显示的方式,并且可能同时以这几种方式显示,一旦这个数据发生了更改,它的各种显示方式应该清楚这一状况并做出相应的调整。观察者形式描绘的这种关系也被称为发布一订阅(}ubGsh-subscribe)形式,它的两个重要对象分别称为目标和观察者。一个目的可以有任意多个依赖于它的观察者,一旦目的的状态发生变化,所有的观察者都将得到通知,每一个观察者再次查询目的的状态使之与目的保持同步。MVC的Model和View之间的关系就如同目的和观察者之间的关系。Model-View的关系实际上被描绘为Observer的设计形式。观察者形式应用非常广泛,尤其是在管理信息系统领域。例如,在一个电子政务应用系统中,普通用户和系统管理员查看信息的界面就不同,虽然都是显示的政务信息,但由于系统管理员拥有的权限更大,可查看的内容也更多。在这样的场合,使用Observer形式可以降低系统信息和显示页面之间的祸合度,把界面表示和数据别离,这样的优点就是,增加一个新的查看页面时,无需修改原系统。策略形式(Strategy)定义了一系列的算法,把它们一个个封装起来,并且使它们可以互相交换,使得算法可独立于使用它的客户而变化。MVC可以在不改变View的情况下改变View对用户输入的响应方式,这对于经常需要更改响应逻辑的系统来说是非常重要的。MVC把响应逻辑封装在Controller中,对用户输入的响应不是视图来实现的,而是由一个抽象的Controller类的不同子类各自独立地实现。更换不同的〔'ontroller实例就可以改变View对用户输入的响应策略。MVC的View-Controller之间的关系就被描绘为Strategy形式。使用策略模式加强了系统的灵敏性和可维护性,虽然应用策略形式增加了维护对象的数目(一个抽象类的子类数目),但相对于它的优点,付出这些代价是值得的。组合形式(Composite)将对象组合成树形构造以表示“局部·整体〞的层次结构,它使得用户对单个对象和组合对象的使用具有一致性。组合形式在MVC中的一个重要应用就是View可以组合嵌套。用户可以使用简单的视图组件组合创立复杂的视图组件。它的核心思想就是对容器(组合的对象)和内容一视同仁。应用组合形式的典型例子就是计算机中的文件夹.在一个文件夹下可以有文件和其它文件夹,在子文件夹中还可以有其它文件或子文件夹。虽然文件夹和文件实际上是两种截然不同的东西,但两者都可以放在文件夹中.在一个文件夹中,文件和文件夹被视为同一种类。3.2.5电子政务系统采用垂于}2EE的MVC形式的理由通过上面的分析可以得知,MVC已经得到广泛的市场认可,特别是在J2EE平台推出后,MVC设计形式逐渐成为开发BIS系统的主要形式,正是由于MVC在设计开发交互式应用的优秀特点,逐渐成为J2EE架构下推荐使用的开发Web应用程序的方法1}1.下面将结合电子政务系统的需求特点,介绍MVC设计形式在电子政务系统开发中的优势:{1)设计明晰:MVC形式集中采用了分层的软件设计思想,将显示层与数据逻辑处理层互相别离,同时将程序流程控制作为单独的一层别离出来,各层次之间相互独立,可以使得不同程序开发人员可以关注于不同的层次模块,而没有必要同时考虑层次模块和整体架构。用模型中的方法来操作他的数据和状态,很容易理解如何来控制模型的行为。当设计一个应用时,这种方式将使整个程序更加容易执行和维护I}l。电子政务系统本身是一个庞大的系统,在架构设计开发过程中必须将整体架构不断细分,并由不同的开发人员参与开发不同的功能模块,这就需要尽可能的降低各个模块的祸合度,尽可能使不同开发人员关注于自己负责的模块。MVC形式正是可以满足这种设计思想。(2)模块互相独立,藕合度低,增加模块有效性。MVC形式很好的解决了软件工程中如何使软件系统各模块之间最大限度的降低其复杂的祸合关系,以及系统显示逻辑和业务逻辑之间的矛盾(即用户界面的多变性和业务逻辑的相对不变性),尽可能的进步了系统的可维护性和可扩展性。模型、视图、控制器三者的互相独立,使得我们改变其中一个而不会影响其他两个(或者影响甚小),据此可以构造良好的松藕合构件。电子政务系统在开发过程中,需求可能不断变化,这就要求系统模块间尽可能互相独立并具有较强的有效性,防止重复开发。在MVC设计形式中,模型、试图、控制器任何组件甚至整个模块都可以换进换出,任何一者的改变都不会影响到其他方面,不同的组件开发可以同时进展。(3)易于结合J2EE,合理使用其组件及容器技术。J2EE本身向开发人员提供了成熟的组件及容器,可以方便的解决电子政务系统开发中所遇到的各种问题。MVC形式与J2EE平台架构同样采用分层的思想,可以使用J2EE所提供的不同组件担任MVC不同层次中的各个角色,如利用JSP技术及应用效劳器容易担任View层角色,使用Servlet技术担任控制器角色,使用JavaBean或者EJB担任逻辑模型层角色等等,并且这些组件和解决方案都已成熟,可以加快系统开发进度。(’)可以提供强大的用户界面。MVC形式中所有的模型和视图都是由控制器连接和调用的,控制器的这种桥梁枢纽作用使得它可以根据用户不同阶段的不同需求选择不同的模型进展处理,并选择不同的视图将处理结果显示给用户,极大进步了系统的灵敏性。一个模型可以拥有多个视图或者说多个视图可以共享一个模型。多个视图可以提供多种数据显示方式,以满足不同用户的需求。变化传播机制可以确保所有相关的视图和其模型到达同步,当然这一切都在于控制器的协调。用户界面与模型方法调用组合起来。发送给模型的“标准〞命令,都是由单个用户行为触发的。这就使得程序可以使用更加明晰友好的界面发布给用户。电子政务系统中包括不同的效劳功能,不同效劳所面向的用户群体也各不一样.因此一个完善的电子政务系统应该为不同的用户全体提供不同效劳的同时,也应该提供不同的用户使用界面,此外J2EE平台所提供的JSP控件技术,也为开发友好用户界面提供强大的支持。(5)模块可移植性强,易于维护。模型的相对独立性使得它很容易被移植到新的平台工作,很容易被改变业务规那么而不影响(或者说这种影响甚小)视图和控制器。此外在MVC形式中视图与模型没有必要的联络,都是通过控制器发生关系。假如要增加新类型的用户界面,只需要改动相应的视图和控制器即可,而模型那么无须发生改动。基于32EE平台的改良MVC的研究及其应用,并可以移植到其他具有类似电子政务系统,仅仅需要对控制器进展新的修改。MVC形式提供了一种隔离功能层的机制,降低了层与层之间的祸合,控制器和视图可以随着模型的扩展而进展相应的扩展,只要保持一种公共的接口,控制器和视图的旧版本也可以使用。电子政务系统本身存在着功能不断变化的特点,这就需要尽可能的防止重复开发,降低系统运行维护本钱。通过MVC形式以及J2EE平台的组件技术,可以很好的解决这个问题,降低开发及维护本钱。通过以上的阐述可以看出,MVC形式和12EE平台可以成功的解决电子政务系统开发过程中所产生的各种问题,通过将应用逻辑、流程控制和显示逻辑的层次别离到达松散祸合,以实现系统模块的独立性,增强代码重用,结合J2EE组件技术提供强大友好的用户界面,降低系统祸合度,增强可维护性,最大限度地防止重复开发,适应了日益复杂的Web应用程序的设计要求,lf}}}l,同时也满足了电子政务系统的设计要求。3.3用Struts实现MVC设计形式3.3.E实现MVC设计形式的框架在软件设计领域,框架(Framework)是设计形式的特例化。相对于框架,设计形式更加抽象,而且描绘的是更小的体系元素.MvC设计形式成功地解决了大型应用系统开发过程中诸多关键问题,因此MVC设计形式得到了市场的认可。因此基于MVC形式应用框架空前繁荣,出现了各种不同的应用框架。下面对几种比较流行的框架作简单的介绍:(1)Struts是八pache软件基金下Jakarta工程的一局部(}l,在结合J2EE提供的各种组件的同时,结合了JSP技术、JSP自定义标签和Servlet技术,在效劳器端实现了MVC架构的Web应用架构.Struts工程最初由CraigMcClanahan在2fl00年5月创立,它的原始开发目的就是提供一个开放源码的架构(framework)使得开发一个表现层和逻辑数据层别离的web应用程序更加轻松简便。Struts框架是MVC形式的实现,目的在于使Web应用程序的表示层可以从业务层和数据层中抽象出来,更易于系统开发.它由一组互相协作的类、Servlet和标记库等组成。Struts提供了自己的控制器,并且整合一些技术去实现它的View和Modele在Struts中,模型通过一系列的JavaBean来实现。Struts允许用户定义自己的业务Bean来管理应用系统的数据,而且它本身也提供了一种在View和Model间保持数据的JavaBean}FormBean}}toStruts的视图主要使用JSP建立,由于Struts包含了一组丰富的标记库(TagLabrary),大大简化了页面的开发。Struts的控制器那么主要是它自身提供的ActionServlet,通过Struts的配置信息进展工作。如今网络上越来越多的有关Struts的信息我们可以知道它的拥护者的队伍正在逐步壮大,Struts建筑于跨平台的Java技术之上的优点吸引了一些应用效劳器厂商将Struts集成到他们的产品中去,还有厂商提供开发Struts的专用工具,由此更加扩大了Struts的影响。Struts拥有庞大的开发团队,由于没有一定的产品发布时间的限制,使得开发人员有足够的时间考虑到方方面面的因素,并在产品正式发布之前进展长期的稳定测试,在最大程度上保证了Struts发布版本的质量。这也是本文重点介绍和采用Struts框架的重要原因。对于Struts框架的详细构造及工作原理将在下文中重点介绍。(2)JavaServerFaces(JSF)是为基于Java的Web应用提供的一种用户界面开发框架,其设计目的是为人们更加轻松地开发和维护那些运行在效劳器端而将用户界面呈现给客户端的Java应用程序.它是ICPCJavaCommunityProcess)制定的一个Web应用框架的标准。JSF通过一个Servlet控制器提供Web应用程序生命周期的管理,提供了一组标准的、可重用组件来构建用户界面。ISF有良好定义的恳求处理生命周期和丰富的组件层次构造,旨在推动基于Jav。的Web界面开发的简易性t}}eJSF具有逻辑和表示严格别离的组件体系构造,用户只需要开发用户界面,设置事件处理器就间以完成Web应用的开发,而不必关心实现的细节。与Struts相比较,两者都是基于J2EE平台,不同的是JSF是一种事件驱动型的组件模型,侧重于Web表现层,并提供了丰富的页面开发控件。而Struts只是单纯的MVC形式框架,注重于架构和控制。(3)JATO应用程序框架是iPlanet应用程序框架的旧名。它是一个成熟的、强大的,基于JZEE标准的面向于开发Web应用程序的应用框架。结合了显示字段、应用程序事件、组件层次和以页面为中心的开发方法、以及MVC和效劳到工作者tService-to-Workers)的设计形式等概念。自2000年6月发布后,JAT900框架就己经在众多的企业web中得到应用。创立JATO的主要目的还是满足J2EE开发者快速建立中、大、超大规模的web应用程序的需要。应用程序规模越大、系统预期存在时间越久,变化越频繁,越可以凸现JATO的作用。JATO可适用于中、大、超大规模的WEB应用。但是它也不是一个企业层的应用框架,也就是说它不会直接提供创立EJB,WebServices等企业层组件的方法,但用它可以构造出访问企业层组件的客户应用。JATO框架实现了MVC形式三层,定义了正式的视图和模型实体之间的关系。它提供了一个高级的逻辑控制器角色处理控制逻辑,JATO框架的视图层整合了JSP技术,但已不是单纯意义上的JSPoJATO框架为开发者提供了其它框架无法比较的扩展性。JATO框架对于开发者使用J2EE中的设计形式进展企业web应用程序的开发提供有力的支持,它本身就是一个基于设计形式的框架,在其根底之上架构师可以随意接入应用的其它组成局部。对于Web应用程序的开发者,应用JATO进展开发会更加简易,对于架构师,JATO平台上的程序将会是一个描绘清晰的设计范例,用一种定义良好的方法将其它企业层和构件整合在一起。这种框架的适应范围大,既提供了底层接口,也有立即可用的组件;具有与客户端RAD开发工具相似的开发概念,如以页为中心(等同于VB的FORM),事件处理等;对大型的应用支持较好。但是目前它仍然不是业界标准,其次目前还没有开发工具的支持I}1,这也是JATO框架严重缺陷之一。3.3.2Struts框架构造一种好的设计思想需要一个好的实现框架作为载体来表达,struts就是一个基于MVC形式的Web应用程序的框架,现已逐渐成为开发Web应用程序的主流框架(31]oJakarta是Apa}bcSoftware的一个研究开发Java产品的工程,主要是为Java开发者提供各种开发工具以及软件框架[3q,Struts就是其中的一个开源工程。它的创立者希望可以改良和进步Servlet,JSP、标签库,以及面向对象的技术水平。Struts这个名字来源于在建筑和旧式飞机上使用的支撑金属框架.目的是为了帮助开发人员减少运用MVC设计模型开发Web应用的时间。在利用JSP,Servlet的优点建立可扩展的J2EEWeb应用时Struts是非常适宜的选择.Struts是一个WebFramework,它继承了MVC形式的各项特点,并根据JZEE的特点,作了相应的变化和扩展。它通过把一组互相协作的类Servlet,以及标签库结合在一个统一的框架中,将MVC形式所具有的“别离业务逻辑和显示逻辑〞的才能发挥到了极点,完全实现了Mode12,并很好的帮助】ava开发人员开发J2EEWeb层.Struts本质上就是Mode12的根底上实现的一个MVC架构。它只有一个中心控制器,采用XML定制转向,使用Action处理逻辑。Struts由Servlet、标签库、实用类库等构成,提供了自己的控制器,同时整合了其它的一些技术实现Model层和View层。Struts框架完全采用Java语言编写,在编写时调用了标准的J2EEAP1,因此具有“一次编写,随处运行〞的优点。同时,它继承了MVC设计形式的各种特性,提供了对开发MVC系统的底层支持,其中对应用系统的用户界面显示和数据,的后端业务逻辑代码进展了抽象,并且整合了Servlet与JSP在Web应用系统开发上的优势。采用Struts应用框架,开发人员可以在J2EE平台上方便快捷的开发出基于MVC设计形式的Web应用。通过使用Struts框架,程序员不需要再花费大量的时间在整个应用上,他们可以集中精力编写应用程序业务逻辑和表示层代码,其它事情都交给Struts框架负责而无需关心。这将大大加速工程的开发进程,并降低了学习与开发web应用的难度.Struts应用框架是MVC形式在JzEE平台的Web层上的详细实现[33][34][35]eMVC最显著的特点就是强迫性的将应用系统划分为三个主要组件:模型、视图、控制器,每个组件各自处理自己的任务。通过这种明确的划分,MVC设计形式为构建可重用、易扩展的程序代码打下了一个坚实的根底。Struts正是一种基于MVC设计形式的优秀应用框架,Struts框架构造图如图3-4所示。图3-4Struts构造图和其他的Java架构一样,Struts也是面向对象设计,将MVC形式〞别离显示逻辑和业务逻辑.,的才能发挥得淋漓尽致【36】。Structs框架的核心是一个弹性的控制层,基于如JavaServlets,JavaBeans,ResourceBundles与XML等标准技术,以及JakartaCommons的一些类库【37】。Struts有一组互相协作的类(组件)、Serlvet以及jsptaglib组成。基于struts构架的web应用程序根本上符合JSPMade12的设计标准,可以说是一个传统MVC设计形式的一种变化类型I}leStruts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)I391。在模型层,Struts可以很容易的与数据访问技术相结合,如JDBCIEJB,以及其它第三方类库,如HibernateIiBAT'IS,或者ObjectRelationalBridge(对象关系桥)。在视图层,Struts可以与JSP,包括JSTL与JSF,以及Velocity模板,XSLT与其它表示层技术【40】结合使用.下面将详细介绍Struts针对于MVC各个局部的实现细节及作用。}1)模型层(Model)组件[dayMVC系统中的Model局部从概念上可以分为两类:系统的内部状态和改变系统状态的动作。Struts为Model局部提供了Actio.和ActionForm对象。所有的Action处理器对象都是开发者从5trnts的Action类派生的子类。Action处理器对象封装了详细的处理逻辑,调用业务逻辑模块,并且把响应提交到适宜的view组件以产生响应。struts提供的AMionForm组件对象,可以通过定义属性描绘客户端表单数据。开发者可以从它派生子类对象,利用它和struts提供的自定义标记库相结合,可以实现对客户端的表单数据的良好封装和支持。Action处理器对象可以直接对它进展读写,而不再需要和request.response对象进展数据交互.通过ActionFon〞组件对象实现了对View和Model之间交互的支持。Struts通常建议使用一组JavaBean表示系统的内部状态,根据系统的复杂度也可以使用像EntityE1B和SessionLJB等组件来实现系统状态。Struts建议在实现时把“做什么〞(Action)和“如何做〞(业务逻辑)别离。这样可以实现业务逻辑的重用。在模型层,Struts可以很容易的与数据访问技术相结合,包括JNDhJDBC和J1J1Jo(2)视图层〔View)组件stets应用中的view局部主要是通过JSP技术实现的[42],同时提供了Struts标签库和自定义的标记库以供使用。Java开发者很容易在JSP当中过度使用Java小程序,直接嵌入条件业务逻辑和循环。MVC解决了这一问题,通过把复杂的处理别离到Model和Controller组件中,从而使JSP本身更小,这显然大大简化并加速了开发、测试及维护的工作。为实现这个目的,Struts通过向用户提供可以进展简单逻辑处理的标签库,这些标签可以是标准的JSP标签或客户化标签。通过这些自定义标记可以非常好地和系统的Model局部交互,实现和Model局部中的ActionFo.的映射,完成对用户数据的封装,同时这些自定义标记还提供了像模板定制等多种显示功能。从而使得在这些JSP文件中没有业务逻辑,也没有模型信息,只有负责显示结果的标签。此外通过使用标签,Struts还简洁的解决了国际化用户界面问题。视图也包括Ac}ionFormBeanoActionFormBean具有JavaBean的常规方法,还包含一些特殊的方法,用于验证HTML表单数据以及将其属性设置为默认值。视图将模型的当前状态展示给用户,详细的显示方法由视图负责,因此一个模型可以选择多个不同视图。在模型状态改变后,通过模型和视图之间的协议,视图得知这种改变并修改自己的显示。对于用户的输入,视图将它们交给控制器处理。口)控制器(Controller)组件控制器承受客户端的恳求,决定执行何种业务逻辑功能来响应恳求,然后委派适当的视图组件来显示更新后的用户界面。在Straits中ContraHer功能由ActionServlet和Ac}ionMapping对象构成:核心是一个Servlet类型的对象ActionServlet,它用来承受客户端的恳求。ActionServlet包括一组基于配置文件生成的ActionMapping对象,每个ActionMapping对象实现了一个恳求到一个详细的Model局部中Actian处理器对象之间的映像。Struts框架的处理流程清楚的表达了MVC系统的特点,StrutsControllerAction5ervlet处理客户恳求,利用配置的ActionMapping对象把恳求映像到Actian处理器对象进展处理。Action处理对象访问ActianFon.中的数据,处理和响应客户恳求,它还调用后台的Bean组件,这些组件封装了详细的业务逻辑。由此可以看出ActionServlet是Controller层的核心组件,在MVC中扮演的是中央控制器的角色。ActionMapping那么制定了不同业务逻辑或者流程的运行方向,而转向的根据就是struts-oonfig.xml文件的配置信息,其中struts}onfig.xml文件也可以被称作配置管理器[43j3.3.3Struts框架核心包和组件整个Struts大约有15包,近200个类所组成[a4}asj,而且数量还在不断的扩展。在此不能一一介绍,只能列举几个主要的简要的介绍一下。下面将简单说明目前StrutsAPI中根本的几个包,包括actlon,actions,taglib等。其中action是整个Strutsframework的核心。(1)org.apache.struts.action二根本上,控制整个Strutsframework的运行的核心类、组件都在这个包中,比如上面提到的控制器AdionServlet,Action,ActionForm,ActionMapping等等。Struts1.1比1.0多了DynaActionForm类。增加了动态扩展生成FonmBeaa功能。这个包的主要作用是提供客户的恳求和业务逻辑处理之间的特定适配器转换功能,而1.0版本中的局部动态增删FromBean的类,也在Strutsl.l中被Action包的DyaaActionForm组件所取代。这不是一个包,而是一个客户标签类的集合。包括BeanTags*HTMLTags,LogicTags,NestedTags,TemplateTags这几个用于构建用户界面的标签类。Struts为了更好支持webapplication的应用,统一了一些常用效劳的支持,比如ConnectionPool和MessageSourcxaStruts1.1framework中增加了validatorframework,用于动态的配置from窗体的验证。图3巧显示了以上几个lib包的关系[42]。图3-5Struts关键lib包关系图Struts提供了丰富的lib包供程序开发人员使用,通过使用lib包,可以非常容易的解决编程实现中常遇到的问题,而且这些lib包都是非常成熟的,因此大大降低了系统开发的难度,减少了系统存留bug的可能性,因此系统的可靠性也随之增强。Lib包只是提供理解决详细细节问题的方法和类,并没有提供控制流程的作用,在Stntts框架中详细实现流程控制、转向、影射等作用的那么是各种组件,不同的组件具有不同的作用,分工明确,而且组件和组件之间接口明晰,藕合度最小化。表3-1列出了Struts框架中的关键组件。表3-1Struts关键组件表┌───────┬─────────────┐│ActionSerdlet│控制器│├───────┼─────────────┤│ActionClass│包含事务逻辑│├───────┼─────────────┤│ActionForm│显示模块数据│├───────┼─────────────┤│ActianMapping│帮助控制器将恳求映射到操作│├───────┼─────────────┤│ActionForward│用来指示操作转移的对象│├───────┼─────────────┤│ActionError│用来存储和回收错误│└───────┴─────────────┘(1)ActionServletActionServlet继承自javax.servlet..Servlet类,是Struts框架的核心组件,它充当着整个框架的控制器。控制器AdionServlet主要负责将的客户恳求信息组装后,根据配置文件的指定描绘,寻找相应的业务逻辑单元,转发到适当的处理器。像所有的servlet一样,它生存在容器中,比方Tomcat等应用效劳器。当容器启动时读入配置信息,通知容器应该装入那些类文件。ActionServlet是由一组ActionMapping{org.apache.struts.action.AetionMapping)对象来配置组成的,每个ActionMapping对象实现一个恳求到一个详细Action(org.apache.struts.action.Action)类之间的映射。一个标准的Servlet是由web.xml中的servlet-mapping标记设定的.在应用Struts的web.xml文件中都应该具有如下配置信息。<servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.AdionServlet</servlet-claas><init-param><param-name>config</param-name><paramvalue>/WFrB-INF/struts-ooafig.xml</param-value></initparam><load-on-stratup>0</load-on-startnp></servlet><servlet-mapping><servlet-name>action<servlet-name><url-pattem>*.do</url-patterns></serVlet-mapping>.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论