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入门

Web端服务器推送技术原理分析及dwr框架简单的使用

1. 背景“服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语。它是继“Ajax”之后又一个倍受追捧的Web技术。“服务器推送技术”最近的流行跟“Ajax ”有着密切...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

DWR框架对于Ajax的轻量级使用

DWR框架

dwr框架如何针对不同用户推送信息

第一、在项目中引入dwr.jar包。 第二、在web.xml中添加dwr的支持配置。              dwr-invoker        ...

dwr框架报SecurityException异常的一个可能原因:类加载问题

项目有个模块用了dwr框架,本来是正常的,今天突然项目现场来了个电话说有问题。 不会吧,开发环境还正常运行着呢,而且现场的包还是我出的。 从日志看到的错误是java.lang.SecurityExce...

JavaScript调用java方法——使用Dwr框架的方法步骤

JavaScript调用java方法——Dwr步骤 1.下载dwr.jar直接复制到到你工程下的WebRoot/WEB-INF/lib包下;  2.再修改web.xml  dwr-invok...

DWR框架配置入门

本人使用DWR的目的不单是为了使用它的AJAX功能,最主要还是因为它能够“直接”访问java类中的方法,实际上在使用的时候DWR框架把在验证文件里面写的JS转换为java代码去访问指定的方法,然后再把...

dwr与其他框架的整合

1.DWR与Servlet整合在DWR与Servlet整合中需要用到两个Java类,分别是WebContext和WebContextFactory。其中WebContext是接口。这两个类给与了访问标...

ssh框架整合hibernate,spring,struts,dwr等技术过程分析

ssh整合技术全过程总结分析 为了更清晰的分析ssh整合的流程,(也是为了巩固自己所学的)在这里我将要 先分析整合步骤,然后在将步骤细化分析(根据我所了解的)。部分代码块可能也 将贴出  ...

黑马程序员----使用DWR框架来实现ajax

---------------------- android培训、java培训、期待与您交流! -------------------- ajax的思想真的很不错,可以在用户不知道的情况下,...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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