【软件工程】DWR入门教程_第1页
【软件工程】DWR入门教程_第2页
【软件工程】DWR入门教程_第3页
【软件工程】DWR入门教程_第4页
【软件工程】DWR入门教程_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

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

文档简介

1、如何开始用DWR有两种方法开始DWR,简单的方式是下载WAR文件然后看看。但是这不能帮你知道如何轻松的把DWR整合到你的web应用中,所以还是推荐你按照下面的3个步骤做:1. 安装DWR的Jar包下载dwr.jjar文件。把把它放到你的的webappp的WEBB-INF/lib目录录下。那里可可能已经有很很多其他的jjar文件了了。2. 编辑配置置文件需要把下面的代代码加到WEEB-INFF/web.xml文件件中。那部分需需要和其他的的在在一起,部分也一样样。 ddwr-innvokerr DDWR Seervlett uk.lttd.gettaheadd.dwr.DWRSeervlett

2、debugg truee ddwr-innvokerr /ddwr/*在WEB-INNF目录下的的web.xxml旁边创创建一个dwwr.xmll文件。可以以从最简单的的配置开始: DWR配置文件件定义了那些些DWR会创创建提供远程程调用的Jaavascrript类。在在上面的例子子中我们定义义了两个类来来提供远程调调用,并为其其提供的Jaavascrript类的的名字。在上面我们使用用了new创建器器,它会调用用没有参数的的构造函数来来创建实例,但但是所有JaavaBeaan必须有这这一构造函数数。还要注意意DWR有一一些限制:不要出现Javvascriipt保留关关键字;和保保留关键字同同

3、名的函数指指定被排除。多多数Javaascrippt的关键字字和Javaa是相同的。所所以你不可能能有一个方法法叫做trry()。但但是该死ddeletee()对与与Javasscriptt有着特殊意意义,而对JJava则不不是。 Javascrript方法法重载是不支支持的,所以以尽量不要再再Java中中使用。 3. 访问下面面的URLhttp:/locallhost:8080/YOURR-WEBAAPP/ddwr/你可以看见一个个页面,里面面有第二步中中的类。接着着往里点,你你会看到所有有可以调用的的方法列表。这这个页面是动动态生成用来来测试的例子子。自己动手试一下下!怎么在你的weeb应

4、用中使使用在文档中有很多多例子演示如如何动态更改改页面中的文文字、更新列列表、操作表表单,还有直直接更改taable中的的内容。每一一个都有如何何实现的介绍绍。另一种方式是看看刚才的页面面中提供的代代码:到 http:/loccalhosst:80880/YYOUR-WWEBAPPP/dwwr/ 页面面,点击你的的类。查看源源码,找到执执行方法的那那几行,把那那些文字粘贴贴到你的HTTML或JSSP中。要包括下面这些些能产生神奇奇效果的Jaavascrript文件件的链接。你也可以把其中中/YOUUR-WEBBAPP/替换成你的的web页面面的相对路径径。DWR根据dwwr.xmll生成和Ja

5、ava代码类类似的Javvascriipt代码。相对而言Javva同步调用用,创建与JJava代码码匹配的Ajjax远程调调用接口的最最大挑战来至至与实现Ajjax的异步步调用特性。DWR通过引入入回调函数来来解决这个问问题,当结果果被返回时,DDWR会调用用这个函数。有两种推荐的方方式来使用DDWR实现远远程方法调用用。可以通过过把回调函数数放在参数列列表里,也可可以把回调函函数放到元数数据对象里。当然也可以把回回调函数做为为第一个参数数,但是不建建议使用这种种方法。因为为这种方法在在处理 HYPERLINK /display/dwrcn/Accessing+Servlet+Objects

6、o Accessing Servlet Objects 自动处处理httpp对象时(查查看Altternattive MMethodd)上会有有问题。这个个方法主要是是为向下兼容容而存在的。简单的回调函数数假设你有一个这这样的Javva方法:public classs Remoote pubblic Strinng gettData(int inndex) 我们可以在Jaavascrript中这这样使用: .functioon hanndleGeetDataa(str) alertt(str);Remote.getDaata(422, hanndleGeetDataa);42是Javaa方法g

7、ettData()的一个参参数。此外你也可以使使用这种减缩缩格式:Remote.getDaata(422, funnctionn(str) allert(sstr); );调用元数据对象象(Metaa-Dataa)另外一种语法时时使用调用用元数据对象象来指定回回调函数和其其他的选项。上上面的例子可可以写成这样样:Remote.getDaata(422, callbback:ffunctiion(sttr) alertt(str); );这种方法有很多多优点:易于于阅读,更重重要的指定额额外的调用选选项。超时和错误处理理在回调函数的元元数据中你可可以指定超时时和错误的处处理方式。例例如:Remo

8、te.getDaata(422, callbback:ffunctiion(sttr) alertt(str); , timeoout:50000, errorrHandller:fuunctioon(messsage) allert(Oops: + messaage); );查找回调函数有些情况下我们们很难区分各各种回调选项项(记住,JJavasccript是是不支持函数数重载的)。例例如:Remote.methood( ttimeouut:3 , eerrorHHandleer:sommefuncc );这两个参数之一一是beann的参数,另另一个是元数数据对象,但但是我们不能能清楚的告诉

9、诉DWR哪个个是哪个。为为了可以跨浏浏览器,我们们假定nulll = undeffined。 所以当前的的情况,规则则是:如果第一个或最最后一个是一一个函数,那那么它就是回回调函数,没没有元数据对对象,并且其其他参数都是是Java的的方法参数。 另外,如果最后后一个参数是是一个对象,这这个对象中有有一个calllbackk成员,并且且它是个函数数,那么这个个对象就是元元数据对象,其其他的都是JJava方法法参数。 另外,如果第一一个参数是 null ,我我们就假设没没有回调函数数,并且其他他的都是Jaava方法参参数。尽管如如此,我们会会检查最后一一个参数是不不是nulll,如果是就就发出警告

10、。 最后如果最后一一个参数是nnull,那那么就没有ccallbaack函数。 另外,发出错误误信号是个糟糟糕的请求格格式。 创造一个与Jaava对象匹匹配的Javvascriipt对象假设你有这样的的Java方方法:public classs Remoote publiic voiid settPersoon(Perrson pp) thiis.perrson = p; Person对对象的结构是是这样的:public Persoon privaate Strinng namme; privaate int agge; privaate Daate appoiintmennts; / gee

11、tterss and setteers 那么你可以在JJavasccript中中这样写:var p = name:Fredd Blogggs, age:442, appoiintmennts: new Daate(), new Daate(11 Jan 2008) ;Remote.setPeerson(p);在Javasccript没没有出现的字字段,在Jaava中就不不会被设置。因为setteer都是返回回voidd,我们就就不需要使用用callbback函数数了。如果你你想要一个返返回voidd的服务端方方法的完整版版,你也可以以加上calllbackk函数。很明明显DWR不不会向它传递递

12、任何参数。TransfoormerFFactorryConffiguraationEError这个问题的现象象是在启动有有DWR的WWeb应用时时出现如下sstack tracee:root caausejavax.xxml.trransfoorm.TrransfoormerFFactorryConffiguraationEError: Proviider ccessorr.TrannsformmerFacctoryIImpl nnot foound javaxx.xml.transsform.TranssformeerFacttory.nnewInsstancee(Unknnown SSou

13、rcee)这个问题和DWWR没有什么么关系,那是是因为Tommcat没有有配置好。比比较简单的解解决办法是下下载Xalaan替换掉$TOMCAAT-HOMME/commmon/llib目录下下的xalaan.jarr文件。DWWR2.0能能更好的处理理这个问题,但但是本质的问问题还是因为为DWR的XXML序列化化需要有XSSLT解析器器的支持。如果你用JDKK5还是有这这个问题的话话,你可以增增加以下VMM参数来使TTomcatt正常工作。-Djavaxx.xml.transsform.TranssformeerFacttory= eernal.xsltcc.traxx.Trannsformm

14、erFacctoryIImplXML解析错误误在刚开始用DWWR的时候经经常遇到的一一个错误就是是XML解析析错误。其实实这和DWRR没有多大关关系,主要是是因为Tommcat里面面自带的Xeerces的的问题,要不不是该有的时时候没有,要要不是不该有有的时候有了了。JDK 1.33自身没有XXML解析器器,所以你需需要xerccesImppl.jarr和xml-apis.jar. JDK 1.44.0 和 JDK 11.4.1 虽然有了XXML解析器器,但是有很很多bug,所所以你还是需需要把xerrcesImmpl.jaar放到toomcatcommoonenddorsedd目录下。 JD

15、K 1.44.2和JDDK 5自带带的XML解解析器工作的的很好,你就就不需要再加加其他的了。另外要提的一点是,不同版本的Tomcat需要的XML解析器不一样。所以要注意检查它和JDK的版本兼容性。 用BEA Weeblogiic的Claasspatth问题Weblogiic 8.11(有可能其其他版本同样样)可能找不不到DWR的的类。这大多出现在ddwr.jaar放在APPP-INFF目录下(AAPP_INNF/libb)的情况。在在这种情况下下DWR依然然可以工作,例例如debuug页面可以以看见,但是是DWR找不不到你的类。解决办法是把ddwr.jaar放到WEEB-INFF/lib目目

16、录下。没有cookiies的情况况下用DWRR当不能用coookies时时,servvlet规范范通过URLL重写来支持持HttpSSessioon。DWRR 2.x通通过它生成的的URL来支支持这项功能能。但是DWWR 1.xx没有这个功功能。你可以以通过以下办办法让DWRR 1.x 也支持coookiess:从dwr.jaar中提取eenginee.js,保保存到你的文文件系统中,就就像jsp文文件一样. 修改DWREEnginee._senndDataa = fuunctioon(battch) 方法, 加加入一行: statsInnfo += ;jssessioonid= + 这样就可

17、以让DDWR 1.x支持urrl重写了。DDWR 2+默认支持。传递额外的数据据到calllback函函数 通常我们需要传传递额外的数数据到calllbackk函数,但是是因为所有的的回调函数都都只有一个参参数(远程方方法的返回结结果),这就就需要一些小小技巧了。 解决方案就是使使用Javaascrippt的闭包特性。 例如,你的回调调函数原本需需要像这个样样子: functioon calllbackkFunc(dataFFromSeerver, dataaFromBBrowseer) / 用dattaFrommServeer和dattaFrommBrowsser做些事事情 那么你可以像这这

18、个组织你的的函数: var dattaFrommBrowsser = .; / 定义一个个闭包函数来来存储dattaFrommBrowsser的引用用,并调用ddataFrromSerrver var calllbackkProxyy = fuunctioon(dattaFrommServeer) callbacckFuncc(dataaFromSServerr, dattaFrommBrowsser); ; var calllMetaaData = ccallbaack:caallbacckProxxy ; Remote.methood(parrams, callMMetaDaata);(调

19、用元数据在在 HYPERLINK /display/dwrcn/Scripting+Introduction o Scripting Introduction 脚本介绍中有有解释) 换句话说,现在在你作为caallbacck函数传递递过来的不是是一个真正的的callbback,他他只是一个做做为代理的闭闭包,用来传传递客户端的的数据。 你可以用更简介介的形式: var dattaFrommBrowsser = .; Remote.methood(parrams, callbacck:funnctionn(dataaFromSServerr) callbacckFuncc(dataaFromSS

20、erverr, dattaFrommBrowsser); );服务器性能优化化CPU瓶颈:经经过严格的测测试DWR的的性能没什么么问题。DWWR上性能消消耗同webb服务器和网网络比起来可可以忽略不计计。如果你真真的需要提升升DWR的性性能的话,可可以把logg级别设置EERROR或或FATALL,但是主要要还是要看你你的编码情况况。Networkk瓶颈: DDWR没有管管理你的浏览览器缓存的功功能,所以它它会不断的重重复读取DWWR的javvascriipt文件。这这里有一个简简单的解决办办法,把jaavascrript文件件复制到你的的web-aapp中,这这样web服服务器就可以以更好的

21、利用用它了。你也也可以考虑把把所有的jaavascrript文件件合并成一个个文件,然后后用DOJOO的压缩程序序处理一个来来节省流量。我们可以做一个个补丁,让DDWR在weeb-appp启动的时候候用时间做为为javasscriptt文件的时间间戳,但是这这个并不十分分重要,因为为上面的补丁丁太简单了而而且可以压缩缩合并Javvascriipt文件。WEB-INFF/web.xml 参参考手册在web.xmml中最简单单的配置就是是简单加入DDWR的seervlett,没有这个个配置DWRR就不会起作作用: ddwr-innvokerr uk.lttd.gettaheadd.dwr.DWRS

22、eervlett ddwr-innvokerr /ddwr/*此外还可以加入入一些重要和和有用的参数数。Loggingg DWR可以工作作在JDK11.3上,而而JDK1.3不支持jjava.uutil.llogginng,但是我我们想强迫任任何人使用ccommonns-loggging或或者log44j,所以当当没有loggging类类的时候DWWR就使用HHttpSeervlett.log()方法。尽尽管如此,如如果DWR发发现了commmons-loggiing,就是是使用它。 Commonss-Loggging 几乎每一个人都都在使用coommonss-loggging,因因为大多数的

23、的servllet容器在在使用它。所所以如果你的的web应用用中没有明显显的加入coommonss-loggging包,它它也会默认的的配置好。 在这种情况下,llogginng是由jaava.uttil.looggingg或者log44j配置文件件控制的。详详细配置查看看文档。 HttpSerrvlet.log() 如果你用HtttpServvlet.llog(), 下面的配置置控制loggging: logLeevel DEBUUG 可用的值有:FFATAL, ERROOR, WAARN (默默认), IINFO 和和 DEBUUG。 多个dwr.xxml文件 和 J2EEE安全 一般来说

24、,你只只需要一个ddwr.xmml文件,并并且放置在默默认的位置:WEB-IINF/dwwr.xmll。 如果那那样的话,你你可以不用了了解下面的配配置。 有三个原因使你你希望指定不不同位置的ddwr.xmml文件。 你希望让dwrr.xml文文件和它能访访问到的资源源在一起。在在这种情况下下你需要一个个这样的配置置: WEB-IINF/cllassess/com/yourcco/dwrr/dwr.xml 。 你有大量的远程程调用类,希希望把他们分分成多个文件件。在这种情情况下你需要要重复下面的的配置几次,每每一个中有不不同的 paaram-nname,并并且以 &aapos;cconfigg

25、&aposs; 开头。DDWR会依次次把他们都读读进来。 DWR可以使用用Servllet规范的的J2EE的的URL安全全机制来给不不同的用户不不同的访问权权限。你只需需要简单的定定义多个dwwr serrvlet,并并且制定不同同的名字,uurl和访问问权限。 如果你希望使用用这一功能,那那么语法是这这样的: confiig* WEB-INF/ddwr.xmml Whatt conffig fiile doo we uuse? 在这里conffig*意思是是paramm-namee要以字符串串confiig开头。这这个参数可以以根据需要使使用多次,但但是不能相同同。 一个使用J2EEE的安全

26、机机制的例子: dwrr-userr-invooker ukk.ltd.getahhead.ddwr.DWWRServvlet confiig-useer WEB-INF/ddwr-usser.xmml dwrr-admiin-invvoker ukk.ltd.getahhead.ddwr.DWWRServvlet confiig-admmin WEB-INF/ddwr-addmin.xxml dwrr-admiin-invvoker /dwrradminn/* dwrr-userr-invooker /dwrruser/* dwrr-admiin dwrr-admiin-colllectii

27、on /dwrradminn/* aadmin dwrr-userr dwrr-userr-colllectioon /dwrruser/* uuser 使用插件(Pllug-inn) DWR里的很多多部件都是可可插入的,所所以可以通过过替换掉DWWR的默认实实现类来改变变其功能。你你可以在 中的 paramm-namee 中指定你你要替换的接接口,并在 paramm-valuue 中指定定自己的接口口实现类。 可插入点是: uk.ltd.getahhead.ddwr.AcccessCControol uk.ltd.getahhead.ddwr.Coonfiguuratioon uk.ltd.

28、getahhead.ddwr.CoonvertterMannager uk.ltd.getahhead.ddwr.CrreatorrManagger uk.ltd.getahhead.ddwr.Prrocesssor uk.ltd.getahhead.ddwr.ExxecutiionConntext 这些可插入点默默认的实现都都在uk.lltd.geetaheaad.dwrr.impll中。 使用debugg/testt模式 你可以通过下面面的参数让DDWR进入ddebug/test模模式: debugg truee 在debug模模式里,DWWR会为每一一个远程调用用类生成一个个测试页面。这

29、这对于检查DDWR是否工工作和工作的的怎么样是很很有用的。这这个模式还可可以警告你一一些存在的问问题:javvascriipt保留字字问题,或者者函数重载问问题。 尽管如此,这个个模式不应该该使用在实际际部署环境里里面,因为它它可以为攻击击者提供你的的服务的大量量信息。如果果你的网站设设计的好的话话,这些信息息不会帮助攻攻击者窥视你你的网站内容容,但是还是是不要给任何何人一个找到到你错误的机机会好。 DWR就是照上上面的样子做做的,没有任任何保证,所所以你的网站站的安全是你你的责任。请请小心。配置DWR - dwr.xmldwr.xmll是DWR的的配置文件。默默认情况下,应应该把它放到到WE

30、B-IINF目录(web.xxml的目录录)下。DTD这里还有一个ddwr.xmml对应的DDTD文档以以及一个用DDTDDocc生成的参考手手册。创建dwr.xxml文件dwr.xmll文件的结构构如下: 术语这里是一些必须须理解的术语语 - 参数数会被connverteed,远程BBean会被被creatted。所以以如果你有一一个叫A的bbean,它它有一个方法法叫A.bllah(B) 那么你需需要一个A的的creattor和一个个B的connverteer。allow段落落里面定义的的试DWR可可以创建和转转换的类。Creatorrs我们要调用的每每个类都需要要一个定定义。creeat

31、or有有几种。比较较通用的是nnew关键字字和Spriing。更多多的信息可以以参见Crreaterrs文档。Convertters我们必须保证所所有的参数都都可以被转换换。JDK中中的多数类型型已经有转换换器了,但是是你需要给DDWR转换你你的代码的权权利。一般来来说JavaaBean的的参数需要一一个定定义。默认情况下,如如下类型不需需要定义就可可以转换:所有的原生类型型 boollean,iint,doouble, 等等 原生类型的对象象类型 Boooleann,Inteeger,等等等 java.laang.Sttring java.uttil.Daate 和SSQL中的DDate 以

32、上类型组成的的数组 以上类型的集合合类型 (LLists, Setss, Mapps, Itteratoors, 等等) 从DOM, XXOM, JJDOM 和和 DOM44J中的DOOM对象 (类似 Ellementt 和 Doocumennt) 要了解如何转换换你的JavvaBeann或者其他类类型的参数请请查看 HYPERLINK /display/dwrcn/Converters o Converters Connverteers文档。可选的initt部分用来声声明创造beean的类和和转换beaan的类。多多数情况下你你不需要用到到他们。如果果你需要定义义一个新的CCreatoor

33、JaavaDocc 和 CConverrter JavaDDoc , 那么你就需需要在这里定定义他们。但但是建议你现现检查一下DDWR是不是是已经支持了了。在init部分分里有了定义义只是告诉DDWR这些扩扩展类的存在在,给出了如如何使用的信信息。这时他他们还没有被被使用。这中中方式很像JJava中的的imporrt语句。多多数类需要在在使用前先iimportt一下,但是是只有impport语句句并不表明这这个类已经被被使用了。每每一个creeator和和conveerter都都用id属性性,以便后面面使用。DWR使用反射射来找出在转转换时应该用用那种类型。有有时类型信息息并不明确,这这时你可

34、以在在这里写下方方法的签名来来明确类型。详详细信息查看看 HYPERLINK /display/dwrcn/Signatures o Signatures Signaaturess部分。多个dwr.xxml文件可以有多个dwwr.xmll文件(详细细信息见 HYPERLINK /display/dwrcn/WEB-INF+Configuration o WEB-INF Configuration weeb.xmll文档)。每每个文件中的的定义会被加加在一起。DDWR用这个个功能来加载载基础配置文文件。我们可可以看看标准准被配置文件件来了解dwwr.xmll的内容。转换器转换器在客户端端和服务器

35、之之间转换数据据.下面这些转换器器有单独章节节介绍 HYPERLINK /display/dwrcn/Array+Converter o Array Converter Array CConverrter HYPERLINK /display/dwrcn/Bean+and+Object+Converters o Bean and Object Converters Bean annd Objject CConverrters HYPERLINK /display/dwrcn/Collection+Converter o Collection Converter Collecttion CCon

36、verrter HYPERLINK /display/dwrcn/Enum+Converter o Enum Converter Enum Coonvertter HYPERLINK /display/dwrcn/DOM+Objects o DOM Objects DOM Objjects HYPERLINK /display/dwrcn/Hibernate+Integration o Hibernate Integration Hibernaate整合 HYPERLINK /display/dwrcn/Accessing+Servlet+Objects o Accessing Servlet

37、 Objects Servlett Objeects (HttpSServleetRequuest, HttpSSessioon, ettc) 基础的转换器原生类型,Sttring,像像BigDeecimall这样的简单单对象的转换换器已经有了了。你不需要要在dwr.xml中部分的中定定义。它们默默认支持。默认支持的类型型包括: bbooleaan, byyte, sshort, int, longg, flooat, ddoublee, chaar, jaava.laang.Boooleann, javva.lanng.Bytte, jaava.laang.Shhort, java.lang

38、.Integger, jjava.llang.LLong, java.lang.Floatt, javva.lanng.Douuble, java.lang.Charaacter, javaa.mathh.BigIIntegeer, jaava.maath.BiigDeciimal 和和 javaa.langg.StriingDate转换器器Date转换器器负责在Jaavascrript的DDate类型型与Javaa中的Datte类型(jjava.uutil.DDate, java.sql.DDate, java.sql.TTimes or jaava.sqql.Timmestammp)之间进

39、进行转换。同同基础的转换换器一样,DDateCoonvertter默认是是支持的。如果你有一个JJavasccript的的字符串 (例如011 Jan 2010) ,你想想把它转换成成Java的的Date类类型有两个办办法:在jaavascrript中用用Date.parsee()把它解解析成Datte类型,然然后用DWRR的DateeConveerter传传递给服务器器;或者把它它作为字符串串传递给Seerver,再用Javva中的SiimpleDDateFoormat(或者类似的的)来解析。同样,如果你有有个Javaa的Datee类型并且希希望在HTMML使用它。你你可以先用SSimple

40、eDateFFormatt把它转换成成字符串再使使用。也可以以直接传Daate给Jaavascrript,然然后用Javvascriipt格式化化。第一种方方式简单一些些,尽管浪费费了你的转换换器,而且这这样做也会是是浏览器上的的显示逻辑受受到限制。其其实后面的方方法更好,也也有一些工具具可以帮你,例例如:The Javvascriipt Tooolboxx Datee formmatterr Web Devvelopeers Nootes oon Datte forrmattiing 其他对象其实创建自己的的转换器也很很简单。Coonvertter接口的的Javaddoc包含了了信息。其实实

41、这种需要很很少出现。在在你写自己的的Conveerter之之前先看看BBeanCoonvertter,它有有可能就是你你要的。The Creeatorss 创造造器dwr.xmll文件中的ccreatee元素的结构构如下: .这里的多数元素素都是可选的的 - 你真真正必须知道道的是指定一一个creaator和一一个javaascrippt名字。creatorr属性 是必必须的 - 它用来指定定使用那种创创造器。默认情况下DWWR1.1有有8种创造器器。它们是: HYPERLINK /display/dwrcn/New+Creator o New Creator new: 用JJava的nnew

42、关键字字创造对象。 HYPERLINK /display/dwrcn/Creators#Creators-NoneCreator#Creators-NoneCreator l Creators-NoneCreator#Creators-NoneCreator o None Creator on Creators none: 它它不创建对象象,看下面的的原因。 (v1.1+) HYPERLINK /display/dwrcn/Scripted+Creator o Scripted Creator scripteed: 通过过BSF使用用脚本语言创创建对象,例例如BeannShelll或Grooo

43、vy。 HYPERLINK /display/dwrcn/Spring+Integration o Spring Integration spring: 通过Sppring框框架访问Beean。 HYPERLINK /display/dwrcn/JSF+Integration o JSF Integration jsf: 使用用JSF的BBean。 (v1.11+) HYPERLINK /display/dwrcn/Struts+Integration o Struts Integration struts: 使用Sttruts的的FormBBean。 (v1.11+) HYPERLINK /

44、display/dwrcn/Beehive+Integration o Beehive Integration pagefloow: 访问问Beehiive或Weeblogiic的PaggeFloww。 (v11.1+) 如果你需要写自自己的创造器器,你必须在在init部部分注册它。javascrript属性性 用于指定定浏览器中这这个被创造出出来的对象的的名字。你不不能使用Jaavascrript的关关键字。scope属性性 非常类似似servllet规范中中的scoppe。 它允允许你指定这这个beann在什么生命命范围。选项项有appplicattion, sesssion, reequ

45、estt 和ppage。这这些值对于SServleet和JSPP开发者来说说应该相当熟熟悉了。scope属性性是可选的。默默认是paage。如如果要使用sessiion需要要cookiies。当前前的DWR不不支持ULRR重写。param元素素 被用来指指定创造器的的其他参数,每每种构造器各各有不同。例例如,neew创造器器需要知道要要创建的对象象类型是什么么。每一个创创造器的参数数在各自的文文档中能找到到。请查看上上面的链接。includee和excllude元素素 允许创造造器来限制类类中方法的访访问。一个创创造器必须指指定incllude列表表或excllude列表表之一。如果果是inc

46、llude列表表则暗示默认认的访问策略略是拒绝;如果是eexcludde列表则暗暗示默认的访访问策略是允许。例如要拒绝防范范除了settWibblle()以外外的所有方法法,你应该把把如下内容添添加到dwrr.xml中中。 对于加入到crreate元元素中的类的的所有方法都都是默认可见见的。auth元素 允许你指定定一个J2EEE的角色作作为将来的访访问控制检查查: none 创造器none 创造器不创创建任何对象象 - 它会会假设你不需需要创建对象象。这有可能能是对的,有有两个原因。你可能在使用的的scopee不是paage(看看上面),并并在在前面已已经把这个对对象创建到这这个scoppe

47、中了,这这时你就不需需要再创建对对象了。还有一种情况是是要调用的方方法是静态的的,这时也不不需要创建对对象。DWRR会在调用创创建器之前先先检查一下这这个方法是不不是静态的。对于上诉两种情情况,你仍然然需要claass参数,用用来告诉DWWR它是在操操作的对象类类型是什么。使用静态方法DWR会在调用用创建器之前前先检查一下下这个方法是是不是静态的的,如果是那那么创造器不不会被调用。很很显然这个逻逻辑适用于所所有创造器,尽尽管如此nnull创创造器是最容容易配置的。适用单例类对于单例类的创创建,最好适适用BeannShelll和BSF来来实例化对象象。详细信息息参见 HYPERLINK /dis

48、play/dwrcn/Scripted+Creator o Scripted Creator Sccripteed创造器器其他创造器我么偶尔也需要要一些新的创创造器,最常常见的是一个个EjbCrreatorr。讨论新的的创造器的好好地方是在邮邮件列表。DWR和HtttpSesssionBiindinggListeenersDWR1.x中中存贮已经创创造的Beaan的方法需需要注意,它它在每次请求求时都会调用用相同的 ssetAtttributte() 方方法。就是说说,如果一个个Bean在在dwr.xxml中的声声明周期设置置为sesssion,再再每次调用bbean中的的方法时,DDWR都会

49、执执行一次 ssessioon.settAttriibute(yourBBean) 。这看上去去没有什么危危害,但是如如果你要使用用servllet的事件件机制的,就就是说用了HHttpSeessionnBindiingLisstenerr接口,你就就会发现vaalueBoound和vvalueUUnbounnd事件在每每次调用时都都会发生,而而不是你想像像的在beaan被创建时时以及sesssion过过期时。DWR2 只在在第一次创建建对象时调用用 setAAttribbute() 。dwr.xmll中的签名(Signaaturess)signatuures段使使DWR能确确定集合中存存放的

50、数据类类型。例如下下面的定义中中我们无法知知道listt中存放的是是什么类型。public classs Checck publiic voiid settLotteeryRessults(List nos) signatuures段允允许我们暗示示DWR应该该用什么类型型去处理。格格式对以了解解JDK5的的泛型的人来来说很容易理理解。 !CDDATA imporrt javva.utiil.Lisst; imporrt comm.exammple.CCheck; Checkk.setLLotterryResuults(LList noos); DWR中又一个个解析器专门门来做这件事事,所以即

51、便便你的环境时时JDK1.3 DWRR也能正常工工作。解析规则基本上上会和你预想想规则的一样样(有两个例例外),所以以java.lang下下面的类型会会被默认immport。第一个是DWRR1.0中解解析器的buug,某些环环境下不能返返回正确类型型。所以你也也不用管它了了。第二个是这个解解析器时阳阳光(sunnny daay)解析析器。就是说说它非常宽松松,不想编译译器那样严格格的保证你一一定正确。所所以有时它也也会允许你丢丢失impoort: !CDDATA imporrt javva.utiil.Lisst; Checkk.setLLotterryResuults(LList); 将来的

52、DWR版版本会使用一一个更正式的的解析器,这这个编译器会会基于官方JJava定义义,所以你最最好不要使用用太多这个不不严格的东西西。signatuures段只只是用来确定定泛型参数中中的类型参数数。DWR会会自己使用反反射机制或者者运行时类型型确定类型,或或者假设它是是一个Strring类型型。所以:不需要signnaturees - 没没有泛型参数数:public void methood(Strring pp);public void methood(Strring p);需要signaaturess - DWWR不能通过过反射确定:public void methood(Lisst p)

53、;public void methood(Mapp p);不需要signnaturees - DDWR能正确确的猜出:public void methood(Lisst p);public void methood(Mapp pp);不需要signnaturees - DDWR可以通通过运行时类类型确定:public List methhod(Sttring p);没有必要让Jaavascrript中的的所有对象的的key都是是Strinng类型 - 你可以使使用其他类型型作为keyy。但是他们们在使用之前前会被转换成成Strinng类型。DDWR1.xx用Javaascrippt的特性把把k

54、ey转换换成Striing。DWWR2.0可可能会用tooStrinng()方法法,在服务段段进行这一转转换。engine.js Fuunctioons engine.js对DWWR非常重要要,因为它是是用来转换来来至动态生成成的接口的jjavasccript函函数调用的,所所以只要用到到DWR的地地方就需要它它。 The enggine.jjs fille 每一个页面都需需要下面这些些语句来引入入主DWR引引擎。 使用选项 下面这些选项可可以通过 DDWREnggine.ssetX() 函数来设设置全局属性性。例如: DWREngiine.seetTimeeout(11000);或者在单次调

55、用用级别上(假假设Remoote被DWWR暴露出来来了): Remote.singlleMethhod(paarams, callbacck:funnctionn(dataa) , timeoutt:20000 );远程调用可以 HYPERLINK /display/dwrcn/Call+Batching o Call Batching 批批量执行来减减少反应时间间。endBBatch 函数中可以以设置选项。 DWREngiine.beeginBaatch(); Remote.methoodInBaatch1(paramms, caallbacck1); Remote.methoodInBaa

56、tch2(paramms, caallbacck2); DWREngiine.enndBatcch( timeoutt:30000 );可以混合这几种种方式,那样样的话单次调调用或者批量量调用级别上上的设置可以以复写全局设设置(就像你你希望的那样样)。当你在在一个批量处处理中多次设设置了某个选选项,DWRR会保留最后后一个。所以以如果 Reemote.singlleMethhod() 例子在baatch里面面,DWR会会使用30000ms做为为超时的时间间。 callbacck和excceptioonHanddler两个个选项只能在在单次调用中中使用,不能能用于批量调调用。 preHookk和

57、posttHook选选项两个选项项是可添加的的,就是说你你可以为每一一次调用添加加多个hoook。全局的的preHoook会在批批量调用和单单次调用之前前被调用。同同样全局的ppostHoook会在单单次调用和批批量调用之后后被调用。 如果以上叙述让让你感到混乱乱,不用担心心。DWR的的的设计往往往和你想象中中的一样,所所以其实这些些并不复杂。 选项索引 下面是可用选项项列表。 OptionGlobalBatchCallSummaryy HYPERLINK /display/dwrcn/Remoting+Options o Remoting Options async设置是否为异步步调用,不推

58、推荐同步调用用headerss2.02.02.0在XHR调用中中加入额外的的头信息parametters2.02.02.0可以通过Metta-dattarequuest.ggetParrameteer()取得得的元数据 HYPERLINK /display/dwrcn/Remoting+Options o Remoting Options httpMetthod2.02.02.0选择GET或者者POST. 1.x中中叫&apoos;verrb&apoos; HYPERLINK /display/dwrcn/Remoting+Options o Remoting Options rpcTypee

59、2.02.02.0选择是使用xhhr, ifframe或或者scriipt-taag来实现远远程调用. 1.x中叫叫&aposs;methhod&appos; HYPERLINK /display/dwrcn/Call+Batching o Call Batching skipBattch1.0*2.1?-某个调用是否应应该设置为bbatch中中的一部分或或者直接的。这这个选项和上上面都有些不不同。*没有有setSkkipBattch()方方法,批量调调用是通过bbeginBBatch()和enddBatchh()来控制制的。timeoutt1.01.11.1设定超时时长,单单位ms处理器(H

60、anndler) OptionGlobalBatchCallSummaryy HYPERLINK /display/dwrcn/Errors%2C+Warnings+and+Timeouts o Errors, Warnings and Timeouts errorHaandlerr1.01.11.1当出了什么问题题时的动作。11.x中还包包括服务端的的异常。从22.0开始服服务端异常通通过&apoos;excceptioonHanddler&aapos;处处理 HYPERLINK /display/dwrcn/Errors%2C+Warnings+and+Timeouts o Errors,

温馨提示

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

评论

0/150

提交评论