现把我学习DWR的一些心得写出来,供大家参考,由于是个人心得,所以难免在措辞方面,概念方面把握不准确的地方,还请大家见谅,发现有什么问题,或者你有什么好的观点,意见都可以留下来。
1.
配置说明:
1).首先在web.xml中添加如下语句。
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<!--用于拦截 http://localhost:8080/dwr-->
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
2).
新建一个dwr.xml文件,和web.xml同目录。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<create creator="new" javascript="JDate"> //对应JavaScript文件名,即:JDate.js在这个文件中有一个名为JDate的JavaScript对象
<param name="class" value="java.util.Date"/> //对应Java类。
</create>
<create creator="new" javascript="Student">
<param name="class" value="com.dwr.test.Student"/>
</create>
<convert converter="bean" match="com.dwr.test.*" ></convert>
</allow>
</dwr>
然后启动服务访问:http://localhost:8080/应用名/dwr (如果是ROOT方式部署的,可以省去应用名)
2.
被映射的JavaBean对象中方法的修饰符只有为Public才可以被暴露出来,private ,protected,package都不会暴露,支持继承体系,如果当前被映射的Bean有父类中提供了某Public方法,该方法也会暴露出来。Bean中的属性是不会暴露出来的。
<create creator="new" javascript="Student">
<param name="class" value="com.dwr.test.Student"/>
<include method="getUserName"/>
</create>
另外还可以在dwr.xml <create><create>中明确描述那些公共的方法可以暴露给外界。如: <include method="getUserName"/> 表示把com.dwr.test.Student中的getUserName()方法暴露出来。如果不写<include>配置,表示把所以的Public方法都暴露,如果写了<include>则只暴露明确指定的方法。
3.
Avoid reserved JavaScript words; Methods named after reserved words are automatically excluded. Most JavaScript reserved
words are also Java reserved words, so you won't be having a method called "try()" anyway. However the most common gotcha is
"delete()", which has special meaning from JavaScript but not Java.
Overloaded methods can be involved in a bit of a lottery as to which gets called, so avoid overloaded methods.
4.
<script type='text/javascript' src='/dwr/interface/Student.js'></script>
<script type='text/javascript' src='/dwr/engine.js'></script>
<script type='text/javascript' src='/dwr/util.js'></script>
在需要使用Dwr框架直接范文JavaBean的Jsp页面中添加如上三条语句。 /dwr/engine.js,/dwr/util.js是固定的,是Dwr的脚本驱动Js和常用
的工具类用来对返回的信息加工处理的。/dwr/interface/Student.js是用户需要直接访问的JavaBean对应的JavaScript映射。注意路径的书写,以及相对位置,这几个文件的层次结构是固定的。并且应用在部署的时候要选择Root方式,否则找不到路径。
5.
<input type='button' onclick='javascript:Student.getUserName(reply);' value='Execute' >
<script type='text/javascript'>
var reply = function(data)
{
alert(data);
}
</script>
前面说过:/dwr/interface/Student.js中有一个和Student同名的对象。即:Student。所以在调用这个Js中方法时需要加上这个对象名,
Student.getUserName(reply),这样处理是为了避免在引入两个Bean,他们对应的JavaScript映射文件中出现相同的函数名情况下的调用混乱。
Student.getUserName(reply)
在Student.js文件中对应着:
Student.getUserName = function(callback) {
dwr.engine._execute(Student._path, 'Student', 'getUserName', callback);
}
可见reply参数是必须的,而且这个参数是一个function类型。用来接受从后台返回来的值。 返回的值就存放在变量data中,我们自己的Javascript的最后需要的处理的值就是data.
函数reply的作用就是被回调并带回用户所需的值。可以把这个方法设置为通用方法。统一取得值,放到全局变量中。如本例中accessRemoteData.js文件中的getRemoteData方法。
6.
AJAX是异步实现的,并且AJAX确实是为了异步的实现才引入近来的。但是,AJAX仍然也支持同步的调用。在纯粹的XMLHttpRequest中可以设置调用是否是异步的。XMLHttpRequest的open函数是有一个是否同步参数,如下:
XMLHttpRequest.open(String method, String URL, boolean asynchronous)
其中的asynchronous就是是否同步的参数了。
在DWR的engine.js文件,有setAsync方法,就是设置调用是否是同步的,还是异步的。
dwr.engine.setAsync(false); 设置为同步运行.
dwr.engine.setAsync(true); 设置为异步运行.
同步模式:
<input type='button' onclick='javascript:dwr.engine.setAsync(false); Student.getUserName(getRemoteData);alert(message)'/>
异步模式:
<input type='button' onclick='javascript:dwr.engine.setAsync(true); Student.getUserName(getRemoteData); alert(message)'/>
A;—>异步线程
|
B;
具体表现为:在A语句体中启动了一个异步线程,到后台获取信息。如果为异常模式,在启动A异步线程之后,B继续执行。
如果为同步模式:在启动A异步线程之后,B并不执行,直到后台获取信息的动作结束,并返回后才执行。
7.
<convert converter="bean" match="com.dwr.test.*" ></convert>
把JOPO对象反转成JavaScript的对象。match表示对这个包下面所有的JOPO都可以转换。之前说了:进行远程方法调用时,需要传递一个回调函
数,用来取回自己所需要的值,最后这个值付给了回调函数的形参变量data
如果调用的方法是 Student.getUser(callback).那么返回的data是“Object”类型。如果User对象有userName,password属性,那么就可以直
接的data.userName ,data.password来取得对象(JavaScript对象)中的值。而这个JavaScrip对象,User就是Conver过来的。
如果返回的是一个普通POJO,此时data就代表Conver过来的POJO对象,那么可以直接由data.属性名来得到对应POJO中的值。
如果返回的是一个List, 此时data就代表Conver过来的List对象,用data[i]来取得List中下标为i的对象。如果取到的对象还是一个POjO,那么继续按照前一种方法处理。
如果返回的是一个Map, 此时data就代表Conver过来的Map对象,用data.key1来取得"Key1"对应的对象,data.key1.userName;
分享到:
相关推荐
[DWR(Ajax)]DWR使用笔记.chm
对于初学者来说,这是一个很好的起点,它涵盖了DWR基本的使用方式和配置,同时也提供了一个可运行的示例,帮助理解Ajax通信的工作原理。通过深入学习和实践,你可以利用DWR构建更复杂的交互式Web应用。
本篇笔记将深入探讨DWR的使用,特别是其在处理对象传输中的优势。 首先,DWR的核心概念包括`RemoteObject`、`Call`和`Configuration`。`RemoteObject`定义了服务器端暴露给JavaScript调用的Java对象和方法,`Call`...
"DWRchinese.pdf"可能是DWR的中文版官方文档或者一个综合教程,涵盖了从入门到高级的DWR使用技巧,包括但不限于创建远程对象、处理异步请求、使用批处理、调试和性能优化等内容。 在这个压缩包中,"DWR开发培训.ppt...
- DWR使用AJAX技术在后台执行Java方法,然后将结果返回给JavaScript。 - AJAX请求是异步的,这意味着用户可以继续与页面交互,而不会被阻塞。 5. **安全性**: - DWR提供了安全性机制,如CORS(跨源资源共享)和...
总的来说,"学习dwr的一个例子"这个压缩包提供了一个实战平台,帮助初学者理解DWR的使用方法和它在实际项目中的应用,通过学习和研究这个例子,你将能够熟练地将DWR集成到你的Web应用中,提升Web应用的交互性和性能...
这个"TestDwr"压缩包文件提供的例子是一个简单的DWR应用示例,适合初学者理解和学习。 1. **DWR基本概念**: - DWR的核心组件包括`DWR Engine`、`Reverse AJAX`和`JavaBeans`。 - `DWR Engine`是DWR的核心,它...
本笔记将深入探讨DWR的核心概念、工作原理以及实际应用。 一、DWR简介 DWR的主要目标是消除传统的HTTP请求-响应模式的局限性,提供一种更加高效、灵活的远程调用机制。通过DWR,开发者可以在浏览器中编写JavaScript...
### DWR (Direct Web Remoting) 详细笔记 #### 一、DWR 概述与应用场景 DWR(Direct Web Remoting)是一种简化Ajax应用程序开发的技术框架,它允许客户端JavaScript直接调用服务器端的Java方法,从而实现了浏览器...
下面我们将详细探讨DWR的配置和使用方法。 首先,配置DWR涉及以下几个关键步骤: 1. **引入DWR库**:在项目中添加dwr.jar,这是DWR的核心库,包含了所有必要的类和接口。 2. **创建Java类**:定义你需要在客户端...
4. **处理响应**:DWR使用异步回调机制,当服务器方法执行完毕后,会调用预先定义的回调函数,将结果传递给JavaScript。 5. **安全控制**:DWR提供了一些安全特性,如CSRF防护,可以通过配置文件进行设置。 这个...
通过"TestDWR"这个例子,你可以学习如何设置DWR的基本环境,编写可远程调用的Java类,以及在前端使用DWR提供的JavaScript API进行交互。这是一个很好的起点,可以帮助你理解DWR的工作原理,并逐步掌握其在实际项目中...
在这个"简单使用DWR完整例子"中,我们将深入理解DWR的基本概念、配置、以及如何在SSH(Spring、Struts、Hibernate)技术框架下集成和应用DWR。 首先,了解DWR的核心概念至关重要。DWR通过JavaScript API使得Java...
描述中的"javascript dwr 使用例子"表明我们将关注客户端的JavaScript部分。DWR提供了一套JavaScript API,允许开发者直接调用服务器上的Java方法。这些API包括`DWREngine`用于初始化和控制DWR引擎,`DWREngine....
在“dwr2.0最简单例子实用亲测试”中,我们可以预期这是一个关于如何使用DWR 2.0版本的入门教程,包含了实际可运行的示例代码。下面将详细介绍DWR的基本概念和在这个实例中可能涉及的关键知识点: 1. **DWR的核心...
DWR(Direct Web Remoting)是一种开放源代码的JavaScript库,它允许Web应用程序与服务器端进行实时通信,无需使用XMLHttpRequest或Ajax技术。DWR使得Java开发者能够方便地在浏览器中调用服务器上的Java方法,就像...
这个"简单例子"是为初学者准备的,旨在快速理解DWR的基本工作原理和使用方法。 **一、DWR基础** 1. **安装与配置** 在开始DWR的使用之前,需要将其添加到项目依赖中,通常通过Maven或Gradle来管理。配置DWR的核心...
Direct Web Remoting (DWR) 是一个开源的Java库,它允许JavaScript在浏览器和服务器之间进行...通过理解并实践这个例子,你可以更好地掌握DWR的使用,以及如何在不依赖积分系统的情况下实现服务器到客户端的数据推送。