分享

dwr简介...

 软件团队头目 2008-02-27

最近Ajax比较火,全世界都在讨论。于是我也掺和掺和,直接用XMLHttpRequest?现在的我还没有那个水平。用Echo2或者backbase,又感觉那些纯Ajaxframework太重量级了。我要的只是一些简单的应用而已。于是寻觅的重点放在了一些对xmlhttpRequest进行轻量级包装的代码库上了。于是我找到了DWRDirect Web Remoting)。DWR的口号是AJAX and XMLHttpRequest made easy,并且它也基本上做到了这一点。它提供了一个友好的框架和一些很有用的JavaScript库,可以让我用起Ajax更容易些。详细的信息可以到他们的网站http://www./dwr/。顺便在介绍一个网站吧:http://www. 这里也有很多关于Ajax的资源。

 

下面来简单介绍一下DWR

其实在没有XMLHttpRequestDWR就有了,那时它用的是IFrame,效果很差,所以我看看了就没有再diao它。现在的DWR主要用XMLHttpRequest,当然也可以选者用IFrame,但是不推荐。

DWR是个open source software,授权方式是 ASL version 2.0的。现在网站上examples and tutorials做的也不错。我就根据这些东西自己也做了一个应用,在本文的后面我会详细讲到。

现在DWR的最新版本是1.0RC1。在我的试用环境相还算比较稳定,没有出现什么问题。

DWR本身以一个dwr.jarjar包存在,它的入口时一个Servletuk.ltd.getahead.dwr.DWRServlet)所以要在web.xml里配置一下就可以了。具体配置看这里http://www./dwr/intro.html。比较简单。dwr为我们提供了一个framework帮我们很容易的实现JavaScriptjava之间的通信。

howitworks.png
我还没有看过
dwr的源码,具体他是怎么实现的我也不太清楚。但大致上肯定是通过xmlhttprequest来调用它的servlet然后把数据用xml打包解包了。其实我觉得这部分到不是dwr给我带来的最方便的地方。最方便的地方应该是他的那些js的库。

所以下面我要介绍一下它的两个重要js对象。

DWREngine engine.js中),DWRUtil (util.js)

DWREngine中的方法是基本上是关于XMLHttpRequest的。

下面中介绍一些

DWREngine.setErrorHandler(handler)

默认的错误处理时弹出一个对话框,你可以通过这个方法改变成你需要的表现形式。

DWREngine.setWarningHandler(handler)

改变默认的警告处理形式

DWREngine.beginBatch()

Some Remote Function…

DWREngine.endBatch()

当你有几个远程调用要一起进行时,就要用到这两个方法。

如果不用这两个方法,你就会发现你的远程调用并不以你想象的顺序进行。

DWREngine中还有一些其它的方法,我没有用过。你可以通过dwrjs-doc来看。如果通过文档看不懂它是干什么用的,就看js源码,源码的注释也是比较详细的。

DWRUtil中也有一些很有用的方法。这些方法一般是编写js的辅助方法。

比如setValuegetValue。大多数html标签有value属性,这时你要获取或者设置它的值时就用$(“someid”).value就可以了。但是有些html标记是没有value属性的,它的值时在标签的中间,如<span id=”span1”>some value</span>这时你要取或设它的值的时候就用DWRUtil.setValue($(“span1”)someValue)。这样你就可以在客户端动态的表现一些数据了。

还有很多很好用的方法,dwr的例子中有一些说明,源码中的注释也比较详细。

Dwr就介绍到这里吧。下一篇,我做了个table的例子。
screen.jpg

posted on 2005-08-08 13:26 黑灵 阅读(3313) 评论(11)  编辑  收藏 所属分类: AJAX

FeedBack:
# re: dwr简介
2005-11-23 16:04 | Water Ye
感觉dwr的xml配置还是过于烦琐  回复  更多评论
  
# re: dwr简介
2006-02-28 21:27 | 你的例子在哪里
你的例子在哪里  回复  更多评论
  
