DWR 是一个可以允许你去创建 AJAX WEB 站点的 JAVA 开源库 。它可以让你在浏览器中的 Javascript 代码调用 Web 服务器上的 Java 代码,就像在 Java 代码就在浏览器中一样。
DWR 包含 2 个主要部分:
- 一个运行在服务器端的 Java Servlet,它处理请求并且向浏览器发回响应。
- 运行在浏览器端的 JavaScript,它发送请求而且还能动态更新网页。
DWR 工作原理是 通过动态把 Java 类生成为 Javascript。它的代码就像 Ajax 魔法一样,你感觉调用就像发生在浏览器端,但是实际上代码调用发生在服务器端,DWR 负责数据的传递和转换。这种从 Java 到JavaScript的远程调用功能的方式使DWR用起来有种非常像RMI或者SOAP的常规RPC机制,而且DWR的优点在于不需要任何的网页浏览器插件就能运行在网页上。
Java 从根本上讲是同步机制,然而 AJAX 却是异步的。所以你调用远程方法时,当数据已经从网络上返回
的时候,你要提供有回调 (callback) 功能的 DWR。
这个图片显示了 DWR 如何选择一个下拉列表的内容作为 JavaScript 的 onclick 事件的结果 。
DWR 动态在 JavaScript 里生成一个 AjaxService 类,去匹配服务气端的代码。由 eventHandler 去调用它,然后 DWR 处理所有的远程细节,包括倒置 (converting) 所有的参数以及返回 Javascript 和 Java 之的值。在示例中,先在 eventHandler 方法里调用 AjaxService 的 getOptions() 方法,然后通过反调(callback)方法 populateList(data) 得到返回的数据,其中 data 就是 String[]{“1”, “2”, “3”},最后再使用 DWR utility data 加入到下拉列表。