外文翻译-IBM Java 概览_第1页
外文翻译-IBM Java 概览_第2页
外文翻译-IBM Java 概览_第3页
外文翻译-IBM Java 概览_第4页
外文翻译-IBM Java 概览_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1外文资料翻译(不少于4000外文印刷字符)1所译外文资料:作者:MarshallLamb书名(或论文题目):GeneratedynamicXMLusingJavaServerPagestechnology出版社(或刊物名称):IBMJava概览出版时间(或刊号):2000年12月所译页码:P1-P72译成中文:Web应用程序开发人员传统上使用JSP技术动态构建HTML,方法是将Java代码包括在HTML源代码中。但您知道可以使用同样的方法生成HTML之外的动态内容吗?您可以实现这一点,而且方法比较简单。可以使用XML文档构建JSP页面,该XML文档将用作输出模板,然后替换必须基于基层业务逻辑动态生成的部分。为了生成文档的动态部分,您既可以使用直接编写在JSP页面中的Java代码,也可以使用从该页面外部调用的Java代码。生成文档的哪些部分由您控制。例如,您可以使用Java代码生成两个XML标记之间的数据,生成XML文档树的各个部分(标记和数据),甚至可以生成整个文档。Java代码被从页面中除去,并被加工成一个servlet(称为页面servlet),然后Java应用程序服务器将其作为JSP页面请求的一部分运行。得到的结果是纯XML。JSP技术概述让我们先对JSP页面的工作方式作一些简单的讨论。我们将力求简单,只将注意力集中于一些基本的方面。从传统意义上讲,JSP页面与HTML页面很相似,只是多了一些标记。这些标记使设计人员能够将Java代码(不是JavaScript)嵌入到页面中。Web应用程序服务器(如IBMWebSphereApplicationServer)将截取对JSP页面的请求。页面的扩展名.jsp(不是.html)向应用程序服务器暗示了这些标记的存在。Web应用程序服务器随后对JSP页面进行预处理,提取其中的JSP标记和任何内嵌的Java代码,而只保留HTML。提取出来的JSP标记和内嵌Java代码用来构建Javaservlet(JSP页面servlet),Javaservlet运行该代码并将结果插入到原页面中JSP标记所在的位置。得到的结果是纯HTML。在请求浏览器看到任何结果2之前,Java代码被剥离并在服务器上运行。我们可以将同样的原理应用于XML页面。在包含XML的JSP页面的请求者(可能是一个浏览器,也可能是某个企业对企业的应用程序)看到XML之前,Java代码被剥离JSP页面并用来生成其他内容,生成的内容被插入到JSP标记原来所在的页面位置。这种特性使您能够精确地控制将新内容插入到什么位置,甚至可以精确到单个字符。过一会儿我们将考虑如何使用以上的特性。首先,让我们考虑为什么您可能会想到用JSP创建动态XML。为什么不只是编写Java应用程序或servlet来生成整个文档?为什么要费心去使用JSP呢?最重要的原因是无须为每个请求重新生成静态内容是有意义的(假定XML文档只有部分内容是动态的)。通过使用JSP页面,页面内的静态XML就可以充当一个模板,该模板是用动态内容填充的。Java代码的任务仅仅是生成可能随时间变化的内容-这是一种更有效的方法。非常现实的一个问题是,JSP页面使您能够将不同开发人员负责的任务分开。特别是,它们允许您更好地将数据与视图分离开,从而允许您在不影响逻辑的情况下添加新表示。设想这样一个Javaservlet,它执行业务逻辑,并根据请求的性质将生成的结果重定向到适当的JSP页面。例如,当servlet检测到WAP电话浏览器发出请求时,它就可以将数据重定向到一个包含WML的JSP页面。对于标准浏览器请求,它可以将数据重定向到包括HTML的JSP页面。结构让我们剖析一个示例,该示例将一个静态XML文档转换为一个JSP页面,该文档的部分内容被重写为要动态生成。本例基于IBMWebSphereTranscodingPublisher附带的一个称为FlightInfo的XML样例。此XML文档表示一个特定航线的信息。TranscodingPublisher将它作为一个说明如何使用该产品以适合设备的格式再现XML数据的样例。但是在TranscodingPublisher或其他任何应用程序有机会处理该文档之前,我们希望动态构建它的某些内容。使用.jsp扩展名重命名该文件首先,我们需要使用.jsp扩展名重命名该文件,以便Web服务器知道如何处理它。Web服务器按一定的规则作用于某些URL模式或文件扩展名,如.html或.gif。当将一个Web应用程序服务器添加到一个Web服务器中时,该应用程序服务器就会在Web服务器列表中添加规则,以便处理特定于该应用程序服务器的URL和文件扩展名。当Web服务器看3到一个带有.jsp扩展名的文件时,它就会将此请求传递给Web应用程序服务器进行处理。添加页面指令下一步,我们需要把将要生成的内容的格式通知JSP页面编译器。缺省情况下,页面编译器将假定内容的格式是HTML。要覆盖这一设置,必须添加JSP页面指令来设置内容类型。重要的是要注意JSP页面编译器只会除去组成标记及其内容的字符。如果将JSP标记放在一个新行上,页面编译器将除去除换行符之外的任何字符(因为换行符不是标记的一部分)。例如,假定我们按以下方式将内容类型标记添加到新JSP页面中,在这种情况下,页面编译器将除去第一行中的页面指令,并在版本标记之前留下一个空行。在XML文档中,XML版本标记必须位于第一行,所以这个示例将在XML分析程序中导致错误。要修正这个错误,请将此页面指令添加到第二行,或者将内容标记连接在XML版本标记之后。实际上将页面指令放在文档中的什么位置并不重要,因为页面编译器会将此指令添加到所生成的页面servlet的service()方法的开头,而不管它在页面中处在什么位置。添加Java代码现在剩下要做的事情就是添加Java代码来定制XML的某些内容。我们将Java代码添加到文件中的scriptlet标记()之间。页面编译器将把这两个标记之间的任何内容解释为纯Java代码,并不加修改地将它添加到所生成的页面servlet的service()方法中。scriptlet标记内的所有代码都被按它们在JSP页面出现的次序添加到service()方法中。添加的代码的作用域是整个页面,从而是整个service()方法。因此,如果您在文件开头的一对scriptlet标记之间定义一个变量,则以后您可以在文件中使用一对完全不同的scriptlet标记引用这个变量。可以通过在变量定义两侧添加您自己的一对花括号(.)来强加一个作用域。这两个花括号甚至可以在一对scriptlet标记之间开始,而在另一对scriptlet标记之间结束。在下面的示例中,我用一些使用Calendar类的Java代码来替换原始XML文件中的几个静态日期。这段代码在为几个XML标记创建适当时间条目的同时,使用当前日期,并添加时和分。Java代码用粗体表示。添加行号是为了便于以后引用下面是在代码段中所进行的操作:4添加页面指令来指明这个页面servlet生成的响应将包含XML。定义类型为Calendar的变量cal来包含当前日期和时间。使用全局out对象,我们可以直接显示到正在作为响应发送的页面的当前位置。我们将当前的时间戳显示到页面上。请注意,当生成响应时,JSPscriptlet标记将被时间戳结果取代。在当前时间上加上10分钟,并将这个结果显示到页面上作为出发时间。在当前时间上加上4个小时以得出航班的预定到达时间,然后使用out对象将这个结果显示到页面上。然后再加上2分钟来创建实际到达时间。带有scriptlet标记的等号()将导致将标记内所包含的任何结果显示到页面上。示例中的这一行等价于使用标准scriptlet标记的以下一行:请注意,cal对象对整个页面都是全局的,尽管使用它的一对scriptlet标记并不是定义它的同一对scriptlet标记。如前所述,除非添加花括号(.)来强制使用作用域,否则变量声明从声明之处对于整个页面都是全局的。同样,在这中的Java代码主要用来生成XML标记之间的数据。我们还可以使用Java代码生成一个XML文档中的整个标记树。代码除了显示数据之外,还必须简单地显示出标记。这正是第15-17行所完成的任务。添加JavaBeans组件JSP语法支持将JavaBeans组件添加到页面中,并像访问任何其他Java对象一样访问它们。专用的标记用来声明和实例化bean。页面编译器将使用标记的属性来构建页面servlet中的Java代码,这对于实例化bean以及将请求中的数据置入bean是必需的。因为JavaBeans组件通常必须执行一项任务,所以很容易看出如何使用它们来执行或干预复杂的业务逻辑,同时也从JSP页面中移去复杂的Java代码。一个示例是IntegrationObjectJavaBean组件。这个bean是使用IBMWebSphereHostPublisher构建的,它封装了与旧有数据源(如3270应用程序或数据库)的交互,并只是返回它们的数据。设想使用一个IntegrationObject,为了在我们示例中提供到达和出发信息,它与基于主机的航空调度应用程序对接。作为IntegrationObject的一个用户,您只须请求它的航线数据,而不会察觉到在后台发生的与主机应用程序之间的复杂通信和交互。5让我们进一步分析一下进行的操作:包含标记,它将beanIntegrationObject.FlightInfo定义并实例化为flightInfo。下一行包含一个scriptlet,它调用flightInfo的doHPTransaction()方法,使它连接到主机航班信息应用程序并检索相关的航班信息。第13、16、25和28行只是将结果插入到XML文档中。您可以按完全相同的方式使用其他类型的bean,也许以调用doHPTransaction()之外的某个其他调用方法完成这一操作。您甚至可以在同一个文档中添加多个bean,并为来自多个数据源的数据创建一个复合的XML视图。小结JavaServerPages技术成为一个开放标准已经几年了,并已广泛用于生成动态HTML文档。少数人已经认识到将实际的Java代码嵌在HTML文档中所具有的同等灵活性也适用于生成XML。请考虑这种可能性。通过只动态构建那些变化的数据,您就能够改进企业对企业的通信。您可以构建来自一个数据源的数据的各种表示,不仅仅是HTML和XML,还有用于无线协议的WML和HDML,或者简单使用类似WebSphereTranscodingPublisher这样的产品将动态XML转换为适合设备的表示。XML无疑已成为数据交换的通用格式。使用JavaServerPages技术为以XML格式在Web上快速而容易地发送数据提供了强有力的工具。6英文原文:WebapplicationdeveloperstraditionallyhaveusedJSPtechnologytobuildHTMLdynamicallybyincludingJavacodeintheHTMLsource.ButdidyouknowthatyoucanusethissameapproachtogeneratedynamiccontentbesidesHTML?Youcan,anditsrelativelysimple.YoucanbuildaJSPpageusinganXMLdocumentthatwillserveasthetemplatefortheoutput,thenreplacetheportionsthatmustbegenerateddynamicallybasedontheunderlyingbusinesslogic.YouuseJavacode,eitherwrittendirectlywithintheJSPpageorcalledexternallyfromthepage,togeneratethedynamicportionsofthedocument.Youareincontrolofhowmuchofthatdocumentisgenerated.Forexample,youcanuseJavacodetogeneratedatabetweenXMLtags,togenerateportionsoftheXMLdocumenttree(bothtagsanddata),oreventogeneratetheentiredocument.TheJavacodeisremovedfromthepage,processedintoaservlet(knownasthepageservlet)andrunbytheJavaapplicationserveraspartoftherequestfortheJSPpage.TheresultispureXML.AJSPtechnologyoverviewLetsbeginbytalkingalittleabouthowJSPpageswork.Weregoingtokeepitsimpleandfocusonsomeofthebasics.Formoreinformation,seeResourcesforlinkstoadditionalJSPtechnologyinformation.Inthetraditionalsense,JSPpageslookverymuchlikeHTMLpages,withafewextratags.ThesetagsallowthedesignertoembedJavacode(notJavaScript)inthepageitself.AWebapplicationserver,liketheIBMWebSphereApplicationServer,willinterceptrequestsforJSPpages.Itstippedofftotheirexistencebythepagesextension:.jsp(not.html).TheWebapplicationserverthenpreprocessestheJSPpage,takingouttheJSPtagsandanyembeddedJavacode,leavingonlytheHTML.TheextractedJSPtagsandembeddedJavacodeareusedtobuildaJavaservlet(JSPpageservlet)thatrunsthecodeandinsertstheresultsbackintotheoriginalpagewheretheJSPtagsusedtobe.TheresultispureHTML.TheJavaisstrippedoutandrunontheserverbeforetherequestingbrowserseesanyresult.WecanapplythesameprincipletoanXMLpage.BeforetherequesteroftheJSPpagecontainingXMLeverseestheXML(beitabrowserorsomeotherB2Bapplication),theJavacodeisstrippedoutoftheJSPpageandusedtogenerateadditionalcontent,whichisinsertedbackintothepageatthepointswheretheJSPtagsusedtoreside.Thisfeaturegivesyoutheabilitytocontrolexactlywherenewcontentistobeinserted,downtothecharacter.Welllookathowtomakethisworkinaminute.First,letsconsiderwhyyoumightwanttocreatedynamicXMLusingJSP.WhynotsimplywriteaJavaapplicationorservlettogeneratetheentiredocument?WhybotherwithJSPatall?Themostimportantreason,providingonlyportionsofanXMLdocumentaredynamic,isthatitmakessensenottoregeneratethatstaticcontentforeveryrequest.UsingaJSPpage,thestaticXMLwithinthepageactsasatemplatethat7isfilledoutbythedynamiccontent.YourJavacodeistaskedwithgeneratingonlythecontentthatmightchangeovertime-amoreefficientapproach.Asapracticalmatter,JSPpagesallowyoutoseparatetasksforwhichdifferentdeveloperswillberesponsible.Inparticular,theyallowyoutobetterseparatethedatafromtheview,allowingyoutoaddnewpresentationswithoutaffectingthelogic.ImaginehavingoneJavaservletthatperformsthebusinesslogicandredirectstheresultingdatatoanappropriateJSPpagebasedonthenatureoftherequest.Forexample,aservletmightredirectdatatoaJSPpagecontainingWMLwhenitdetectsaWAPphonebrowsermakingtherequest.ItcouldalsoredirectthedatatoaJSPpagecontainingHTMLforstandardbrowserrequests.ThemechanicsLetswalkthroughanexampleinwhichastaticXMLdocumentisconvertedtoaJSPpage,andportionsofitscontentarerewrittentobedynamicallygenerated.TheexampleisbasedonanXMLsampleshippedaspartoftheIBMWebSphereTranscodingPublishercalledFlightInfo.ThisXMLdocumentrepresentsinformationaboutaspecificairlineflightitinerary.TranscodingPublisherprovidesitasasampletoshowhowtheproductcanbeusedtorendertheXMLdataindevice-appropriateformats.ButbeforeTranscodingPublisher,oranyotherapplication,hasachancetomanipulatethedocument,wewanttobuildsomeofitscontentdynamically.Renamethefileusinga.jspextensionFirst,weneedtorenamethefilewitha.jspextensionsothattheWebserverwillknowwhattodowiththefile.WebservershaverulesforactingoncertainURLpatternsorfileextensions,suchas.htmlor.gif.WhenaWebapplicationserverisaddedtoaWebserver,theapplicationserveraddsrulestotheWebserverslistforhandlingURLsandfileextensionsspecifictotheapplicationserver.WhenaWebserverseesafilewitha.jspextension,itwillpassthatrequestontotheWebapplicationserverforprocessing.AddthepagedirectiveNext,weneedtoindicatetotheJSPpagecompilerwhattheformatofthegeneratedcontentwillbe.Bydefault,thepagecompilerwillassumethecontentisHTML.Tooverridethis,aJSPpagedirectivetagmustbeaddedtosetthecontenttype.ForJSP1.0,thecontenttypepagedirectivelookslikethis.ItsimportanttonotethattheJSPpagecompilerwillremoveonlythecharactersmakingupthetaganditscontents.IfyouplaceaJSPtagonanewline,thepagecompilerwillremoveeverythingbutthenewline(becausethatisnotpartofthetag).Inthiscase,thepagecompilerwillremovethepagedirectiveonthefirstline,leavingablanklinebeforetheversiontag.InXMLdocuments,theXMLversiontagmustbeonthefirstline,sothisexamplewouldcauseanerrorinanXMLparser.Toremedythis,addthepagedirectivetothesecondline,orconcatenatetheXMLversiontagwiththecontenttag.Itreallydoesnt8matterwhereinthedocumentthepagedirectiveisplacedbecausethepagecompilerwilladdtheinstructiontothebeginningoftheresultingpageservletsservice()methodregardlessofitsplacementinthepage.Forreadability,though,youmaywanttoconsideraddingitasthesecondline,likethis:AddtheJavacodeNowallthatisleftistoaddtheJavacodetocustomizesomeofthecontentoftheXML.WeaddtheJavacodetothefilebetweenscriptlettags().ThepagecompilerwillinterpretanythingbetweenthesetagsaspureJavacodeandwilladdit,unchanged,totheservice()methodoftheresultingpageservlet.Allcodewithinthescriptlettagsisaddedtotheservice()methodintheorderthatitappearswithintheJSPpage.Thescopeofthecodeaddedistheentirepage,andthustheentireservice()method.Soifyoudefineavariableinonesetofscriptlettagsatthebeginningofthefile,youcanreferenceitlaterinthefileusingacompletelydifferentsetofscriptlettags.Youcanimposeascopebyaddingyourownsetsofcurlybraces(.)aroundvariabledefinitions.Thesebracescanevenbeginandendindifferentsetsofscriptlettags.Inthefollowingexample,IreplaceafewofthestaticdatesintheoriginalXMLfilewithsomeJavacodeusingtheCalendarclass.ThecodeusesthecurrentdateandaddshoursandminutesalongthewaytocreatetheappropriatetimeentriesforseveraloftheXMLtags.TheJavacodeisboldfaced.Linenumbersareaddedforreferencelater.Hereswhatshappeninginthiscodesegment:ThepagedirectiveisaddedtoindicatethattheresponsegeneratedbythepageservletwillcontainXML.TheCalendarvariablecalisdefinedtocontainthecurrentdateandtime.Usingtheglobaloutobject,wecanprintdirectlyintothecurrentpositionofthepagebeingsentastheresponse.Weprintthecurrenttimestampbackintothepage.Notethatwhentheresponseisgenerated,theJSPscriptlettagswillbereplacedwiththetimestampresult.Weadd10minutestothecurrenttimeandprinttheresulttothepageasthedeparturetime.Weadd4hourstothecurrenttimetoderivethescheduledarrivaltimeoftheflight,whichisthenprintedtothepageusingtheoutobject.Afterwards,weaddanother2minutestocreatetheactualarrivaltime.Theequalssignwiththescriptlettags()willcausetheresultofanythingcontainedwithinthetagstobeprintedtothepage.Thelineintheexampleisequivalenttothefollowinglineusingthestandardscriptlettag:Notethatthecalobjectisglobaltotheentirepage,eventhoughitisusedinadifferentsetofscriptlettagsfromwhereitisdefined.AsImentionedbefore,unlessyouaddbraces(.)toenforcescope,variabledeclarationsareglobaltotheentirepagefromthepointofdeclaration.Also,theJavacodeinthisexampleisusedprimarilytogeneratedata9betweenXMLtags.WecouldalsouseJavacodetogenerateentiretreesoftagsinanXMLdocument.Thecodemustsimplyprintoutthetagsinadditiontothedata.Thisiswhatlines15-17do.AddingJavaBeanscomponentsTheJSPsyntaxsupportsaddingJavaBeanscomponentstothepageandaccessingthemlikeanyotherJavaobject.Thespecialtagisusedtodeclareandinstantiatethebean.ThepagecompilerwillusetheattributesofthetagtobuildtheJavacodeinthepageservlet,whichisnecessarytoinstantiatethebeanandpopulateitwithdatafromtherequest.BecauseJavaBeanscomponentsaregenericallymeanttoperformatask,itseasytoseehowtheycanbeusedtoperformorinterfacewithcomplexbusinesslogic,movingthecomplexJavacodeoutoftheJSPpage.OneexampleisanIntegrationObjectJavaBeancomponent.ThisbeanwasbuiltusingIBMWebSphereHostPublisher,whichencapsulatesinteractionswithlegacydatasources,suchas3270applicationsordatabases,andsimplyreturnstheirdata.ImagineusinganIntegrationObjectthatinterfaceswithahost-basedairlineschedulingapplicationtoprovidethearrivalanddepartureinformationinourexample.AsauseroftheIntegrationObject,yousimplyreques

温馨提示

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

评论

0/150

提交评论