《毕业论文外文翻译-Struts——一种开源MVC的实现.doc》由会员分享,可在线阅读,更多相关《毕业论文外文翻译-Struts——一种开源MVC的实现.doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、附件1:外文资料翻译译文Struts一种开源MVC的实现这篇文章介绍Struts,一个使用servlet和JavaServerPages技术的一种Model-View-Controller的实现。Struts可以帮助你控制Web项目中的变化并提高专业化。即使你可能永远不会用Struts实现一个系统,你可以获得一些想法用于你未来的servlet和JSP网页的实现中。简介在小学校园里的小孩子们都可以在因特网上发布HTML网页。然而,有一个重大的不同在一个小学生和一个专业人士开发的网站之间。网页设计师(或者HTML开发人员)必须理解颜色、用户、生产流程、网页布局、浏览器兼容性、图像创建、JavaSc
2、ript等等。设计漂亮的网站需要做大量的工作,大多数Java开发人员更注重创建优美的对象接口,而不是用户界面。JavaServerPages(JSP)技术为网页设计人员和Java开发人员提供了一种联系钮带。如果你开发过大型Web应用程序,你就理解“变化”这个词语。“模型-视图-控制器”(MVC)就是用来帮助你控制变化的一种设计模式。MVC减弱了业务逻辑接口和数据接口之间的耦合。Struts是一种MVC实现,它将Servlet2.2和JSP1.1标记(属于J2EE规范)用作实现的一部分。你可能永远不会用Struts实现一个系统,但了解一下Struts或许使你能将其中的一些思想用于你以后的Serv
3、let和JSP实现中。2、模型-视图-控制器(MVC)JSP标签只解决了我们问题中的一部分。我们依然有验证、流控制、以及更新应用程序结构的问题。这就是MVC从哪儿来以及来干嘛的。MVC通过把问题分成三类来帮助解决一些与单模块相关的问题: Model(模型)模块包括应用程序功能的核心。模型封装着应用程序的各个结构。有时它所包含的唯一功能就是结构。它对于视图或者控制器一无所知。 View(视图)视图提供了模型的演示。它是应用程序的外表。视图可以进入模型获得者,但是它对于设置者一无所知。除此之外,它对于控制器也是一无所知。视图仅仅当模型发生改变的时候才被通知。 Controller(控制器)控制器对
4、于用户的输入做出反应。它创造和设置模型。MVC模型2Web给软件开发人员带来了一些独特的挑战,最显著的就是客户端和服务器端的无结构连接。这种无结构连接行为使得模型很难知道视图的改变。在Web上,浏览器必须重复询问服务器端以此来发现应用程序结构的改变。另外一个显而易见的改变就是相对于模型或者控制器,视图采用了不同的技术。当然,我们可以使用Java(或者PERL、C/C+或之前的其他代码)代码来生成HTML。这种方法存在一些弊端: Java程序员应该开发服务,而不是HTML。 布局的改变将需要改变代码。 服务的客户将有能力去创造一些页面去满足他们的一些特殊需求。 页面设计人员将不能直接介入到页面的
5、开发中。 嵌入在代码中的HTML将会变得丑陋。Struts,MVC2的一种实现 Struts是一组相互协作的类、servlet和JSP标记,它们组成一个可重用的MVC2设计。这个定义表示Struts是一个框架,而不是一个库,但Struts也包含了丰富的标记库和独立于该框架工作的实用程序类。Struts概览 客户端浏览器一个来自客户端浏览器的HTTP创建一个事件。Web容器将会用一个HTTP响应来作出响应。 控制器控制器接收来自浏览器的请求,并决定发送请求到何处。就Struts而言,控制器就是一个以servlet执行的一个命令设计模式。struts-config.xml文件配置控制器。 业务逻辑
6、业务逻辑更新模型的状态,并帮助控制应用程序的流。就Struts而言,这就是通过作为实际业务逻辑“瘦”包装的Action类完成的。 模型状态模型代表了应用程序的状态。业务对象更新应用程序的状态。ActionFormbean在会话级或请求级表示模型的状态,而不是在持久级。JSP文件使用JSP标记读取来自ActionFormbean的信息。 视图视图就是一个JSP文件。其中没有流程逻辑,没有业务逻辑,也没有模型信息-只有标记。标记是使Struts有别于其他框架(如Velocity)的因素之一。Struts详细资料ActionServlet类你还记得使用函数映射的日子吗?你会映射一些输入时间到一个函数
7、的一个指针。如果你很老练,你可以把这些配置信息放进一个文件里并且在运行时加载该文件。函数指针装扮了在C语言结构化程序设计中的旧时光。现在日子好过多了,自从我们有了Java技术、XML、J2EE等等之后。Struts控制器是一个映射事件(事件通常是一个HTTPpost)到类的一个servlet。猜猜怎么着-控制器用一个配置文件以致于你不必非硬编码这些值。生活变了,但方法依然如此。ActionServlet是MVC实现的命令部分并且它是框架的核心。ActionServlet(Command)创建并使用Action、ActionForm和ActionForward。正如前面所提及的,struts-c
8、onfig.xml文件配置Command。在Web工程创建期间,Action和ActionForm被扩展用来解决特殊的问题空间。文件struts-config.xml指导ActionServlet如何扩展这些类。这种方法有几个优点: 网页设计人员不必费力地通过Java代码来理解应用程序的流程。 当流程发生改变时Java开发人员不需要重新编译代码。 通过扩展ActionServlet命令函数可以被添加进来。ActionForm类ActionForm维持着Web应用程序的会话状态。ActionForm是一个必须为每个输入表单模型创建该类的子类的抽象类。当我说输入表单模型时,我就是说ActionFo
9、rm代表了一个由HTML表单设置或更新的一般意义上的数据。例如,你可能有一个由HTML表单设置的UserActionForm。Struts框架将会: 检查UserActionForm是否存在;如果不存在,它将会创建该类的一个实例。 Struts将使用HttpServletRequest中相应的域设置UserActionForm的状态。没有太多糟糕的请求.getParameter()调用。例如,Struts框架将从请求流中提取fname并调用UserActionForm.setFname()。 Struts框架在将在传递它到业务包装UserAction之前将更新UserActionForm的状态
10、。 在传递它到Action类之前,Struts将还会对UserActionForm调用validation()方法进行表单验证。备注:这样做通常并不明智。别的网页或业务对象可能有方法使用UserActionForm,然而验证可能不同。在UserAction类中进行状态验证可能更好。 UserActionForm能够维持一个会话级别。备注: struts-config.xml文件控制着HTML表单请求与ActionForm之间的映射。 多重请求会被映射到UserActionForm。 UserActionForm可被映射到诸如向导之类的多重页面的东西上。Action类Action类是一个围绕业务
11、逻辑的一个包装器。Action类的目的就是将HttpServletRequest翻译给业务逻辑。要使用Action,需重写process()原理。ActionServlet(命令)通过使用perform()原理将参数化的类传递给ActionForm。此外,没有太多讨厌的request.getParameter()调用。通过事件到达这里的时间,输入表单数据(或HTML表单数据)已经被从请求流中翻译出来并进入ActionForm类中。注:扩展Action类时请注意简洁。Action类应该控制应用程序的流程,而不应该控制应用程序的逻辑。通过将业务逻辑放在单独的包或EJB中,我们就可以提供更大的灵活性
12、和可重用性。考虑Action类的另一种方式是Adapter设计模式。Action的用途是“将类的接口转换为客户机所需的另一个接口。Adapter使类能够协同工作,如果没有Adapter,则这些类会因为不兼容的接口而无法协同工作。”(摘自Gof所著的DesignPatterns-ElementsofReusableOOSoftware)。本例中的客户机是ActionServlet,它对我们的具体业务类接口一无所知。因此,Struts提供了它能够理解的一个业务接口,即Action。通过扩展Action,我们使得我们的业务接口与Struts业务接口保持兼容。(一个有趣的发现是,Action是类而不是
13、接口)。Action开始为一个接口,后来却变成了一个类。真是金无足赤。)Error类UML图(图6)还包括ActionError和ActionErrors。ActionError封装了单个错误消息。ActionErrors是ActionError类的容器,View可以使用标记访问这些类。ActionError是Struts保持错误列表的方式。ActionMapping类输入事件通常是在HTTP请求表单中发生的,servlet容器将HTTP请求转换为HttpServletRequest。控制器查看输入事件并将请求分派给某个Action类。struts-config.xml确定Controller
14、调用哪个Action类。struts-config.xml配置信息被转换为一组ActionMapping,而后者又被放入ActionMappings容器中。(你可能尚未注意到这一点,以s结尾的类就是容器)ActionMapping包含有关特定事件如何映射到特定Action的信息。ActionServlet(Command)通过perform()方法将ActionMapping传递给Action类。这样就使Action可访问用于控制流程的信息。ActionMappingsActionMappings是ActionMapping对象的一个集合。Struts的优点 JSP标记机制的使用标记特性从JS
15、P文件获得可重用代码和抽象Java代码。这个特性能很好地集成到基于JSP的开发工具中,这些工具允许用标记编写代码。 标记库为什么要另发明一种轮子,或标记库呢?如果你在库中找不到你所要的标记,那就自己定义吧。此外,如果你正在学习JSP标记技术,则Struts为你提供了一个起点。 开放源码你可以获得开放源码的全部优点,比如可以查看代码并让使用库的每个人检查代码。许多人都可以进行很好的代码检查。 MVC实现样例如果你希望创建你自己的MVC实现,则Struts可增加你的见识。 管理问题空间分治是解决问题并使问题可管理的极好方法。当然,这是一把双刃剑。问题越来越复杂,并且需要越来越多的管理 Struts
16、的缺点 仍处于发展初期Struts开发仍处于初级阶段。他们正在向着发行版本1.0而努力,但与任何1.0版本一样,它不可能尽善尽美。 仍在变化中这个框架仍在快速变化。Struts1.0与Struts0.5相比变化极大。为了避免使用不赞成使用的方法,你可能隔一天就需要下载最新的Struts。在过去的6个月中,我目睹Struts库从90K增大到270K以上。由于Struts中的变化,我不得不数次修改我的示例,但我不保证我的示例能与你下载的Struts协同工作。 正确的抽象级别Struts是否提供了正确的抽象级别?对于网页设计人员而言,什么是正确的抽象级别呢?这是一个用$64K的文字才能解释清楚的问题
17、。在开发网页的过程中,我们是否应该让网页设计人员访问Java代码?某些框架(如Velocity)说不应该,但它提供了另一种Web开发语言让我们学习。在UI开发中限制访问Java有一定的合理性。最重要的是,如果让网页设计人员使用一点Java,他将使用大量的Java。在MicrosoftASP的开发中,我总是看到这样的情况。在ASP开发中,你应该创建COM对象,然后编写少量的ASP脚本将这些COM对象联系起来。但是,ASP开发人员会疯狂地使用ASP脚本。我会听到这样的话,“既然我可以用VBScript直接编写COM对象,为什么还要等COM开发人员来创建它呢?”通过使用标记库,Struts有助于限制
18、JSP文件中所需的Java代码的数量。无论你决定使用哪种类型的框架,你都应该了解你要在其中部署和维护该框架的环境。当然,这项任务真是说起来容易做起来难。 有限的适用范围Struts是一种基于Web的MVC解决方案,所以必须用HTML、JSP文件和servlet来实现它。 J2EE应用程序支持Struts需要支持JSP1.1和Servlet2.2规范的servlet容器。仅凭这一点远不能解决你的全部安装问题,除非使用Tomcat3.2。我用NetscapeiPlanet6.0安装这个库时遇到一大堆问题,按理说它是第一种符合J2EE的应用程序服务器。我建议你在遇到问题时访问Struts用户邮件列表
19、的归档资料。 复杂性在将问题分为几个部分的同时也引入了复杂性。毫无疑问,要理解Struts必须接受一定的培训。随着变化的不断加入,这有时会令人很沮丧。欢迎访问本网站。Struts的前景在软件开发的新时代事物都变化得很快。在最近5年里,我目睹过事物从cgi/perl,再到ISAPI/NSAPI、再到使用VB的ASP、一直到现在的Java和J2EE的变迁。Sun正在努力地适应JSP/servlet结构,就像他们通过Java语言和API在过去。你可以从Sun的网站获得新的JSP1.2和Servlet2.3规范的草案。此外,一个标准的JSP标记库正在出现。附件2:外文原文出自IBMSystemJour
20、nal,2006,44(2):33-37作者:MalcolmDavisStrutsAnOpen-sourceMVCImplementationThisarticleintroducesStruts,aModel-View-ControllerimplementationthatusesservletsandJavaServerPages(JSP)technology.StrutscanhelpyoucontrolchangeinyourWebprojectandpromotespecialization.EvenifyouneverimplementasystemwithStruts,youm
21、aygetsomeideasforyourfutureservletsandJSPpageimplementationIntroductionKidsingradeschoolputHTMLpagesontheInternet.However,thereisamonumentaldifferencebetweenagradeschoolpageandaprofessionallydevelopedWebsite.Thepagedesigner(orHTMLdeveloper)mustunderstandcolors,thecustomer,productflow,pagelayout,brow
22、sercompatibility,imagecreation,JavaScript,andmore.Puttingagreatlookingsitetogethertakesalotofwork,andmostJavadevelopersaremoreinterestedincreatingagreatlookingobjectinterfacethanauserinterface.JavaServerPages(JSP)technologyprovidesthegluebetweenthepagedesignerandtheJavadeveloper.Ifyouhaveworkedonala
23、rge-scaleWebapplication,youunderstandthetermchange.Model-View-Controller(MVC)isadesignpatternputtogethertohelpcontrolchange.MVCdecouplesinterfacefrombusinesslogicanddata.StrutsisanMVCimplementationthatusesServlets2.2andJSP1.1tags,fromtheJ2EEspecifications,aspartoftheimplementation.Youmayneverimpleme
24、ntasystemwithStruts,butlookingatStrutsmaygiveyousomeideasonyourfutureServletsandJSPimplementations.Model-View-Controller(MVC)JSPtagssolvedonlypartofourproblem.Westillhaveissueswithvalidation,flowcontrol,andupdatingthestateoftheapplication.ThisiswhereMVCcomestotherescue.MVChelpsresolvesomeoftheissues
25、withthesinglemoduleapproachbydividingtheproblemintothreecategorie: ModelThemodelcontainsthecoreoftheapplicationsfunctionality.Themodelencapsulatesthestateoftheapplication.Sometimestheonlyfunctionalityitcontainsisstate.Itknowsnothingaboutthevieworcontroller. ViewTheviewprovidesthepresentationofthemod
26、el.Itisthelookoftheapplication.Theviewcanaccessthemodelgetters,butithasnoknowledgeofthesetters.Inaddition,itknowsnothingaboutthecontroller.Theviewshouldbenotifiedwhenchangestothemodeloccur. ControllerThecontrollerreactstotheuserinput.Itcreatesandsetsthemodel.MVCModel2 TheWebbroughtsomeuniquechalleng
27、estosoftwaredevelopers,mostnotablythestatelessconnectionbetweentheclientandtheserver.This statelessbehaviormadeitdifficultforthemodeltonotifytheviewofchanges.OntheWeb,thebrowserhastore-querytheservertodiscovermodificationtothestateoftheapplication. Anothernoticeablechangeisthattheviewusesdifferentte
28、chnologyfor implementationthanthemodelorcontroller.Ofcourse,wecoulduseJava(orPERL,C/C+orwhatever)codetogenerateHTML.Thereareseveraldisadvantagestothatapproach: Javaprogrammersshoulddevelopservices,notHTML. Changestolayoutwouldrequirechangestocode. Customersoftheserviceshouldbeabletocreatepagestomeet
29、theirspecificneeds. Thepagedesignerisntabletohavedirectinvolvementinpagedevelopment. HTMLembeddedintocodeisugly. FortheWeb,theclassicalformofMVCneededtochange.Figure4displaystheWebadaptationofMVC,alsocommonlyknownasMVCModel2orMVC2.Strutsdetails DisplayedinFigure6isastripped-downUMLdiagramoftheorg.ap
30、ache.struts.actionpackage.Figure6showstheminimalrelationshipsamongActionServlet(Controller),ActionForm(FormState),andAction(ModelWrapper). TheActionServletclassDoyourememberthedaysoffunctionmappings?Youwouldmapsomeinputeventtoapointertoafunction.Ifyouwhereslick,youwouldplacetheconfigurationinformati
31、onintoafileandloadthefileatruntime.FunctionpointerarrayswerethegoodolddaysofstructuredprogramminginC. LifeisbetternowthatwehaveJavatechnology,XML,J2EE,andallthat.TheStrutsControllerisaservletthatmapsevents(aneventgenerallybeinganHTTPpost)toclasses.Andguesswhat-theControllerusesaconfigurationfilesoyo
32、udon_thavetohard-codethevalues.Lifechanges,butstaysthesame. ActionServletistheCommandpartoftheMVCimplementationandisthecoreoftheFramework.ActionServlet(Command)createsandusesAction,anActionForm,andActionForward.Asmentionedearlier,thestruts-config.xmlfileconfigurestheCommand.DuringthecreationoftheWeb
33、project,ActionandActionFormareextendedtosolvethespecificproblemspace.Thefilestruts-config.xmlinstructsActionServletonhowtousetheextendedclasses.Thereareseveraladvantagestothisapproach: Theentirelogicalflowoftheapplicationisinahierarchicaltextfile.Thismakesiteasiertoviewandunderstand,especiallywithla
34、rgeapplications. ThepagedesignerdoesnothavetowadethroughJavacodetounderstandtheflowoftheapplication. TheJavadeveloperdoesnotneedtorecompilecodewhenmakingflowchanges. CommandfunctionalitycanbeaddedbyextendingActionServlet. TheActionFormclass ActionFormmaintainsthesessionstatefortheWebapplication.Acti
35、onFormisanabstractclassthatissub-classedforeachinputformmodel.WhenIsayinputformmodel,IamsayingActionFormrepresentsageneralconceptofdatathatissetorupdatedbyaHTMLform.Forinstance,youmayhaveaUserActionFormthatissetbyanHTMLForm.TheStrutsframeworkwill: ChecktoseeifaUserActionFormexists;ifnot,itwillcreate
36、aninstanceoftheclass. StrutswillsetthestateoftheUserActionFormusingcorrespondingfieldsfromtheHttpServletRequest.Nomoredreadfulrequest.getParameter()calls.Forinstance,theStrutsframeworkwilltakefnamefromrequeststreamandcallUserActionForm.setFname(). TheStrutsframeworkupdatesthestateoftheUserActionForm
37、beforepassingittothebusinesswrapperUserAction. BeforepassingittotheActionclass,Strutswillalsoconductformstatevalidationbycallingthevalidation()methodonUserActionForm.Note:Thisisnotalwayswisetodo.TheremightbewaysofusingUserActionForminotherpagesorbusinessobjects,wherethevalidationmightbedifferent.Val
38、idationofthestatemightbebetterintheUserActionclass. TheUserActionFormcanbemaintainedatasessionlevel. Notes: Thestruts-config.xmlfilecontrolswhichHTMLformrequestmapstowhichActionForm. MultiplerequestscanbemappedUserActionForm. UserActionFormcanbemappedovermultiplepagesforthingssuchaswizards. TheActio
39、nclassTheActionclassisawrapperaroundthebusinesslogic.ThepurposeofActionclassistotranslatetheHttpServletRequesttothebusinesslogic.TouseAction,subclassandoverwritetheprocess()method.TheActionServlet(Command)passestheparameterizedclassestoActionFormusingtheperform() method.Again,nomoredreadfulrequest.g
40、etParameter()calls. Bythe timetheeventgetshere,theinputformdata(orHTMLformdata)hasalreadybeentranslatedoutoftherequeststreamandintoanActionFormclass.Struts,anMVC2implementationStrutsisasetofcooperatingclasses,servlets,andJSPtagsthatmakeupareusableMVC2design.ThisdefinitionimpliesthatStrutsisaframewor
41、k,ratherthanalibrary,butStrutsalsocontainsanextensivetaglibraryandutilityclassesthatworkindependentlyoftheframework.Figure5displaysanoverviewofStruts.Strutsoverview ClientbrowserAnHTTPrequestfromtheclientbrowsercreatesanevent.TheWebcontainerwillrespondwithanHTTPresponse. ControllerTheControllerreceivestherequestfromthebrowser,andmakesthedecisionwheretosendtherequest.WithStruts,theControllerisacommanddesignpatternimplementedasaservlet.Thestruts-config.xmlfileconfigurestheController. BusinesslogicThebusinesslogicupdatesthestateofthemodelandhelp