`

DWR运行原理

    博客分类:
  • DWR
阅读更多
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的工作原理,了解其内部结构和功能实现。 DWR的主要特点包括: 1. **自动类型转换**:DWR能够自动将Java对象转换为JavaScript对象,反之亦然,大大简化了数据交换的...

    dwr可以直接运行的eclipse工程

    **DWR (Direct Web Remoting) 是一个开源的Java库,它允许JavaScript在浏览器和Java服务器之间进行直接的、安全的交互。这个“dwr可以直接运行的eclipse...这对于初学者理解DWR的工作原理和提升Web开发技能非常有帮助。

    dwr实例,dwr例子,能直接运行,很实用

    这对于理解DWR的工作原理和实际应用非常有帮助。 DWR的核心组件包括: 1. **配置**:DWR需要一个配置文件(通常为`dwr.xml`),用于指定哪些Java类和方法可以被远程调用,以及一些其他设置。 2. **引擎(Engine)**...

    DWR的学习资料,DWR学习必备

    DWR开发培训.ppt、DWR.ppt:这些可能是DWR的培训演示文稿,包含了一系列主题的讲解,可能涵盖了DWR的工作原理、核心组件、使用示例和最佳实践。通过这些PPT,你可以系统地学习DWR,并通过实例加深理解。 DWR与界面...

    dwr demo dwr简单使用

    通过这个简单的DWR演示项目,你可以深入理解DWR的工作原理,掌握如何配置DWR、编写可被客户端调用的Java方法,以及如何在JavaScript中使用这些方法。这对于想要学习和使用DWR来构建动态Web应用的初学者来说是一个很...

    DWR框架学习demo

    - **jar包**: 包含DWR运行所需的库文件,这些库需要添加到Web应用的类路径中。 **6. DWR与其他AJAX框架的比较** - DWR与jQuery, Prototype等JavaScript库不同,它专注于提供服务器端和客户端的通信层,而不是UI...

    DWR介绍

    具体来说,当DWR运行时,会根据配置生成一个JavaScript库,这个库包含了对服务器端JavaBean的封装,从而允许前端代码直接调用这些JavaBean的方法。 #### 三、DWR的组件 - **DWR的JavaScript引擎**:负责处理Ajax...

    DWR的基本原理以及前后台互相调用并整合SPRING的简易DEMO

    在这个“DWR的基本原理以及前后台互相调用并整合SPRING的简易DEMO”中,我们将探讨DWR的核心概念和如何将它与Spring框架集成。首先,我们需要理解DWR的工作机制: 1. **DWR Engine**:这是DWR的核心组件,负责处理...

    DWR可运行实例

    这个"可运行实例"提供了DWR的实际操作示例,让你能够直接运行并理解其工作原理,非常适合初学者和开发者快速上手。下面将详细解释DWR的核心概念和它在消息推送中的应用。 DWR允许JavaScript与服务器端的Java对象...

    Dwr例子带注释

    通过研究这个"TestDwr"项目,你可以了解到如何在实际应用中集成和使用DWR,理解DWR的工作原理,并掌握创建交互式Web应用的基本技能。这个简单的例子可以帮助你快速上手DWR,为后续深入学习和实践打下基础。

    DWR中文文档 (DWR 2.0)

    **工作原理**:通过动态生成Java类对应的JavaScript代码来实现从客户端到服务器端的远程调用。这一过程隐藏了所有与网络通信相关的复杂性,使得开发者能够专注于业务逻辑而非底层技术实现。 #### 二、DWR入门案例...

    dwr.jar/dwr-2.0.5-src.zip/dwr.zip

    这是DWR的核心库文件,包含了运行DWR所需的所有类和资源。当你在项目中引入dwr.jar,你可以使用DWR提供的API来实现Ajax功能。这个jar文件包括了各种Servlet、Filter、JavaScript接口和辅助类,使得开发者可以轻松地...

    dwr+oracle数据操作

    通过分析和运行这些示例,你可以更好地理解DWR在实际应用中的工作原理和使用方法。 7. **总结** DWR为开发人员提供了一种强大的工具,使得Web应用能够更高效地与服务器进行数据交互,特别是在处理与Oracle这样的...

    dwr comet的MyEclipse工程,可直接运行

    标题 "dwr comet的MyEclipse工程,可直接运行" 提供了我们今天要讨论的核心内容,即一个基于DWR...同时,通过解压并研究工程中的文件,你可以深入理解DWR和Comet的实现原理,以及如何在MyEclipse中进行配置和调试。

    dwr.jar包+教程.pdf.ppt

    DWR工作原理是通过动态把Java类生成为Javascript。它的代码就像Ajax魔法一样,你感觉调用就像发生在浏览器端,但是实际上代码调用发生在服务器端,DWR负责数据的传递和转换。这种从Java到JavaScript的远程调用功能的...

    dwr教程+dwr.jar+util.js+engine.js

    这两个文件是DWR运行的基础,通常会被包含在HTML页面中,以便在客户端执行DWR相关的操作。 `DWR_CN_Document.pdf` 可能是DWR的中文文档,对于学习和理解DWR的工作原理、配置方法、API使用等提供了详细的指导。这份...

    dwr.rar_dwr jar_dwr j_dwr jar_dwr.j_dwr.jar2

    这个"**dwr.rar**"压缩包包含了DWR的核心组件,即**dwr.jar**文件,它是DWR运行所必需的。DWR的主要目的是简化AJAX(异步JavaScript和XML)开发,通过提供一种方式,使得前端JavaScript可以直接调用后端Java方法,...

    DWR框架DEMO下载

    通过分析和运行这个DEMO,你可以深入理解DWR的工作原理,以及如何在实际项目中利用DWR实现高效、便捷的前后台交互。这将对提升你的Web开发技能,特别是对于需要实时更新和异步交互的应用场景,具有很大的帮助。

    dwr3_helloword入门

    DWR (Direct Web Remoting) 是一种开源技术,允许JavaScript在浏览器端直接调用Java方法,实现Web应用程序的Ajax功能。...通过这个简单的实例,你可以理解DWR的基本工作原理和配置过程,为后续的Ajax开发打下基础。

    DWR-jar包+源码

    Direct Web Remoting ...总的来说,这个压缩包提供了完整的DWR运行环境和源码,对于开发基于AJAX的Web应用,或深入学习DWR的工作原理,都是非常宝贵的资源。无论是初学者还是经验丰富的开发者,都可以从中受益匪浅。

Global site tag (gtag.js) - Google Analytics