论基于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)发出HTTP请求(HTTPRequest),并将请求参数传送给Web服务器。Web服务器主要负责商业逻辑处理,接受HTTP请求参数,调用响应的方法进行逻辑运算,并可以根据用户需要访问数据库服务器(DataBaseServer)。在商业逻辑处理完毕后,Web服务器将处理结果通过H1TP响应(HTTPResponse)发送给浏览器显示给最终用户。数据库服务器(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的请求中提取参数,调用相应的业务逻辑处理HTTP会话,其中相应的业务逻辑处理单元或者数据库访问操作等也是JSP文件,也可能会借助一定的JavaBean类来处理一部分比较复杂的业务逻辑,但是大量的业务逻辑仍然在JSP文件中处理。此外,JSP文件或者JavaBean类都可以直接对数据库进行操作。最后生成HTTP文档。一系列这样的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功能。(2)org.apache.struts.actions这个包的主要作用是提供客户的http请求和业务逻辑处理之间的特定适配器转换功能,而1.0版本中的部分动态增删FromBean的类,也在Strutsl.l中被Action包的DyaaActionForm组件所取代。(3)org.apache.struts.taglib这不是一个包,而是一个客户标签类的集合。包括BeanTags*HTMLTags,LogicTags,NestedTags,TemplateTags这几个用于构建用户界面的标签类。{4)org.apache.struts.utilStruts为了更好支持webapplication的应用,统一了一些常用服务的支持,比如ConnectionPool和MessageSourcxa价)org.apache.struts.validatorStruts1.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.http.HttpServlet类,是Struts框架的核心组件,它充当着整个框架的控制器。控制器AdionServlet主要负责将HTTP的客户请求信息组装后,根据配置文件的指定描述,寻找相应的业务逻辑单元,转发到适当的处理器。像所有的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>

温馨提示

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

评论

0/150

提交评论