付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DWR框架入门教程2009-10-2017:01DWR(DirectWebRemoting)是一个开放源码的使用Apache许可协议的解决方案,它包含服务器端Java库、一个DWRServlet以及JavaScript库。虽然DWR不是Java平台上唯一可用的Ajax-RPC工具包,但是它是最成熟的,而且提供了许多有用的功能。为什么要使用DWR,我们首先介绍基本AJAX流程,从中可以看到引入DWR会带来什么好处。
1、AJAX的基本介绍
Ajax(AsynchronousJavaScriptAndXML)描述了一种使用混合了HTML(或XHTML)和层叠样式表作为表达信息,来创建交互式的Web应用的开发技术;文档对象模型(DOM)、JavaScript、动态地显示和与表达信息进行交互;并且,XMLHttpRequest对象与Web服务器异步地交换和处理数据。
使用AJAX,我们可以开发出有很好交互性的B/S程序,同时AJAX局部和异步刷新的特性也大大减小了对服务器和网络的压力。对于非AJAX的B/S程序来说HTML、DOM、JS同样是不可或缺的关键技术,因此引入AJAX技术主要是增加了对于XMLHttpRequest对象的使用。我们使用AJAX来开发一个简单的AJAX程序。
例1:
服务端的TestAjaxServlet:publicvoiddoPost(HttpServletRequestreq,HttpServletResponseres)throwsjava.io.IOException{res.getWriter().write("GettingMessageusesAJAXdirectly!");}
请将些Servlet配置成ajax/testAjaxServlet.
客户端的使用AJAX去调用服务端的TestAjaxServlet并响应:functiongetAjaxMessage(){varhttp_request=false;if(window.XMLHttpRequest){//Mozilla,Safari,...http_request=newXMLHttpRequest();if(http_request.overrideMimeType){http_request.overrideMimeType("text/html");}}else{if(window.ActiveXObject){//IEtry{http_request=newActiveXObject("Msxml2.XMLHTTP");}catch(e){try{http_request=newActiveXObject("Microsoft.XMLHTTP");}catch(e){}}}}if(http_request===false){alert("CannotcreateXMLHTTPinstance");returnfalse;}http_request.onreadystatechange=function(){document.getElementById(‘MessageSpan’).innerHTML=http_request.responseText;};http_request.open("POST",“ajax/testAjaxServlet.do“,true);http_request.setRequestHeader("Content-type","application/x-www-form-urlencoded");http_request.setRequestHeader("Content-length",parameters.length);http_request.setRequestHeader("Connection","close");http_request.send(parameters);}
当客户端调用getAjaxMessage()成功后,页面上的“MessageSpan”部分会出面“GettingMessageusesAJAXdirectly!”,表明调用成功,且页面没有整体全部的刷新,在处理没有完成的时候,用户和页面上其它的UI交互并不受影响。
与传统B/S开发方法相比,服务端代码没有受到影响,客户端使用则需要创建XMLHttpRequest对象与服务端进行交互,同时在服务端调用完成后,使用JS回调函数处理服务端返回的数据。AJAX为B/S程序带来了种种好处的同时,也带来了下列问题,一是需要使用XMLHttpRequest对象,二是如果服务端想要返回一个复杂的数据结构时,一般只能返回XML代码,虽然有很多相对应的工具来解析XML,但还是增加了较大的工作量,有没有一种方法或工具,能够封装XMLHttpRequest,屏蔽HTTP协议细节,不会对服务端的代码造成影响,同时能让将服务端返回的复杂数据结构隐式转换为客户端JS程序可以直接使用的数据结构?有,答案就是DWR。
2、DWR框架基本介绍
从最简单的角度来说,DWR是一个引擎,可以把服务器端Java对象的方法公开给JavaScript代码。使用DWR可以有效地从应用程序代码中把Ajax的全部请求-响应循环消除掉。这意味着客户端代码再也不需要直接处理XMLHttpRequest对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成XML。甚至不再需要编写servlet代码把Ajax请求调整成对Java域对象的调用。
DWR是作为Web应用程序中的servlet部署的。把它看作一个黑盒子,这个servlet有两个主要作用:首先,对于公开的每个类,DWR动态地生成包含在Web页面中的JavaScript。生成的JavaScript包含存根函数,代表Java类上的对应方法并在幕后执行XMLHttpRequest。这些请求被发送给DWR,这时它的第二个作用就是把请求翻译成服务器端Java对象上的方法调用并把方法的返回值放在servlet响应中发送回客户端,编码成JavaScript。DWR的标准流程如下图所示:
页面触发eventHandler()事件,事件内部调用了AjaxService.getOptions方法,当调用完成后,利用服务端返回的数据用客户端的populateList()方法进行数据展现。
我们通过一个简单的DWR示例来说明如何使用DWR。
为了使用DWR,需要将DWR的jar文件拷入Web应用的WEB-INF/lib目录中(可在/dwr下载),在web.xml中增加一个servlet声明,并创建DWR的配置文件。
服务端的配置:<servlet><servlet-name>dwr-invoker</servlet-name><display-name>DWRServlet</display-name><description>DirectWebRemoterServlet</description><servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class><init-param><param-name>debug</param-name><param-value>true</param-value></init-param></servlet><servlet-mapping><servlet-name>dwr-invoker</servlet-name><url-pattern>/dwr/*</url-pattern></servlet-mapping>
在WEB-INF中创建文件dwr.xml:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEdwrPUBLIC"-//GetAheadLimited//DTDDirectWebRemoting2.0//EN""/dwr/dwr20.dtd"><dwr><allow></allow></dwr>
服务端的TestDWR:publicStringgetMessage(){return"GettingMessageusesDWR!";}
在dwr.xml的<allow></allow>中增加如下内容:<createcreator="new"javascript="TestDWR"><paramname="class"value="ajax.TestDWR"/></create>
至此,服务端的配置已经完成,如果有新的功能增加,只需要对在dwr.xml中进行相应的配置即可。
客户端的配置:
如果页面要使用DWR,需要将下面三行引入:
<scriptsrc='/[YOUR-WEBAPP]/dwr/interface/[YOUR-SCRIPT].js'></script>
<scriptsrc='/[YOUR-WEBAPP]/dwr/engine.js'></script>
在页面中增加如下代码定义JS函数:<script>functiongetDWRMessage(){TestDWR.getMessage(showMessage);}functionshowMessage(data){document.getElementById(‘MessageSpan’).innerHTML=data;}</script>
当客户端调用getDWRMessage()成功后,页面上的“MessageSpan”部分会出面"GettingMessageusesDWR!",表明DWR调用成功,且页面没有整体全部的刷新,在处理没有完成的时候,用户和页面上其它的UI交互并不受影响。
对例1和例2进行对比,我们可以发现使用DWR开发B/S应用时,DWR为我们屏蔽了HTTP协议的细节,不再需要使用XMLHttpRequest对象来与服务器进行交互,解决了我们在编写AJAX应用时一个较大的问题,但在例2中我们中只返回了一个简单的字符串,如果我们希望返回一个较复杂的数据结构,如一个对象数组,DWR又如何解决这个问题呢?
例3:
定义一个JavaBean:publicclassUser{privateStringusername;privateStringpassword;publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}}
在dwr.xml的<arrow></arrow>间增加如下内容:<convertconverter="bean"match="ajax.User"></convert>
在现有的服务端代码中增加一个方法:publicArrayListgetUserList(){ArrayListuserList=newArrayList();UseruserA=newUser();userA.setUsername("John");userA.setPassword("123456");userList.add("userA");UseruserB=newUser();userB.setUsername("Tom");userB.setPassword("123456");userList.add("userB");returnuserList;}
在客户端,我们增加一个JS函数来调用服务端的getUserList方法FunctiongetUserListFromServer(){Util.getUserList({callback:function(dataFromServer){for(vari=0;i<dataFromServer.length;i++){alert(dataFromServer[i].username);}}});}
当触发页面的getUserListFromServer方法后,“John”,“Tom”顺序显示,这样,我们直接使用服务端定义的一个对像数组,就像js中定义的一样,不需要我们手工进行转换。
3、DWR框架的缺点
通过上面的示例程序,我们可以看到使用DWR开发B/S程序给我们带来了很大的便利,但任何技术都有不足之处,对这些不足之处的充分了解,有助于我们更好的理解DWR的适用范围,发挥它的优点。
同任何RPC机制一样,在DWR中,可能很容易忘记对于远程对象进行的每个调用都要比本地函数调用昂贵得多。DWR在隐藏Ajax的机械性方面做得很好,但是重要的是要记住网络并不是透明的——进行DWR调用会有延迟,我们不能因为某些实现上的问题,将完全可由客户端完成的功能转交服务端完成,这样会导致服务器和网络增加了不必要的开销。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业法律风险应对措施分析
- 门店租赁合同范本及注意事项
- 多方共同开发绿色能源项目合作合同
- 工业企业设备验收检查规范
- 市政道路施工预算编制与控制实例
- 部编二年级语文课文填空专项训练
- 二年级数学测试卷模拟题
- 高校教师离职流程与注意事项
- 大学英语课程离线作业范文
- 《鲁迅传》读后感心得体会
- 《石油石化系统治安反恐防范要求》考试卷
- 2023年版FIDIC 红皮书(中英文)
- 福建省简介PPT-福建省PPT介绍
- 住宅项目建设总投资概算表
- 普通高校本科招生专业选考科目要求指引(通用版)
- 《寻找中国巴菲特》读书笔记思维导图PPT模板下载
- GB/T 3735.1-1983卡套式端直通长管接头
- FZ/T 70006-2004针织物拉伸弹性回复率试验方法
- 提高水冷壁射线检测效率0328
- 冬季驾驶员安全教育培训课件
- 国开数字电子电路形考答案
评论
0/150
提交评论