strutsMVC外文翻译.docx
《strutsMVC外文翻译.docx》由会员分享,可在线阅读,更多相关《strutsMVC外文翻译.docx(15页珍藏版)》请在冰豆网上搜索。
strutsMVC外文翻译
2010届本科毕业设计(论文)外文
文献翻译
学院:
专业:
姓名:
学号:
外文出处:
MalcolmDavis.Struts——anopen-sourceMVCimplementation
IBMSystemJournal,2006,44
(2):
33-37
附件:
1.外文资料翻译译文;2.外文原文。
附件1:
外文资料翻译译文
Struts——MVC的一种开放源码实现
本文介绍Struts,它是使用servlet和JavaServerPages技术的一种Model-View-Controller实现。
Struts可帮助您控制Web项目中的变化并提高专业化水平。
尽管您可能永远不会用Struts实现一个系统,但您可以将其中的一些思想用于您以后的servlet和JSP网页的实现中。
简介
小学生也可以在因特网上发布HTML网页。
但是,小学生的网页和专业开发的网站有质的区别。
网页设计人员(或者HTML开发人员)必须理解颜色、用户、生产流程、网页布局、浏览器兼容性、图像创建和JavaScript等等。
设计漂亮的网站需要做大量的工作,大多数Java开发人员更注重创建优美的对象接口,而不是用户界面。
JavaServerPages(JSP)技术为网页设计人员和Java开发人员提供了一种联系钮带。
如果您开发过大型Web应用程序,您就理解变化这个词的含义。
“模型-视图-控制器”(MVC)就是用来帮助您控制变化的一种设计模式。
MVC减弱了业务逻辑接口和数据接口之间的耦合。
Struts是一种MVC实现,它将Servlet2.2和JSP1.1标记(属于J2EE规范)用作实现的一部分。
尽管您可能永远不会用Struts实现一个系统,但了解一下Struts或许使您能将其中的一些思想用于您以后的Servlet的JSP实现中。
模型-视图-控制器(MVC)
JSP标记只解决了部分问题。
我们还得处理验证、流程控制和更新应用程序的状态等问题。
这正是MVC发挥作用的地方。
MVC通过将问题分为三个类别来帮助解决单一模块方法所遇到的某些问题:
∙Model(模型)
模型包含应用程序的核心功能。
模型封装了应用程序的状态。
有时它包含的唯一功能就是状态。
它对视图或控制器一无所知。
∙View(视图)
视图提供模型的表示。
它是应用程序的外观。
视图可以访问模型的读方法,但不能访问写方法。
此外,它对控制器一无所知。
当更改模型时,视图应得到通知。
∙Controller(控制器)
控制器对用户的输入作出反应。
它创建并设置模型。
MVCModel2
Web向软件开发人员提出了一些特有的挑战,最明显的就是客户机和服务器的无状态连接。
这种无状态行为使得模型很难将更改通知视图。
在Web上,为了发现对应用程序状态的修改,浏览器必须重新查询服务器。
另一个重大变化是实现视图所用的技术与实现模型或控制器的技术不同。
当然,我们可以使用Java(或者PERL、C/C++或别的语言)代码生成HTML。
这种方法有几个缺点:
∙Java程序员应该开发服务,而不是HTML。
∙更改布局时需要更改代码。
∙服务的用户应该能够创建网页来满足它们的特定需要。
∙网页设计人员不能直接参与网页开发。
∙嵌在代码中的HTML很难看。
对于Web,需要修改标准的MVC形式。
图4显示了MVC的Web改写版,通常也称为MVCModel2或MVC2。
图4.MVCModel2
Struts,MVC2的一种实现
Struts是一组相互协作的类、servlet和JSP标记,它们组成一个可重用的MVC2设计。
这个定义表示Struts是一个框架,而不是一个库,但Struts也包含了丰富的标记库和独立于该框架工作的实用程序类。
图5显示了Struts的一个概览。
图5.Struts概览
Struts概览
∙Clientbrowser(客户浏览器)
来自客户浏览器的每个HTTP请求创建一个事件。
Web容器将用一个HTTP响应作出响应。
∙Controller(控制器)
控制器接收来自浏览器的请求,并决定将这个请求发往何处。
就Struts而言,控制器是以servlet实现的一个命令设计模式。
struts-config.xml文件配置控制器。
∙业务逻辑
业务逻辑更新模型的状态,并帮助控制应用程序的流程。
就Struts而言,这是通过作为实际业务逻辑“瘦”包装的Action类完成的。
∙Model(模型)的状态
模型表示应用程序的状态。
业务对象更新应用程序的状态。
ActionFormbean在会话级或请求级表示模型的状态,而不是在持久级。
JSP文件使用JSP标记读取来自ActionFormbean的信息。
∙View(视图)
视图就是一个JSP文件。
其中没有流程逻辑,没有业务逻辑,也没有模型信息--只有标记。
标记是使Struts有别于其他框架(如Velocity)的因素之一。
详细分析Struts
图6显示的是org.apache.struts.action包的一个最简UML图。
图6显示了ActionServlet(Controller)、ActionForm(FormState)和Action(ModelWrapper)之间的最简关系。
图6.Command(ActionServlet)与Model(Action&ActionForm)之间的关系的UML图
ActionServlet类
您还记得函数映射的日子吗?
在那时,您会将某些输入事件映射到一个函数指针上。
如果您对此比较熟悉,您会将配置信息放入一个文件,并在运行时加载这个文件。
函数指针数组曾经是用C语言进行结构化编程的很好方法。
现在好多了,我们有了Java技术、XML、J2EE,等等。
Struts的控制器是将事件(事件通常是HTTPpost)映射到类的一个servlet。
正如您所料--控制器使用配置文件以使您不必对这些值进行硬编码。
时代变了,但方法依旧。
ActionServlet是该MVC实现的Command部分,它是这一框架的核心。
ActionServlet(Command)创建并使用Action、ActionForm和ActionForward。
如前所述,struts-config.xml文件配置该Command。
在创建Web项目时,您将扩展Action和ActionForm来解决特定的问题。
文件struts-config.xml指示ActionServlet如何使用这些扩展的类。
这种方法有几个优点:
∙应用程序的整个逻辑流程都存储在一个分层的文本文件中。
这使得人们更容易查看和理解它,尤其是对于大型应用程序而言。
∙网页设计人员不必费力地阅读Java代码来理解应用程序的流程。
∙Java开发人员也不必在更改流程以后重新编译代码。
可以通过扩展ActionServlet来添加Command功能。
ActionForm类
ActionForm维护Web应用程序的会话状态。
ActionForm是一个抽象类,必须为每个输入表单模型创建该类的子类。
当我说输入表单模型时,是指ActionForm表示的是由HTML表单设置或更新的一般意义上的数据。
例如,您可能有一个由HTML表单设置的UserActionForm。
Struts框架将执行以下操作:
∙检查UserActionForm是否存在;如果不存在,它将创建该类的一个实例。
∙Struts将使用HttpServletRequest中相应的域设置UserActionForm的状态。
没有太多讨厌的request.getParameter()调用。
例如,Struts框架将从请求流中提取fname,并调用UserActionForm.setFname()。
∙Struts框架在将UserActionForm传递给业务包装UserAction之前将更新它的状态。
∙在将它传递给Action类之前,Struts还会对UserActionForm调用validation()方法进行表单状态验证。
注:
这并不总是明智之举。
别的网页或业务可能使用UserActionForm,在这些地方,验证可能有所不同。
在UserAction类中进行状态验证可能更好。
∙可在会话级维护UserActionForm。
注:
∙struts-config.xml文件控制HTML表单请求与ActionForm之间的映射关系。
∙可将多个请求映射到UserActionForm。
∙UserActionForm可跨多页进行映射,以执行诸如向导之类的操作。
Action类
Action类是业务逻辑的一个包装。
Action类的用途是将HttpServletRequest转换为业务逻辑。
要使用Action,请创建它的子类并覆盖process()方法。
ActionServlet(Command)使用perform()方法将参数化的类传递给ActionForm。
仍然没有太多讨厌的request.getParameter()调用。
当事件进展到这一步时,输入表单数据(或HTML表单数据)已被从请求流中提取出来并转移到ActionForm类中。
注:
扩展Action类时请注意简洁。
Action类应该控制应用程序的流程,而不应该控制应用程序的逻辑。
通过将业务逻辑放在单独的包或EJB中,我们就可以提供更大的灵活性和可重用性。
考虑Action类的另一种方式是Adapter设计模式。
Action的用途是“将类的接口转换为客户机所需的另一个接口。
Adapter使类能够协同工作,如果没有Adapter,则这些类会因为不兼容的接口而无法协同工作。
”(摘自Gof所著的DesignPatterns-ElementsofReusableOOSoftware)。
本例中的客户机是ActionServlet,它对我们的具体业务类接口一无所知。
因此,Struts提供了它能够理解的一个业务接口,即Action。
通过扩展Action,我们使得我们的业务接口与Struts业务接口保持兼容。
(一个有趣的发现是,Action是类而不是接口)。
Action开始为一个接口,后来却变成了一个类。
真是金无足赤。
)
Error类
UML图(图6)还包括ActionError和ActionErrors。
ActionError封装了单个错误消息。
ActionErrors是ActionError类的容器,View可以使用标记访问这些类。
ActionError是Struts保持错误列表的方式。
图7.Command(ActionServlet)与Model(Action)之间的关系的UML图
ActionMapping类
输入事件通常是在HTTP请求表单中发生的,servlet容器将HTTP请求转换为HttpServletRequest。
控制器查看输入事件并将请求分派给某个Action类。
struts-config.xml确定Controller调用哪个Action类。
struts-config.xml配置信息被转换为一组ActionMapping,而后者又被放入ActionMappings容器中。
(您可能尚未注意到这一点,以s结尾的类就是容器)
ActionMapping包含有关特定事件如何映射到特定Action的信息。
ActionServlet(Command)通过perform()方法将ActionMapping传递给Action类。
这样就使Action可访问用于控制流程的信息。
ActionMappings
ActionMappings是ActionMapping对象的一个集合。
Struts的优点
∙JSP标记机制的使用
标记特性从JSP文件获得可重用代码和抽象Java代码。
这个特性能很好地集成到基于JSP的开发工具中,这些工具允许用标记编写代码。
∙标记库
为什么要另发明一种轮子,或标记库呢?
如果您在库中找不到您所要的标记,那就自己定义吧。
此外,如果您正在学习JSP标记技术,则Struts为您提供了一个起点。
∙开放源码
您可以获得开放源码的全部优点,比如可以查看代码并让使用库的每个人检查代码。
许多人都可以进行很好的代码检查。
∙MVC实现样例
如果您希望创建您自己的MVC实现,则Struts可增加您的见识。
∙管理问题空间
分治是解决问题并使问题可管理的极好方法。
当然,这是一把双刃剑。
问题越来越复杂,并且需要越来越多的管理。
Struts的缺点
∙仍处于发展初期
Struts开发仍处于初级阶段。
他们正在向着发行版本1.0而努力,但与任何1.0版本一样,它不可能尽善尽美。
∙仍在变化中
这个框架仍在快速变化。
Struts1.0与Struts0.5相比变化极大。
为了避免使用不赞成使用的方法,您可能隔一天就需要下载最新的Struts。
在过去的6个月中,我目睹Struts库从90K增大到270K以上。
由于Struts中的变化,我不得不数次修改我的示例,但我不保证我的示例能与您下载的Struts协同工作。
∙正确的抽象级别
Struts是否提供了正确的抽象级别?
对于网页设计人员而言,什么是正确的抽象级别呢?
这是一个用$64K的文字才能解释清楚的问题。
在开发网页的过程中,我们是否应该让网页设计人员访问Java代码?
某些框架(如Velocity)说不应该,但它提供了另一种Web开发语言让我们学习。
在UI开发中限制访问Java有一定的合理性。
最重要的是,如果让网页设计人员使用一点Java,他将使用大量的Java。
在MicrosoftASP的开发中,我总是看到这样的情况。
在ASP开发中,您应该创建COM对象,然后编写少量的ASP脚本将这些COM对象联系起来。
但是,ASP开发人员会疯狂地使用ASP脚本。
我会听到这样的话,“既然我可以用VBScript直接编写COM对象,为什么还要等COM开发人员来创建它呢?
”通过使用标记库,Struts有助于限制JSP文件中所需的Java代码的数量。
LogicTag就是这样的一种库,它对有条件地生成输出进行管理,但这并不能阻止UI开发人员对Java代码的狂热。
无论您决定使用哪种类型的框架,您都应该了解您要在其中部署和维护该框架的环境。
当然,这项任务真是说起来容易做起来难。
∙有限的适用范围
Struts是一种基于Web的MVC解决方案,所以必须用HTML、JSP文件和servlet来实现它。
∙J2EE应用程序支持
Struts需要支持JSP1.1和Servlet2.2规范的servlet容器。
仅凭这一点远不能解决您的全部安装问题,除非使用Tomcat3.2。
我用NetscapeiPlanet6.0安装这个库时遇到一大堆问题,按理说它是第一种符合J2EE的应用程序服务器。
我建议您在遇到问题时访问Struts用户邮件列表的归档资料。
∙复杂性
在将问题分为几个部分的同时也引入了复杂性。
毫无疑问,要理解Struts必须接受一定的培训。
随着变化的不断加入,这有时会令人很沮丧。
欢迎访问本网站。
Struts的前景
在这个软件开发的新时代,一切都变得很快。
在不到5年的时间内,我已经目睹了从cgi/perl到ISAPI/NSAPI、再到使用VB的ASP、一直到现在的Java和J2EE的变迁。
Sun正在尽力将新的变化反映到JSP/servlet体系结构中,正如他们对Java语言和API所作的更改一样。
您可以从Sun的网站获得新的JSP1.2和Servlet2.3规范的草案。
此外,一个标准JSP标记库即将出现。
附件2:
外文原文
Struts——anopen-sourceMVCimplementation
ThisarticleintroducesStruts,aModel-View-ControllerimplementationthatusesservletsandJavaServerPages(JSP)technology.StrutscanhelpyoucontrolchangeinyourWebprojectandpromotespecialization.EvenifyouneverimplementasystemwithStruts,youmaygetsomeideasforyourfutureservletsandJSPpageimplementation.
Introduction
KidsingradeschoolputHTMLpagesontheInternet.However,thereisamonumentaldifferencebetweenagradeschoolpageandaprofessionallydevelopedWebsite.Thepagedesigner(orHTMLdeveloper)mustunderstandcolors,thecustomer,productflow,pagelayout,browsercompatibility,imagecreation,JavaScript,andmore.Puttingagreatlookingsitetogethertakesalotofwork,andmostJavadevelopersaremoreinterestedincreatingagreatlookingobjectinterfacethanauserinterface.JavaServerPages(JSP)technologyprovidesthegluebetweenthepagedesignerandtheJavadeveloper.
Ifyouhaveworkedonalarge-scaleWebapplication,youunderstandthetermchange.Model-View-Controller(MVC)isadesignpatternputtogethertohelpcontrolchange.MVCdecouplesinterfacefrombusinesslogicanddata.StrutsisanMVCimplementationthatusesServlets2.2andJSP1.1tags,fromtheJ2EEspecifications,aspartoftheimplementation.YoumayneverimplementasystemwithStruts,butlookingatStrutsmaygiveyousomeideasonyourfutureServletsandJSPimplementations.
Model-View-Controller(MVC)
JSPtagssolvedonlypartofourproblem.Westillhaveissueswithvalidation,flowcontrol,andupdatingthestateoftheapplication.ThisiswhereMVCcomestotherescue.MVChelpsresolvesomeoftheissueswiththesinglemoduleapproachbydividingtheproblemintothreecategories:
∙Model
Themodelcontainsthecoreoftheapplication'sfunctionality.Themodelencapsulatesthestateoftheapplication.Sometimestheonlyfunctionalityitcontainsisstate.Itknowsnothingaboutthevieworcontroller.
∙View
Theviewprovidesthepresentationofthemodel.Itisthelookoftheapplication.Theviewcanaccessthemodelgetters,butithasnoknowledgeofthesetters.Inaddition,itknowsnothingaboutthecontroller.Theviewshouldbenotifiedwhenchangestothemodeloccur.
∙Controller
Thecontrollerreactstotheuserinput.Itcreatesandsetsthemodel.
MVCModel2
TheWebbroughtsomeuniquechallengestosoftwaredevelopers,mostnotablythestatelessconnectionbetweentheclientandtheserver.Thisstatelessbehaviormadeitdifficultforthemodeltonotifytheviewofchanges.OntheWeb,thebrowserhastore-querytheservertodiscovermodificationtothestateoftheapplication.
Anothernoticeable