# re: dwr简介
2006-06-12 16:42 | liujian
我看到有一个dwr做的框架,封装了dwr,不用学会dwr就可以做ajax程序。是转换swing程序变成web程序。
http://www./swilet/swilet.htm  回复  更多评论
  
# re: dwr简介
2006-06-12 18:43 | TheDevSide
类似这种框架现在已经有了不少,如做的非常不错的有echo2,wingS,WidgetServer等,都要比这个swilet更加完善一些。但是我并不看好这种封装。如果你的整个项目都是用Ajax来实现的,以上框架倒是一个不错的选择,但是一旦遇到一些原框架中不支持的需求,扩展以来就比较麻烦了。如果要用一些MVC的Framework,如WebWork,Struts,JSF等,以上这些架构基本上是不能用的。而且我觉得学习DWR这样的Ajax框架,学习曲线已经很低了,一个正常的程序员半天时间足够了,没必要再封装了,失去得灵活性太得不偿失了。  回复  更多评论
  
# re: dwr简介
2006-06-13 12:18 | liujian
我觉得ajax只是他那个swilet的实现方式,并不是最重要的。
它主要的思想是将web开发转化为swing程序开发,不需要各种xml,jsp,action等配置。将传统web的提交响应的机制转化为组件开发与事件处理机制。因为大家都有感受,用cs开发程序比bs开发简单,迅速吧。
  回复  更多评论
  
# re: dwr简介
2006-06-13 16:54 | 黑灵
我也认为把组件开发与事件处理机制的思想用到BS开发上确实是一个不错的方式,但是那只是一种方式,并不是完美的解决方案。JSF是这种方式在J2EE领域里的标准实现,但是在应用开发过程中还是有很多问题,并没有比原来的方式提高开发效率。我前一段时间看到一片文章,SUN的那群人在考虑Ajax和JSF更好的整合,要实现JSF组件通过Ajax的方式实现组件单独更新,就像Swing那样。我觉得如果能够实现的话,JSF就酷了。  回复  更多评论
  
# re: dwr简介
2006-06-13 19:40 | liujian
我觉得用组件开发与事件处理机制的思想应该是web开发的一个趋势,毕竟像pb与delphi或是swing的这种开发方式来开发,比用struts这种mvc的结构开发要简单直接很多。asp.net与jsf都是这种思路,其他的echo2,wingS也都是这样的思路。这样可能会牺牲一些运行效率,但提高的是开发效率,在某些场合是非常值得的。不过java的这些架构都没有好的开发工具支持,如果有像asp.net那样的开发工具支持,这种架构一定会比struts,webwork那些更好用。
我觉得jsf缺的是工具与控件,尤其是那些复杂的树表格之类和那些数据敏感控件。没有这些,即使用ajax来实现,没有好的工具,可能还是不好用。  回复  更多评论
  
# re: dwr简介
2006-06-13 20:41 | 黑灵
这点我也同意,其实我非常喜欢Asp.net,用VS开发中小型系统开发效率要比Java的解决方案高很多。JSF的学习曲线太高了,又没有很好的工具支持,SunCreator还有点VS的意识,但是还是像玩具。至于控件其实MyFaces和ADF已经很多了,现在也逐渐有了一些商业控件。  回复  更多评论
  
# re: dwr简介
2006-10-05 11:01 | hongyu6
受益!学习!  回复  更多评论
  
# re: dwr简介
2006-12-12 15:52 | kjunch
我的代码如下:
var getid = function(sortstr) { return sortstr.id };
var getName = function(sortstr) { return sortstr.sortName };
var getDelete= function(sortstr) { return "<input type=\"button\" value=\"删除\"\/>"; };
DWRUtil.addRows("sb", sortstr, [ getName,getDelete ]);
本来想在表格里输出一个删除按钮
但结果把原码输出来了,
请问怎么回事,怎么解决?  回复  更多评论
  
# re: dwr简介
2006-12-12 23:45 | 黑灵
你用的哪个版本的DWR?  回复  更多评论

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多