一、概念
DWR(Direct Web Remoting),中文翻译成“直接Web远程控制”。我认为就是将AJAX作了一次封装,并提供与服务器端Java组件进行交互的一个组件。在其官方网站(http://getahead.ltd.uk/dwr)上说得很清楚,“DWR is Easy Ajax for Java”。DWR允许客户端的javascript与服务器端的Java进行交互,并根据其交互结果,控制网页的表现。
说的更明白一些,实际上我的感觉DWR就是在客户端用Javascript来调用服务器端的Java服务。
技术上,DWR是基于Java,自动生成javascript代码发送到客户端,而这些javascript代码则使用AJAX技术,接受用户请求,与服务器交互。
二、配置
要使用DWR,需要有两个配置(当然了,前提要将dwr.jar放在classpath中):
1.在web.xml中加入如下Servlet信息:
1
<
servlet
>
2
<
servlet-name
>
dwr-invoker
</
servlet-name
>
3
<
display-name
>
DWR Servlet
</
display-name
>
4
<
servlet-class
>
uk.ltd.getahead.dwr.DWRServlet
</
servlet-class
>
5
<
init-param
>
6
<
param-name
>
debug
</
param-name
>
7
<
param-value
>
true
</
param-value
>
8
</
init-param
>
9
</
servlet
>
10
11
<
servlet-mapping
>
12
<
servlet-name
>
dwr-invoker
</
servlet-name
>
13
<
url-pattern
>
/dwr/*
</
url-pattern
>
14
</
servlet-mapping
>
如此,则将所有的/dwr/开头的URL请求,影射到dwr-invoker这个Servlet去处理。
2.在web.xml的同一个目录下,建立dwr.xml配置文件,在其中配置dwr组件信息,具体内容将在使用一节中讲到。
三、使用
1.一个简单的例子:
例如服务器端提供了一个POJO,叫做com.lingdot.dwrtest.TestBean,代码如下:
package
com.lingdot.dwrtest;
public
class
TestBean
{
public
int
sum(
int
a,
int
b)
{
return
a
+
b;
}
}
在dwr.xml中,作如下配置:
<
dwr
>
<
allow
>
<
create
creator
="new"
javascript
="Demo"
>
<
param
name
="class"
value
="com.lingdot.dwrtest.TestBean"
/>
</
create
>
</
allow
>
</
dwr
>
Reload这个应用,然后在浏览器中打开URL:http://localhost:8080/dwr/(假设当前应用是Tomcat的ROOT应用)。
这个页面将dwr.xml中配置的Java服务都列了出来。当前我们只配置了一个TestBean。点击TestBean,出来的页面会教你如何调用这个Bean的方法。
例如我们的TestBean提供了int sum(int a,intb)这样的方法,那么,在页面上:
1.包含如下三个js:
<
script
type
='text/javascript'src='/DWR/dwr/interface/Demo.js'></script>
<script type
='text/javascript'
src
='/DWR/dwr/engine.js'></script>
<script type
='text/javascript'
src
='/DWR/dwr/util.js'></script>
其中第三个js是可选的,一个工具集。
2.写如下代码:
<
input
type
="button"
value
="1+2=?"
onclick
="Demo.sum(1,2,reply0);"
/>
<
div
id
="m"
></
div
>
<
script
>
var reply0 = function(data)
{
if (data != null && typeof data == 'object')
alert(DWRUtil.toDescriptiveString(data, 2));
else
DWRUtil.setValue('m', DWRUtil.toDescriptiveString(data, 1));
}
</
script
>
注意,其中button上的onclick事件调用的是Demo对象的sum方法。而Demo对象是由我们在dwr.xml中配置的一个create节点中写的javascript=”Demo”属性而来的。
再注意,Demo的sum方法其实就是我们的TestBean的sum方法,但是,在参数列表的最后,新加了一个变量,叫做reply0。紧接着在下面的script代码中我们定义了这个reply0是一个函数,这个函数的功能就是如果所提供的data不为空,那么,就把它显示到一个id为”m”的html元素内部。而这个id为“m”的元素在文档中已经定义为一个div元素。由此,Demo的sum方法执行的时候实际上是调用服务器端的TestBean的sum方法,并返回结果,作为data参数,传递给reply0方法去处理,而处理的结果,就是在id=”m”的div元素内部显示出来。
四、需要注意的两个问题
1. Warning: No Converter for XXX.
dwr.xml does not have an allow entry that enables conversion of this type to Javascript. The most common cause of this problem is that XXX is a java bean and bean marshalling has not been enabled. Bean marshalling is disabled by default for security reasons.
To enable marshalling for a given bean add the following line to the allow section of your dwr.xml file:
<convert converter="bean" match="XXX"/>
It is also possible to enable marshalling for an entire package or hierachy of packages using the following:
<convert converter="bean" match="package.name.*"/>
2.不要重载方法
五、一些方法
1. DWRUtil.setValue('d0', DWRUtil.toDescriptiveString(data, 1));
DWRUtil.setValue() is a utility that takes the data you pass in the second parameter and works out how to fit it to go into the HTML element specified by id in the first parameter. This function is one of several neat Javascript utilities that make working with DWR much easier.
第一个参数是要显示内容的元素的id,如上面的例子中的m是一个div的id,第二个参数是要显示的内容
2. 方法参数以及回调函数的几种写法:
Demo.sum(1,2,{callback:function(str) { alert(str); },
timeout:5000,
errorHandler:function(message) { alert('Oops: ' + message); }
});
Remote.getData(42, function(str) { alert(str); });
3. 建立javascript对象,对应java的对象,例如:
在Java中有一个Remote类,其中的方法setPerson参数是Person类的一个对象,Java代码如下:
public
class
Remote {
public
void
setPerson(Person p) {
this
.person
=
p;
}
}
public
Person {
private
String name;
private
int
age;
private
Date[] appointments;
//
getters and setters
}
那么,在Javascript中可以这样写:
4. DWRUtil.useLoadingMessage(); 显示正在更新数据的标志
var p
=
{
//
建立与java的Person类对应的js对象
name:
"
Fred Bloggs
"
,
age:
42
,
appointments:[
new
Date(),
new
Date(
"
1 Jan 2008
"
) ]
};
Remote.setPerson(p);
分享到:
相关推荐
首先,"DWR学习笔记"提供了对DWR基础概念、核心功能以及实际应用的概述。这些笔记可能包含了DWR的基本架构,如它如何通过AJAX技术实现实时的Web交互,以及如何创建和调用服务器端的Java方法。 "DWR中文API"是DWR库...
在“DWR学习笔记及经验总结”中,我们可以期待找到以下关键知识点: 1. **DWR的基本概念**:了解DWR的核心理念,包括远程方法调用(Remote Method Invocation)、反向Ajax以及它如何通过JSON或XML格式传递数据。 2...
**DWR(Direct Web Remoting)**是一种JavaScript库,它允许Web...通过深入学习和实践"DWR学习笔记和与spring整合练习",开发者可以掌握DWR的精髓,熟练运用其与Spring的整合,打造出高效、安全、易维护的Web应用程序。
### DWR学习笔记 #### 一、DWR简介 DWR(Direct Web Remoting)是一种开源框架,专门设计用于简化Web页面与Java类之间的交互。它通过提供一种新的方法来实现Ajax技术,使得浏览器中的JavaScript代码能够如同在本地...
### dwr学习笔记pdf文件知识点概述 #### 一、DWR框架简介 - **DWR**(Direct Web Remoting)是由GetAhead公司开发的一款用于实现Ajax应用的框架。该框架的核心价值在于允许客户端JavaScript直接调用服务器端Java类...
### dwr学习笔记和总结 #### 一、DWR简介 DWR (Direct Web Remoting) 是一个简化Ajax开发的框架,它使得JavaScript能够直接调用服务器端的Java方法成为可能,无需编写复杂的Ajax代码。这极大地提高了开发效率,并...
【标题】:“DWR学习笔记-HelloWorld篇” 在IT领域,DWR(Direct Web Remoting)是一个开源的Java框架,它允许JavaScript在浏览器端直接调用服务器端的Java方法,实现了网页与服务器的实时交互,类似于Ajax技术,但...
总结来说,这个"DWR学习笔记"示例涵盖了以下知识点: 1. DWR的基本概念和工作原理,包括Reverse Ajax机制。 2. 如何在服务器端配置DWR,定义可调用的Java服务。 3. 客户端如何使用DWR的JavaScript库与服务器进行通信...
《DWR学习笔记详解》 DWR(Direct Web Remoting)是一种开源JavaScript库,它允许在Web浏览器和Java服务器之间进行实时、双向通信,极大地增强了Web应用的交互性。DWR使得开发者能够像操作本地对象一样操作服务器端...
1. **官方文档**:DWR的官方文档详细介绍了如何配置、使用以及扩展DWR,是学习的好资料。 2. **示例代码**:实践是最好的老师,通过分析和运行提供的jar文件中的示例代码,能更深入理解DWR的工作原理。 3. **社区...
**DWR(Direct Web Remoting)学习笔记** DWR是一种Java技术,用于在浏览器和服务器之间实现双向通信,使得Web应用程序能够实时更新和交互。它允许JavaScript直接调用服务器端的Java方法,就像它们是本地函数一样,...
DWR使用笔记.chm:这可能是一份详细的DWR使用手册,包含了如何集成DWR到项目中、配置DWR引擎、创建远程接口以及处理各种交互的实例。通过阅读这份笔记,你可以了解到DWR的基本概念、配置步骤以及实际应用技巧。 dwr...
DWR(Direct Web Remoting)是一种Java库,用于在Web应用程序中实现JavaScript和服务器端Java对象之间的双向通信。它使得动态、实时的Web界面成为可能,而无需刷新整个页面。以下是对DWR配置和工程实例的详细解释: ...
DWR学习资料 :DWR 3.0 上传文件.txt DWR3.0反向Ajax示例.txt DWR3.0学习笔记.txt DWR3.0学习网址.txt dwr分页.doc DWR分页代码.doc DWR中文文档.doc DWR中文文档.pdf dwr做comet的完整实现.doc Spring整合DWR comet ...