`
cleverpig
  • 浏览: 150135 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论
阅读更多
Buffalo VS DWR

作者:cleverpig

声明:文中引用的评论仅表示个人观点,供大家作为技术参考。


开篇言:

    本文根据BJUG maillist讨论整理,取自Buffalo网站, 在此对Michael的贡献表示感谢!文中引用的评论仅表示个人观点,供大家作为技术参考。先敬佩Michael一个,能做到这样,Michael付出了 很多。下文简单比较一下Buffalo和DWR,两者的思路基本类似,有很多共性的东西。总的看来,Buffalo能满足基本的需要,但DWR已经在整体 系统结构上有了更多优势。框架的生命周期是有限的,如果不能与时俱进,将迟早面临被淘汰的局面。

一、两个Ajax框架:

image
    Buffalo是 一个为java web项目而设计的轻量级AJAX框架。它是开源的(Apache License 2.0),其功能强大且易用。主要解决在j2ee ajax开发中的常见问题。它承诺为开发者和最终用户都能受益。最重要的Buffalo的作者Michael Chen是位中国开发者,他就生活在北京。

image
    DWR是 一个Java开源库,帮助你实现Ajax网站。它可以让你在浏览器中的Javascript代码调用Web服务器上的Java,就像在Java代码就在浏 览器中一样。DWR会根据你的Java类动态的生成Javascript代码。这些代码的魔力是让你感觉整个Ajax调用都是在浏览器上发生的,但事实上 是服务器执行了这些代码,DWR负责数据的传递和转换。

二、共性:

    支持Spring集成:均支持。

    使用一个Servlet来接收所有的AJAX请求:
        Buffalo使用ApplicationServlet<————>DWR使用DWRServlet。

    使用XMLHttpRequest + JavaScript 传输数据:
        Buffalo使用buffalo.js<————>DWR使用dwr.js & util.js。

    在Java和Javascript之间转换数据:
        Buffalo使用marshallingContext<————>DWR使用Converter。

    协议:
        Buffalo 在1.2.x之前采用burlap, Buffalo解析大数据量可能会比较慢,然而可以适用于多种服务器端和客户端,并且burlap协议的完整性和支持的数据类型更加丰富。2.0开始采用 自定义的基于xml的协议(来自burlap,做了更适合web的修改),并自行编写了解析器,性能更高。

        DWR使用自定义的简单文本协议。


三、Buffalo特性:

   1. 基于prototype:如果你的AJAX应用也是基于prototype,那么可以减少重复加载prototype的带宽,并且获得相当一致的编程概念。

   2. Bind:提 供了对结果数据的处理,直接将数据绑定到页面对象并展示,这是一个动人的特性。(DWR在Util.js中也提供了一些方法来简化数据的展示,但不如 Buffalo做的更多。) 在2.0中,Bind能力更加强大,能够将值直接绑定到表单元素、表格、DIV/Span、甚至整个表单上。关键是这种绑定是无侵入并且与buffalo 整体结构完全整合,对外表现只有一个简单的buffalo.bindReply或者Buffalo.Bind.bind即可。http: //buffalo.sourceforge.net/binding.html有一些描述。

   3. 序列化:Buffalo支持任意对象,任意深度,任意数据结构的java到javascript以及javascript到java的双向序列化。并且支持引用。这里有完整的协议说明。由于文档和演示不充分,很多人以为buffalo不支持任意对象了 ~

   4. 生命周期对象访问:1.2.4之前需要继承一个BuffaloService,
    从1.2.4开始就不需要继承了,引入了线程安全的BuffaloContext对象,只需要通过BuffaloContext.getContext()即可获得一个线程安全的引用,并且对Request的各种属性进行操作。更方便的是:

      Map BuffaloContext.getContext.getSession()
      Map BuffaloContext.getContext.getApplication()
      Map BuffaloContext.getContext.getCookie()

      即可获得session/application/cookie的Map,操作这些Map即可获得对这些生命周期的各种变量进行查询和更新。这个特性参考了webwork中ActionContext的设计。

   5. 对Collection/Array的模糊处理:buffalo中提供了对Collection/Array对象的模糊识别能力。例如:服务器端有一个方法需要List参数,客户端传递过去一个javascript数组就可以了,不需要费心的组装对象。buffalo通过这些很细小的地方来提高程序员生产力。

   6. 客户端组装对象:据报告DWR只支持简单数据类型作为参数在客户端传入。buffalo支持在客户端组装对象,甚至可以直接将整个表单序列化为一个对象作为参数传给远程客户端。DWR协议天生不足,这方面,我猜想它完全没有能力。

   7. 对重载方法的处理能力:由于java与javascript之间类型的不匹配,DWR的代码生成无法对重载方法进行处理。例如,sum(double,double), sum(int, int) DWR很可能不知道你要调用哪一个。从2.0开始buffalo支持了对重载的处理。

四、DWR特性:

   1. 支持Batch:可以将多个Service函数调用放在一个XMLHttpRequest请求中完成。

   Michael Chen评论:我一直认为这不是一个好的实践。在客户端发起多个请求并获得响应除了获得编程的复杂外,还增加了服务器端设计service的自由度。这种 方式感觉上更鼓励为远程调用设计细粒度的服务、将组装逻辑放在客户端。这种设计风格我不太喜欢,因此batch也一直没有考虑实现,虽然实现不太麻烦。

   2. Converter:可 以转换任意类型的Java对象到JavaScript,并允许直接使用。例如:Customer类包含一个address变量,当AjaxCall返回 Customer对象的时候,可以直接在Javascript中使用customer.address来获得Address的信息。

   3. HttpServlet:支持在被调用的Service方法中获得HttpServletRequest和HttpServletResponse对象,这样可以访问当前Session中的数据。

   4. 允许Expose部分函数和属性。(Buffalo无限制,可以访问Service中的任意函数。)

   Michael Chen评论: 这个我也考虑过...DWR的代码生成机制使得它不得不通过这种方式减小些流量。Buffalo如果想实现这个特性也不是不行,只是我觉得,既然 Service辛辛苦苦实现了,还需要通过这种方式来让别人不能用么?况且buffalo没有代码生成,无论你暴露多少方法流量都是一样的。考虑到实际情 况,buffalo没有实现这个特性。

   5. DWR2.0中提出了Reverse Ajax:提供在Java代码中来处理页面上元素的功能。

   Michael Chen评论: 这个东东...也还是代码生成的trick...然而我的态度是javascript与java同样重要的,因此不会让代码生成类的东西破坏javascript的整体性。


五、相关资源:

image
   在过去的两年间,baffalo的开发者拥有值得兴奋的积极反馈:buffalo非常适于在java web项目的ajax开发。为了帮助更多的用户更好地使用buffalo,他们期待你的帮助:发布文档、bug报告和bug修正等。

   baffalo Maillist: buffalo-users@lists.sourceforge.net

   baffalo 论坛:http://groups.google.com/group/amowa

image
cleverpig写的Buffalo的最佳实践
分享到:
评论

相关推荐

    buffalo-l 包buffalo-sc包

    在IT行业中,`buffalo-l` 和 `buffalo-sc` 是两个特定的软件包,它们可能涉及特定的开发框架或工具。尽管提供的信息有限,但我们可以根据这些关键词推测出一些可能的知识点。以下是对这两个包的详细解释以及与之相关...

    buffalo.jar & buffalo.js

    在IT行业中,"buffalo.jar & buffalo.js" 提到的两个文件名可能指的是某个软件或框架的组件。这里,我们分别来探讨它们可能涉及的知识点。 首先,`buffalo.jar` 是一个Java Archive (JAR) 文件,它是Java平台的标准...

    buffalo-l.zip

    《洞察之眼:深入理解insightface及其在buffalo-l.zip中的应用》 在现代计算机视觉领域,人脸识别技术已经成为一个不可或缺的部分,而InsightFace正是这样一款强大的开源人脸识别框架。这个框架由阿里云团队开发,...

    Eclipse下Buffalo2.0例子

    它与DWR 和JSON-RPC一样,着眼于Web远程调用(Web Remoting),其简洁而实用的特性一直以来深受开发者喜爱。 Buffalo2.0最大的特点在于其性能的提升,还有完全自行实现的Java到JavaScript协议转换。得益于新的协议实现...

    buffalo_l.zip

    本文将围绕"buffalo_l.zip"中的内容,详细解析InsightFace的核心概念、技术框架,以及如何结合PyTorch和ONNX进行实现和部署。 1. InsightFace概述: InsightFace由MXNet框架开发,但现在也支持PyTorch,这大大拓宽...

    Party Buffalo硬盘管理

    "Party Buffalo硬盘管理"是一款专为XBOX360游戏主机设计的硬盘管理软件,它提供了方便快捷的方式来管理和传输XBOX360硬盘中的数据。这款软件的主要功能是帮助用户在个人计算机(PC)和XBOX360之间进行安全的数据交换...

    Buffalo2-HelloWord

    标题“Buffalo2-HelloWord”可能指的是一个关于使用名为“Buffalo”的工具或框架创建的 HelloWorld 示例项目。从描述中的“NULL”我们无法获取更多信息,但我们可以根据标签“源码”和“工具”来推测这可能是一个...

    XBOX360硬盘管理(Party Buffalo)+源代码

    《Xbox360硬盘管理:Party Buffalo及源代码解析》 在电子游戏领域,微软的Xbox360是一款备受玩家喜爱的游戏主机。而针对Xbox360的硬盘管理,尤其是 Party Buffalo 项目,为用户提供了更高效、便捷的操作体验。本文...

    buffalo应用实例

    Buffalo是Go语言中的一款强大的Web开发框架,它简化了构建现代、健壮且可维护的Web应用程序的过程。本篇文章将深入探讨`buffalo`应用实例,通过一系列实践技巧,帮助开发者更好地理解和运用这个框架。 首先,理解`...

    Buffalo框架所需文件

    Buffalo框架是一个基于Java开发的轻量级Web应用框架,其设计目标是简化开发流程,提高开发效率。在描述中提到的"Buffalo框架所需文件"压缩包,包含了该框架运行所必需的组件,主要是jar文件和JS文件。这些文件在Java...

    buffalo tftpboot.zip

    【标题】:“buffalo tftpboot.zip”是一个用于恢复 Buffalo TS-XL 系列NAS设备固件的TFTP启动文件集合。 【描述】:当你的Buffalo TS-XL系列网络存储器(NAS)遇到问题,比如系统崩溃或者“变砖”,无法正常启动时...

    BUFFALO巴法洛CS-X 系列快速说明书.pdf

    BUFFALO巴法洛CS-X 系列快速说明书.pdf 本资源是 BUFFALO 巴法洛 CS-X 系列快速说明书,旨在指导用户连接和激活 CloudStation 设备。本说明书提供了多语言支持,包括英语、法语、德语、意大利语、西班牙语、葡萄牙...

    BUFFALO巴法洛LS220DE用户手册.pdf

    BUFFALO巴法洛LS220DE用户手册.pdf BUFFALO巴法洛LS220DE用户手册.pdf为 BUFFALO公司LinkStation 200系列的用户手册,旨在指导用户正确地使用该设备。本手册涵盖了设备的基本操作、网络连接、存储管理、故障排除等...

    BUFFALO巴法洛WS5400R 系列快速说明书.pdf

    BUFFALO巴法洛WS5400R系列快速说明书.pdf BUFFALO巴法洛WS5400R系列快速说明书是一个关于NAS存储设备的用户手册,旨在指导用户正确地安装、配置和使用TeraStation NAS存储设备。该手册提供了详细的安装步骤、配置...

    buffalo 入门实例 很不错的学习资料

    Buffalo 是一个基于 Go 语言的 Web 应用开发框架,它为构建高效、可维护的 Web 应用提供了简洁的 API 和强大的工具集。在本篇内容中,我们将深入探讨 Buffalo 的基本概念、核心特性以及如何通过实例来学习和应用这个...

    Buffalo应用文档

    根据提供的“Buffalo应用文档”及其部分内容,我们可以总结并详细解释以下关键知识点: ### 一、Buffalo应用配置概述 #### 1.1 Web 应用配置基础 文档提到的Buffalo应用涉及到Web应用的基本配置,包括`web.xml`...

    深度算法 Insight 使用 buffalo-l.zip

    深度算法 Insight 使用 buffalo_l.zip

    Buffalo+servlet实现验证码.doc

    本示例通过使用Buffalo框架和Servlet来实现一个简单的图形验证码功能。下面将详细介绍这个实现过程中的关键知识点。 1. **Buffalo框架**:Buffalo是一个轻量级的Java服务框架,它提供了一种简单的方式来处理HTTP...

Global site tag (gtag.js) - Google Analytics