DWR框架

原创 2006年06月19日 16:49:00

        DWR 是一个引擎,可以把服务器端 Java 对象的方法公开给 JavaScript 代码。使用 DWR 可以有效地从应用程序代码中把 Ajax 的全部请求-响应循环消除掉。这意味着客户端代码再也不需要直接处理 XMLHttpRequest 对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成 XML。甚至不再需要编写 servlet 代码把 Ajax 请求调整成对 Java 域对象的调用。 DWR 是一个开放源码的使用 Apache 许可协议的解决方案,它包含服务器端 Java 库、一个 DWR servlet 以及 JavaScript 库。虽然 DWR 不是 Java 平台上唯一可用的 Ajax-RPC 工具包,但是它是最成熟的,而且提供了许多有用的功能。 DWR 是作为 Web 应用程序中的 servlet 部署的。把它看作一个黑盒子,这个 servlet 有两个主要作用:首先,对于公开的每个类,DWR 动态地生成包含在 Web 页面中的 JavaScript。生成的 JavaScript 包含存根函数,代表 Java 类上的对应方法并在幕后执行 XMLHttpRequest。这些请求被发送给 DWR,这时它的第二个作用就是把请求翻译成服务器端 Java 对象上的方法调用并把方法的返回值放在 servlet 响应中发送回客户端,编码成 JavaScript。DWR 还提供了帮助执行常见的用户界面任务的 JavaScript 工具函数。

在web.xml中添加:
<servlet>
  <servlet-name>dwr-invoker</servlet-name>
  <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>dwr-invoker</servlet-name>
  <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

 dwr.xml

<dwr>
  <!-- init is only needed if you are extending DWR -->
  <init>
    <creator id="..." class="..."/>
    <converter id="..." class="..."/>
  </init>
  <!-- without allow, DWR isn't allowed to do anything -->
  <allow>
    <create creator="..." javascript="..."/>
    <convert converter="..." match="..."/>
  </allow>
  <!-- you may need to tell DWR about method signatures -->
  <signatures>
    ...//signatures 为了识别Collections 里数据类型
  </signatures>
</dwr>

在页面中引用动态生成的javascript

<script type="text/javascript" src="[WEBAPP]/dwr/interface/Remote.js"> </script>
<script type="text/javascript" src="[WEBAPP]/dwr/engine.js"> </script>
如何引用方法:
function callBack(str) { alert(str); } Remote.method(param, callBack);
//从远程方法中返回的数据在页面反映出来

如何利用回调函数处理远程方法返回的而外数据?( Passing extra data to callbacks )

The solution is to use a Javascript closure.

参考站点:http://jibbering.com/faq/faq_notes/closures.html
闭包简单的解释是,ECMAScript允许inner functions(嵌套函数):函数可以定义在另外一个函数里面(关于嵌套函数可以看看<javascript权威指南>)。这些内部的函数可以访问outer function(父函数)的local变量,参数,其它内部函数。当内部函数被构造,并可以在函数外被获得(函数当成返回值),这个内部函数被在 outer function返回后被执行(在outer函数外执行),那一个闭包形成了。(简单的理解,function被当成数据类型传递或动态执行)。 inner function还有权利访问 那些outer function(父函数)的local变量,参数,其它内部函数。那些outer function(父函数)的local变量,参数,其它内部函数在outer function返回前就有值,并返回的inner function需要改变这些值。

Javascript closure例子
function createAClosure()
{
var local = 0;
return function(){return ++local;};
}
var c1 = createAClosure();  //第一个闭包,嵌套函数返回的值保存在c1
var c2 = createAClosure(); //第二个闭包
document.write(c1() + "<br/>"); //1
document.write(c1() + "<br/>"); //2
document.write(c1() + "<br/>"); //3
document.write(c2() + "<br/>"); //1
document.write(c2() + "<br/>"); //2


Remoting Options (设置同步或异步)
To set the synchronisity on a global level:
DWREngine.setAsync(true);
Or to set it on a call level:
Remote.method(params, { callback:function(data) { ... }, async:true });
Or to set it on a batch level:
涉及修改或者添加,更新数据库时,要添加如下代码,保持数据的实时性.
DWREngine.beginBatch(); Remote.method1(params, callback1); Remote.method2(params, callback2); DWREngine.endBatch({ async:true });


DWREngine.setVerb(verb)(设置动作POST/GET)
For example, to set the remoting verb on a global level:
DWREngine.setVerb("GET"); Or to set it on a call level:
Remote.method(params, { callback:function(data) { ... }, verb:"GET" }); Or to set it on a batch level:
DWREngine.beginBatch(); Remote.method1(params, callback1); Remote.method2(params, callback2); DWREngine.endBatch({ verb:"GET" });

 


 

DWR框架入门例子

DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在...
  • lxn39830435731415926
  • lxn39830435731415926
  • 2015年05月14日 22:28
  • 10351

DWR框架搭建与使用

1、简介 DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代...
  • hu1991die
  • hu1991die
  • 2015年10月08日 16:56
  • 1641

DWR的工作原理和优缺点

一直以来,我都认为DWR是逆ajax的框架,其实这样理解,是很不全面的,逆ajax只是它的一部分而已。   针对DWR的理解,简单的说就是”简化数据的获取“,用专业的语言来说,那就是通过客户端的eng...
  • zy_281870667
  • zy_281870667
  • 2016年11月08日 15:39
  • 2637

dwr框架与Spring整合

最近在给一个项目做授权的时候用到了DWR框架,一开始还比较困扰,后来发现还是比较好用的一个框架。首先我们来说说dwr框架工作原理,DWR采取了一个类似AJAX的新方法来动态生成基于JAVA类的Java...
  • qq_27298687
  • qq_27298687
  • 2015年07月16日 16:56
  • 2222

Ajax框架,DWR介绍,应用,例子

Ajax框架,DWR介绍,应用,例子
  • Jerome_s
  • Jerome_s
  • 2014年06月12日 12:30
  • 1260

还是太年轻!DWR进一步学习

昨天研究了一下用DWR框架,做了一个消息推送的demo。根据网上的资料,写一个demo并不难。当demo跑起来并能成功向客户端推送消息的时候,我以为会用DWR了。但是当我把DWR集成到springMV...
  • u013628152
  • u013628152
  • 2016年07月29日 23:48
  • 5358

DWR+SpringMVC整合的3种方式之三

方式三:这种方式和方式二差不多,主要使用annotation配置和注解  说明:这种的耦合度也是和方式二差不多,本人最推荐用方式一,写的清楚,配置也清楚。这种方式的时候也遇到了一个很无语的问题,我原来...
  • lxn39830435731415926
  • lxn39830435731415926
  • 2015年05月17日 23:41
  • 8237

dwr与其他框架的整合

1.DWR与Servlet整合 在DWR与Servlet整合中需要用到两个Java类,分别是WebContext和WebContextFactory。其中WebContext是接口。 这两...
  • HUXU981598436
  • HUXU981598436
  • 2015年05月23日 22:03
  • 823

DWR框架快速入门<学习随笔>

DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。 它可以允许在浏览器里的代码使用运...
  • sinat_25926481
  • sinat_25926481
  • 2015年08月28日 10:58
  • 1812

WEB远程调用框架-DWR入门介绍

DWR介绍DWR全称:Direct Web Remoting,直接Web远程调用。是JAVA EE领域中的一个ajax框架,通过使用该框架,可以更简单的开发出Ajax应用。相比于直接使用JS进行aja...
  • qq_27905183
  • qq_27905183
  • 2017年04月24日 23:37
  • 471
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DWR框架
举报原因:
原因补充:

(最多只允许输入30个字)