### DWR (Direct Web Remoting) 介绍与应用 #### 一、概述 DWR(Direct Web Remoting)是一个开放源代码的项目,遵循Apache许可协议。它为开发者提供了一个强大的工具集,使得通过JavaScript调用Java方法变得简单直接。在DWR中,主要包含了以下几个部分:服务器端Java库、DWR servlet以及客户端JavaScript库。DWR的设计目标是简化Ajax应用的开发过程,并且提供了一种更加优雅的方式来处理客户端与服务器之间的交互。 #### 二、DWR的特点 尽管DWR并非Java平台上唯一的Ajax-RPC工具包,但它却是最成熟和功能最为丰富的之一。DWR的特点包括: 1. **简化远程调用**:DWR允许前端JavaScript代码直接调用后端Java方法,无需编写额外的XML或JSON序列化代码。 2. **完整的Ajax应用程序支持**:DWR不仅支持传统的异步请求,还支持更高级的全双工通信模式,如长轮询(long polling)和WebSocket。 3. **安全性和权限控制**:DWR提供了一套完善的机制来控制哪些JavaScript方法可以访问哪些Java方法,确保了应用的安全性。 4. **自动生成JavaScript代理类**:DWR能够根据Java接口自动生成相应的JavaScript代理类,从而减少了大量的编码工作。 #### 三、DWR的配置与使用示例 为了更好地理解DWR的工作原理及其配置方式,我们将通过一个简单的例子来详细介绍DWR的基本配置和使用流程。 ##### 1. 配置dwr.xml ```xml <dwr> <allow> <create creator="new" javascript="testClass"> <param name="class" value="com.dwr.TestClass"/> <include method="testMethod1"/> </create> </allow> </dwr> ``` 在上面的示例中,`<allow>`标签用于指定哪些操作被允许。`<create>`标签定义了一个名为`testClass`的JavaScript对象,该对象对应于Java中的`com.dwr.TestClass`类。通过`<include>`标签指定了允许被JavaScript调用的方法名称。 ##### 2. JavaScript代码 接下来是在客户端的JavaScript代码中调用DWR服务的例子: ```javascript <script src='dwr/interface/testClass.js'></script> <script src='dwr/engine.js'></script> <script src='dwr/util.js'></script> function callTestMethod1() { testClass.testMethod1(); } ``` 在此示例中,我们加载了由DWR自动生成的`testClass.js`文件,这个文件包含了对`TestClass`类的JavaScript代理。然后,我们定义了一个名为`callTestMethod1`的函数来调用`testClass.testMethod1()`。 #### 四、示例扩展 为了进一步演示DWR的强大功能,下面我们将展示如何在客户端JavaScript代码中传递参数给Java方法,以及如何处理返回值。 ##### 1. 使用回调函数处理返回值 ```xml <dwr> <allow> <create creator="new" javascript="testClass"> <param name="class" value="com.dwr.TestClass"/> <include method="testMethod2"/> </create> </allow> </dwr> ``` ```javascript function callTestMethod2() { testClass.testMethod2(callBackForTestMethod2); } function callBackForTestMethod2(data) { alert("The return value is " + data); } ``` 在本例中,`testMethod2`接受一个回调函数`callBackForTestMethod2`作为参数。当`testMethod2`执行完成后,会调用此回调函数并传递结果。 ##### 2. 处理复杂的Java对象 ```xml <dwr> <allow> <create creator="new" javascript="testClass"> <param name="class" value="com.dwr.TestClass"/> <include method="testMethod3"/> </create> </allow> </dwr> ``` ```javascript function callTestMethod3() { var complexObject = new ComplexObject("foo", 42); testClass.testMethod3(complexObject, function(result) { console.log(result); }); } ``` 在这个例子中,我们向`testMethod3`传递了一个名为`ComplexObject`的复杂Java对象。DWR会自动处理这个对象的序列化和反序列化过程,使得我们可以轻松地在客户端和服务器之间传递复杂数据结构。 #### 五、结论 DWR提供了一种简洁而强大的方式来实现Ajax应用程序中的远程方法调用。它不仅可以极大地提高开发效率,还可以帮助开发者构建出更加强大和灵活的Web应用程序。通过以上介绍和示例,相信读者已经对DWR有了一个全面的认识。
标签:javascript 回调函数 ajax list it 分类:学习
DWR介绍
DWR是Direct Web Remoting 的缩写。
DWR 是一个开放源码的使用 Apache 许可协议的解决方案,它包含服务器端 Java 库、一个 DWR servlet 以及 JavaScript 库。虽然 DWR 不是 Java 平台上唯一可用的 Ajax-RPC 工具包,但是它是最成熟的,而且提供了许多有用的功能。
从最简单的角度来说,DWR 是一个引擎,可以把服务器端 Java 对象的方法公开给 JavaScript 代码。使用 DWR 可以有效地从应用程序代码中把 Ajax 的全部请求-响应循环消除掉。这意味着客户端代码再也不需要直接处理 XMLHttpRequest 对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成 XML。甚至不再需要编写 servlet 代码把 Ajax 请求调整成对 Java 域对象的调用。
DWR 是作为 Web 应用程序中的 servlet 部署的。把它看作一个黑盒子,这个 servlet 有两个主要作用:首先,对于公开的每个类,DWR 动态地生成包含在 Web 页面中的 JavaScript。生成的 JavaScript 包含存根函数,代表 Java 类上的对应方法并在幕后执行 XMLHttpRequest。这些请求被发送给 DWR,这时它的第二个作用就是把请求翻译成服务器端 Java 对象上的方法调用并把方法的返回值放在 servlet 响应中发送回客户端,编码成 JavaScript。DWR 还提供了帮助执行常见的用户界面任务的 JavaScript 工具函数。
DWR(Direct Web Remoting)是一个开源的类库,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样.
它包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJAX原则的Servlet(小应用程序)中获取数据.另外一方面一个JavaScript库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容.
DWR采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码.这样WEB开发人员就可以在JavaScript里使用Java代码就像它们是浏览器的本地代码(客户端代码)一样;但是Java代码运行在WEB服务器端而且可以自由访问WEB 服务器的资源.出于安全的理由,WEB开发者必须适当地配置哪些Java类可以安全的被外部使用.
这个从JAVA到JavaScript的远程功能方法给DWR的用户带来非常像传统的RPC机制,就像RMI或者SOAP一样,而且拥有运行在WEB上但是不需要浏览器插件的好处.
DWR不认为浏览器/WEB服务器协议是重要的,而更乐于保证编程界面的简单自然.对此最大的挑战就是把AJAX的异步特性和正常JAVA方法调用的同步特性相结合.在异步模式下,结果数据在开始调用之后的一段时间之后才可以被异步访问获取到.DWR允许WEB开发人员传递一个回调函数,来异步处理Java函数调用过程.
其配置如下:
1.1、dwr.xml的配置
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod1"/>
</create>
</allow>
<allow>标签中包括可以暴露给javascript访问的东西。
<create>标签中指定javascript中可以访问的java类,并定义DWR应当如何获得要进行远程的类的实例。creator="new"属性指定java类实例的生成方式,new意味着DWR应当调用类的默认构造函数来获得实例,其他的还有spring方式,通过与IOC容器Spring进行集成来获得实例等等。javascript=" testClass "属性指定javascript代码访问对象时使用的名称。
<param>标签指定要公开给javascript的java类名。
<include>标签指定要公开给javascript的方法。不指定的话就公开所有方法。
<exclude>标签指定要防止被访问的方法。
1.2、javascript中调用
首先,引入javascript脚本
<script src='dwr/interface/ testClass.js'></script>
<script src='dwr/engine.js'></script>
<script src='dwr/util.js'></script>
其中TestClass.js是dwr根据配置文件自动生成的,engine.js和util.js是dwr自带的脚本文件。
其次,编写调用java方法的javascript函数
Function callTestMethod1(){
testClass.testMethod1();
}
2、调用有简单返回值的java方法
2.1、dwr.xml的配置
配置同1.1
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod2"/>
</create>
</allow>
</dwr>
2.2、javascript中调用
首先,引入javascript脚本
其次,编写调用java方法的javascript函数和接收返回值的回调函数
剩余8页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助