通过前面五章学习,对DWR整体有所了解,但是我仍然对核心细节不是很清楚。我最后的办法就是单步调试,调试之后将所有东西串一串,DWR的原理就清楚了,搞清楚核心生产线,其他全是辅助的,没必要再分析了。老外聪明啊,服。
我们以DWR的第一个样例为例Dynamically Text
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=1DWR原理
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进行前后端交互,实现高效、流畅的Web应用体验。通过深入研究DWR的内部机制,你可以更好地优化代码,解决可能出现的问题,以及利用其特性...
DWR(Direct Web Remoting)是一种Java库,用于在Web应用程序中实现JavaScript和服务器端Java对象之间的双向通信。...通过深入学习DWR的原理和实践,开发者可以构建出更具吸引力和响应性的Web应用。
**DWR原理** DWR作为一个Web应用的Servlet部署,它会为每个公开的Java类动态生成包含在Web页面中的JavaScript存根函数。这些函数在后台执行XMLHttpRequest,向DWR Servlet发送请求。DWR将请求转换为对服务器端Java...
#### DWR原理分析 DWR的核心原理基于Ajax技术和Java反射机制。当前端发起请求时,DWR会利用Ajax异步发送请求至服务器,服务器端通过反射机制找到对应的Java方法并执行。执行完毕后,结果将以JavaScript可理解的格式...
**DWR原理**: 1. **前端调用**:前端JavaScript调用DWR生成的对象方法,发送POST请求到`DwrServlet`。 2. **请求处理**:`DwrServlet`捕获请求,解析请求头和内容,获取JavaScript对象名、方法名和参数。 3. **映射...
介绍DWR原理及开发培训资料,来源于生活。
本笔记将深入探讨DWR的核心概念、工作原理以及实际应用。 一、DWR简介 DWR的主要目标是消除传统的HTTP请求-响应模式的局限性,提供一种更加高效、灵活的远程调用机制。通过DWR,开发者可以在浏览器中编写JavaScript...
DWR开发培训.ppt、DWR.ppt:这些可能是DWR的培训演示文稿,包含了一系列主题的讲解,可能涵盖了DWR的工作原理、核心组件、使用示例和最佳实践。通过这些PPT,你可以系统地学习DWR,并通过实例加深理解。 DWR与界面...
这份文档对于理解DWR的工作原理和使用方法至关重要,特别是对于中文用户来说。DWR2.0文档可能会涵盖以下几个方面: - **安装与配置**:介绍如何将DWR添加到现有项目中,包括引入jar文件、配置web.xml和dwr.xml文件...
通过这个简单的DWR演示项目,你可以深入理解DWR的工作原理,掌握如何配置DWR、编写可被客户端调用的Java方法,以及如何在JavaScript中使用这些方法。这对于想要学习和使用DWR来构建动态Web应用的初学者来说是一个很...
在这个“DWR的基本原理以及前后台互相调用并整合SPRING的简易DEMO”中,我们将探讨DWR的核心概念和如何将它与Spring框架集成。首先,我们需要理解DWR的工作机制: 1. **DWR Engine**:这是DWR的核心组件,负责处理...
1. **DWR的工作原理**:DWR通过在服务器上设置一个代理,允许JavaScript调用Java方法,就像它们是本地函数一样。它处理了跨域问题,自动序列化和反序列化数据,并且支持异步调用,减少了页面刷新的需求。 2. **DWR...
在这个"DWR应用示例源代码"中,我们可以深入理解DWR的工作原理及其实际应用。 DWR的核心概念包括三个主要部分:`dwrc.js`(客户端库)、`DWR Engine`(服务器端组件)和`Servlet`(DWR引擎的入口点)。以下是对这些...
**工作原理**:通过动态生成Java类对应的JavaScript代码来实现从客户端到服务器端的远程调用。这一过程隐藏了所有与网络通信相关的复杂性,使得开发者能够专注于业务逻辑而非底层技术实现。 #### 二、DWR入门案例...
#### 二、DWR的工作原理 DWR的核心在于其能够动态生成用于调用服务器端JavaBean方法的JavaScript库。具体来说,当DWR运行时,会根据配置生成一个JavaScript库,这个库包含了对服务器端JavaBean的封装,从而允许前端...
通过研究这个"TestDwr"项目,你可以了解到如何在实际应用中集成和使用DWR,理解DWR的工作原理,并掌握创建交互式Web应用的基本技能。这个简单的例子可以帮助你快速上手DWR,为后续深入学习和实践打下基础。
**DWR(Direct Web Remoting)框架学习指南** DWR,全称为Direct Web Remoting,是一种在Web应用程序中实现客户端与服务器端之间直接...理解DWR的工作原理以及如何配置和使用,对于开发人员来说是非常有价值的技能。
DWR (Direct Web Remoting) 是一个开源框架,它允许JavaScript在浏览器端直接调用Java方法,从而实现AJAX的应用。...对于任何希望深入了解DWR工作原理的开发者来说,阅读源代码都是一个有价值的学习过程。
1. **DWR基本原理** DWR的核心是通过HTTP协议实现在客户端JavaScript和服务器端Java之间的通信。它提供了一种动态、安全的方式,使得JavaScript可以直接调用服务器上的Java对象和方法,而无需处理复杂的AJAX...
通过分析和运行这个DEMO,你可以深入理解DWR的工作原理,以及如何在实际项目中利用DWR实现高效、便捷的前后台交互。这将对提升你的Web开发技能,特别是对于需要实时更新和异步交互的应用场景,具有很大的帮助。