1,在index.html里面我们嵌入
<script type='text/javascript' src='../dwr/engine.js'> </script>
<script type='text/javascript' src='../dwr/util.js'> </script>
<script type='text/javascript' src='../dwr/interface/Demo.js'> </script>
前面两个都是DWR系统默认需要加载的,Demo.js是Demo.java所对应的。按理论,只要在web.xml和dwr.xml配置好,那么我们就可以在客户端操作Demo.js,类似于操作服务器端的Demo.js。
HTML source:
<p>
Name:
<input type="text" id="demoName"/>
<input value="Send" type="button" onclick="update()"/>
<br/>
Reply: <span id="demoReply"></span>
</p>
Javascript source:
function update() {
var name = dwr.util.getValue("demoName");
Demo.sayHello(name, function(data) {
dwr.util.setValue("demoReply", data);
});
}
Java source:
package org.getahead.dwrdemo.simpletext;
public class Demo {
public String sayHello(String name) {
return "Hello, " + name;
}
}
dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="Demo">
<param name="class" value="org.getahead.dwrdemo.simpletext.Demo"/>
</create>
</allow>
</dwr>
在浏览器第一次加载本页面时,浏览器第一步发现<script type='text/javascript' src='../dwr/engine.js'> </script>,根据web.xml关于dwr的配置,系统会激发Servlet的POST方法,向客户端输出engine.js文件流,这个文件你可以在IE的缓存里面发现,当然,程序会在最后输出一刻比较客户端是否已经存在该文件,如果要输出的文件流大小和和该文件大小一致,就不输出了,同样util.js、Demo.js也是这么输出的。那么看看Demo.js文件里面的内容如下:
if (typeof this['Person'] != 'function') {
function Person() {
this.address = null;
this.phoneNumber = null;
this.name = null;
this.id = 0;
this.salary = 0;
}
}
// Provide a default path to dwr.engine
if (typeof this['dwr'] == 'undefined') this.dwr = {};
if (typeof dwr['engine'] == 'undefined') dwr.engine = {};
if (typeof this['Demo'] == 'undefined') this.Demo = {};
Demo._path = '/dwr/dwr';
Demo.sayHello = function(p0, callback) {
return dwr.engine._execute(Demo._path, 'Demo', 'sayHello', p0, callback);
};
Demo.getInclude = function(callback) {
return dwr.engine._execute(Demo._path, 'Demo', 'getInclude', callback);
};
这样我们就知道了,实际上Demo.java类的sayHello方法已经被解释到Demo.js中了,只不过后面的调用还不是很清楚而已。
继续!
public String sayHello(String name) {
return "Hello, " + name;
}
翻译成
Demo._path = '/dwr/dwr';
Demo.sayHello = function(p0, callback) {
return dwr.engine._execute(Demo._path, 'Demo', 'sayHello', p0, callback);
};
在调用engine.execute()方法时,最终采用无刷新访问服务器技术。
采用该技术的关键问题是两个参数,一个是url,往什么地方发送;一个是doc,发送什么内容
通过跟踪engine.js我们知道
url=/dwr/dwr/call/plaincall/Demo.sayHello.dwr
发送内容如下:
callCount=1
windowName=DWR-442B435899
c0-scriptName=Demo
c0-methodName=sayHello
c0-id=0
c0-param0=string:Joe
batchId=1
page=/dwr/simpletext/index.html
httpSessionId=
scriptSessionId=1CC3A.0A3
实际上url=/dwr/dwr/call/plaincall/Demo.sayHello.dwr,转向的是 DwrServlet,DwrServlet实际上获取了两部分信息,一部分是url,根据这个能够解析到我们的目标java类、方法,另外一部分是发送信息包,实际上这就是SayHello所需要的参数输入信息,最后,返回数据,这些数据格式通过response返回,在engine.js中对应于 return batch.reply;通过解析返回对象,采用javascirpt将数据动态刷新到页面。
至此,dwr的核心原理,基本清晰
分享到:
相关推荐
导入并运行这些源码,可以让开发者深入理解DWR的工作原理,了解其内部结构和功能实现。 DWR的主要特点包括: 1. **自动类型转换**:DWR能够自动将Java对象转换为JavaScript对象,反之亦然,大大简化了数据交换的...
**DWR (Direct Web Remoting) 是一个开源的Java库,它允许JavaScript在浏览器和Java服务器之间进行直接的、安全的交互。这个“dwr可以直接运行的eclipse...这对于初学者理解DWR的工作原理和提升Web开发技能非常有帮助。
这对于理解DWR的工作原理和实际应用非常有帮助。 DWR的核心组件包括: 1. **配置**:DWR需要一个配置文件(通常为`dwr.xml`),用于指定哪些Java类和方法可以被远程调用,以及一些其他设置。 2. **引擎(Engine)**...
DWR开发培训.ppt、DWR.ppt:这些可能是DWR的培训演示文稿,包含了一系列主题的讲解,可能涵盖了DWR的工作原理、核心组件、使用示例和最佳实践。通过这些PPT,你可以系统地学习DWR,并通过实例加深理解。 DWR与界面...
通过这个简单的DWR演示项目,你可以深入理解DWR的工作原理,掌握如何配置DWR、编写可被客户端调用的Java方法,以及如何在JavaScript中使用这些方法。这对于想要学习和使用DWR来构建动态Web应用的初学者来说是一个很...
- **jar包**: 包含DWR运行所需的库文件,这些库需要添加到Web应用的类路径中。 **6. DWR与其他AJAX框架的比较** - DWR与jQuery, Prototype等JavaScript库不同,它专注于提供服务器端和客户端的通信层,而不是UI...
具体来说,当DWR运行时,会根据配置生成一个JavaScript库,这个库包含了对服务器端JavaBean的封装,从而允许前端代码直接调用这些JavaBean的方法。 #### 三、DWR的组件 - **DWR的JavaScript引擎**:负责处理Ajax...
在这个“DWR的基本原理以及前后台互相调用并整合SPRING的简易DEMO”中,我们将探讨DWR的核心概念和如何将它与Spring框架集成。首先,我们需要理解DWR的工作机制: 1. **DWR Engine**:这是DWR的核心组件,负责处理...
这个"可运行实例"提供了DWR的实际操作示例,让你能够直接运行并理解其工作原理,非常适合初学者和开发者快速上手。下面将详细解释DWR的核心概念和它在消息推送中的应用。 DWR允许JavaScript与服务器端的Java对象...
通过研究这个"TestDwr"项目,你可以了解到如何在实际应用中集成和使用DWR,理解DWR的工作原理,并掌握创建交互式Web应用的基本技能。这个简单的例子可以帮助你快速上手DWR,为后续深入学习和实践打下基础。
**工作原理**:通过动态生成Java类对应的JavaScript代码来实现从客户端到服务器端的远程调用。这一过程隐藏了所有与网络通信相关的复杂性,使得开发者能够专注于业务逻辑而非底层技术实现。 #### 二、DWR入门案例...
这是DWR的核心库文件,包含了运行DWR所需的所有类和资源。当你在项目中引入dwr.jar,你可以使用DWR提供的API来实现Ajax功能。这个jar文件包括了各种Servlet、Filter、JavaScript接口和辅助类,使得开发者可以轻松地...
通过分析和运行这些示例,你可以更好地理解DWR在实际应用中的工作原理和使用方法。 7. **总结** DWR为开发人员提供了一种强大的工具,使得Web应用能够更高效地与服务器进行数据交互,特别是在处理与Oracle这样的...
标题 "dwr comet的MyEclipse工程,可直接运行" 提供了我们今天要讨论的核心内容,即一个基于DWR...同时,通过解压并研究工程中的文件,你可以深入理解DWR和Comet的实现原理,以及如何在MyEclipse中进行配置和调试。
DWR工作原理是通过动态把Java类生成为Javascript。它的代码就像Ajax魔法一样,你感觉调用就像发生在浏览器端,但是实际上代码调用发生在服务器端,DWR负责数据的传递和转换。这种从Java到JavaScript的远程调用功能的...
这两个文件是DWR运行的基础,通常会被包含在HTML页面中,以便在客户端执行DWR相关的操作。 `DWR_CN_Document.pdf` 可能是DWR的中文文档,对于学习和理解DWR的工作原理、配置方法、API使用等提供了详细的指导。这份...
这个"**dwr.rar**"压缩包包含了DWR的核心组件,即**dwr.jar**文件,它是DWR运行所必需的。DWR的主要目的是简化AJAX(异步JavaScript和XML)开发,通过提供一种方式,使得前端JavaScript可以直接调用后端Java方法,...
通过分析和运行这个DEMO,你可以深入理解DWR的工作原理,以及如何在实际项目中利用DWR实现高效、便捷的前后台交互。这将对提升你的Web开发技能,特别是对于需要实时更新和异步交互的应用场景,具有很大的帮助。
DWR (Direct Web Remoting) 是一种开源技术,允许JavaScript在浏览器端直接调用Java方法,实现Web应用程序的Ajax功能。...通过这个简单的实例,你可以理解DWR的基本工作原理和配置过程,为后续的Ajax开发打下基础。
Direct Web Remoting ...总的来说,这个压缩包提供了完整的DWR运行环境和源码,对于开发基于AJAX的Web应用,或深入学习DWR的工作原理,都是非常宝贵的资源。无论是初学者还是经验丰富的开发者,都可以从中受益匪浅。