DWR是一个Web远程调用框架,利用这个框架可以让Ajax开发变得很简单,DWR可以在客户端利用JavaScript直接调用服务器端的Java方法并返回值给JavaScript,就好像直接在本地客户端调用一样(DWR根据Java类来动态生成JavaScript代码)。DWR包含2个主要部分:
- 运行在服务器端的Java Servlet,用于处理请求并且向浏览器发回响应;
- 运行在浏览器端的JavaScript,用于发送请求而且动态更新网页。
DWR的工作原理是通过动态地把Java类生成为JavaScript代码。它的代码与Ajax一样,用户感觉调用就像发生在浏览器端,但是实际上代码调用发生在服务器端。DWR负责数据的传递和转换。这种从Java到JavaScript的远程调用功能的方式使DWR用起来有种非常像RMI或者SOAP的常规RPC机制的感觉,而且DWR的优点在于不需要任何的网页浏览器插件就能运行在网页上。Java一般应用的是同步机制,然而Ajax却是异步机制,所以调用远程方法时,当数据已经从网络上返回时要提供有回调(Callback)功能的DWR。DWR的调用过程如下所示:
上图所示的工作过程是DWR动态在JavaScript里生成一个AjaxService类,从而匹配服务器端的代码。由eventHandler()去调用它,然后DWR处理所有的远程细节,包括倒置(Converting)所有的参数以及返回JavaScript和Java的值。