DWR(Direct Web Remoting)是一个开源的类库,可以帮助开发Ajax技术。它可以允许在浏览器里的代码使用运行在Web服务器上的Java函数,就像它在浏览器里一样。
DWR包含两个主要的部分,其一是运行在浏览器客户端的Javascript,这部分被用来与服务器通信,并更新页面内容;其二是运行在服务器端的Java Servlet,这部分被用来处理请求并将响应结果发送给浏览器。
DWR采取了一种动态生成基于Java类的Javascript代码的新方法来实现和处理Ajax。这样Web开发人员就可以在Javascript里像使用浏览器的本地代码一样使用Java代码,而实际上这些Java代码是运行在服务器端并且可以自由访问Web 服务器资源的。出于安全的考虑,Web开发者必须适当地配置,决定哪些Java类可以安全地被外部使用。
这个从Java到Javascript的远程功能方法给DWR的用户带来了非常传统的RPC机制,就像RMI或者SOAP一样,而且拥有无插件运行在Web上的优势。
DWR认为浏览器/服务器协议没有那么重要,其更倾向于保证编程界面的简单自然。对此最大的挑战就是把Ajax的异步特性和正常Java方法调用的同步特性相结合。在异步模式下,结果数据在开始调用之后的一段时间之后才可以访问。DWR解决了这个问题,允许Web开发人员使用一个特殊的方法参数来指定一个函数,以便在数据返回后回调此函数。
使用DWR可以有效地从应用程序代码中把Ajax的全部请求-响应循环消除掉。这意味着,客户端代码再也不需要直接处理XMLHttpRequest对象或者服务器的响应,不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成XML,甚至不再需要编写servlet代码把Ajax请求调整成对Java对象的调用。
DWR是作为Web应用程序中的servlet部署的。可以把它看做一个黑盒子,这个servlet有两个主要作用:首先,对于公开的每个类,DWR动态地生成包含在Web页面中的Javascript。生成的Javascript包含存根函数,代表Java类上的对应方法并在幕后执行XML HttpRequest。这些请求被发送给DWR,这时它的第二个作用就是把请求翻译成服务器端Java对象上的方法调用,并把方法的返回值放在servlet响应中发送回客户端,编码成Javascript。DWR还提供了帮助执行常见的用户界面任务的Javascript工具函数。
DWR注意: 版本对DWR很重要