0 0

请教DWR运行原理!15

  最近再看DWR,也做了个小例子,也知道写的步骤,也能笼统的说出其中原理:通过代理模式,对于服务器端的JAVABEAN,可以在客户端生成相应的JS对象,当调用客户端的方法时,其实是调用服务器端的方法.
  但再细究下去,我就有点迷糊了?它的具体运行原理不是太了解,也搜了网上的帖子什么的,总感觉讲的不到点子上.现在我就把我自己的疑惑提出来,望大家给解答一下,如果我哪说的不对,也请指出,谢谢!
我先把几个文件帖出来,这样比较直观点;

-----------------------------------------
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 javascript="Hello" creator="new">
<param name="class" value="testDwr.SayHello"/>
</create>
</allow>
</dwr>

-----------------------------------------

SayHello.java
public class SayHello{
public String sayHello( String user ){//参数是字符串
return "hello " + user ;
}
}
-----------------------------------------
sayhello.html


<html>
<head>
<script type="text/javascript" src="/TestStruts/dwr/interface/Hello.js"></script>
  <script type="text/javascript" src="/TestStruts/dwr/engine.js"></script>          <script type="text/javascript">
function doclick(){
var name = document.getElementById( "name" ).value ;
Hello.sayHello( name , function(data){
var div = document.getElementById( "msg" );
div.innerHTML = data ;
} );
}

</script>
</head>
<body>
Enter your name :
<input type="text" id="name"/>
<input type="button" value="say hello" onclick="doclick();" />
<br/>
<div id="msg" style="background-color:gray;color:white;font-size:30px;font-weight:bold">
</div>


</body>
</html>

-----------------------------------------
我现在想知道:整个程序基本的工作流程是什么?即从doclick()开始,一步一步过程?以下是我的描述的,也不知道对不对.
当浏览器加载sayhello.html页面时,解析到<script type="text/javascript" src="/TestStruts/dwr/interface/Hello.js"></script>时,根据路径被dwrservlet捕获,dwrservlet会生成代理类
当点击按钮触发这个事件时,执行doclick()函数,因为里面的方法Hello.sayHello()它其实是调用Hello.js里生成的对象方法,然后执行 dwr.engine._execute(Hello._path, 'Hello', 'sayHello', p0, callback);而dwr.engine._execute()方法又在engine.js里,所以又会执行里面的这个方法(因为engine.js里已经封装了AJAX基本的实现细节,即生成XMLHTTPREQUEST,JS和JAVA数据的自动转换),返回一个回调函数,我们在sayhello.html里处理这个回调函数的返回值,即是我们最终从服务器端想要得到的数据.


以上的描述,是我对DWR工作原理只能理解到的层次,至于Hello.js 是怎么生成的(有人说看一下dwrserlet,我也看别人分析源码但感觉还是说的不透彻,肯请哪位能说的透一点),engine.js内部怎么工作的,我很想知道,有人说看一下源码不就知道了,我也试着打开源码,说实话,一看头就迷糊,请大家能给我再具体展开描述一下或者告诉我到底应该怎么去看,谢谢!这个已经困扰我几天了






================================
突然又有一个小疑问:
用最传统方法写AJAX程序时,
  createXMLHttpRequest();
  httpRequest.onreadystatechange=validateHandler;//---A
  httpRequest.open( "GET" , url);
  httpRequest.send( null ) ;
我们通常要写以上几个步骤,在A处为什么我不写成这样呢?httpRequest.onreadystatechange=validateHandler();
即加个括号.请问这两者有什么区别?


问题补充:
用最传统方法写AJAX程序时,
  createXMLHttpRequest();
  httpRequest.onreadystatechange=validateHandler;//---A
  httpRequest.open( "GET" , url);
  httpRequest.send( null ) ;
我们通常要写以上几个步骤,在A处为什么我不写成这样呢?httpRequest.onreadystatechange=validateHandler();
即加个括号.请问这两者有什么区别?

上面的问题,我认同black.angel的回答.谢谢.至于最重要的原理,我觉得哪位能给出满意答案.谢谢
DWR 
2009年2月23日 14:48

3个答案 按时间排序 按投票排序

0 0

晚上我发资料给你DWR中文文档,上面应该有

2009年2月24日 09:18
0 0

用最传统方法写AJAX程序时,
  createXMLHttpRequest();
  httpRequest.onreadystatechange=validateHandler;//---A
  httpRequest.open( "GET" , url);
  httpRequest.send( null ) ;
我们通常要写以上几个步骤,在A处为什么我不写成这样呢?httpRequest.onreadystatechange=validateHandler();
即加个括号.请问这两者有什么区别?



我先回答这个问题

  httpRequest.onreadystatechange=validateHandler;

实际上是个回调方式  validateHandler是个方法.
加括号和不加括号都是一样.

像有时候你这个方法需要传入参数,那就可以加括号加参数..两者没什么实质区别



你说的DWR原理..首先我从来没学过DWR,


不过像楼上所说 DWR的对象可以对应到JAVA里面的LIST MAP JAVABEAN里面去..怎么对应呢..DWR里面应该有个自己的类而这个类就是通过.
<create javascript="Hello" creator="new">
<param name="class" value="testDwr.SayHello"/>
</create>

看见没 testDwr.SayHello 如果我猜的没错这个就是 类的路劲..为什么要这个东西.?因为DWR框架需要找到这个类.然后利用反射 来吧你JS得到的值 封装到DWR对象里面,然后注入到JAVABEAN的属性里面去..即可

2009年2月23日 17:10
0 0

首先来帮你回答这个问题
httpRequest.onreadystatechange=validateHandler();

这里的 validateHandler 也就是一个方法指针.
指向定义的 validateHandler 方法.
如果是 validateHandler() 那么结果是 validateHandler 的返回值.

DWR 你就这样理解吧

Java 中有一个 Map 对象,通过配置把前端的属性比如

var obj = {
name:'michael jordan',
age:'23',
number:'23'
........
}

通过了配置和转换变成了Java的一个 map 对象.反之亦然.java中的 map 结构,也变成了上叙 js 结构....核心就是配置生成的JS文件和导入的 dwr 包中的方法.

因为 js 中没有 map 不过可以通过 array 中套 Array 来实现 Map 的结构.

2009年2月23日 16:42

相关推荐

    dwr分页源码!

    DWR的工作原理是通过JavaScript调用服务器端的Java方法,将结果返回到前端,而无需刷新整个页面。分页功能通常涉及以下步骤: 1. **前端交互**:在JavaScript中,你可以使用DWR的API来发起一个远程调用,例如`...

    dwr配置文件!开发,培训,学习

    【DWR配置文件详解】 DWR(Direct Web Remoting)是一种强大的AJAX(Asynchronous JavaScript and XML)框架,专门用于Java开发,它允许在Web浏览器中通过JavaScript直接调用后台的Java方法,实现了客户端和服务器...

    dwr原理深入透彻讲解

    理解DWR的这些工作原理对于开发人员来说至关重要,它能帮助你更有效地利用DWR进行前后端交互,实现高效、流畅的Web应用体验。通过深入研究DWR的内部机制,你可以更好地优化代码,解决可能出现的问题,以及利用其特性...

    Ajax与DWR!!

    Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。...在实际项目中,应充分考虑性能优化、安全性以及兼容性等问题,确保应用在各种浏览器和设备上都能正常运行。

    dwr源码运行即可

    导入并运行这些源码,可以让开发者深入理解DWR的工作原理,了解其内部结构和功能实现。 DWR的主要特点包括: 1. **自动类型转换**:DWR能够自动将Java对象转换为JavaScript对象,反之亦然,大大简化了数据交换的...

    dwr真真的视 频!

    网上的dwr视频真的少!而且只是入门而已的视频!我找了很久!终于找到了! 案列你们自己找吧! 网上一大把! 我这里只传了个下载地址! 自己去下 ssh dwr整合都有!

    dwr dwrdwr

    dwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwr

    ajax框架dwr开发中文文档!

    DWR (Direct Web Remoting) 是一个开源的Java库,用于在Web应用程序中实现Ajax(Asynchronous JavaScript and XML)功能。Ajax技术允许浏览器与服务器进行异步通信,从而提升用户体验,使得网页无需刷新就能更新部分...

    dwr可以直接运行的eclipse工程

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

    dwr源码包,dwr.jar包下载

    1、 导入dwr.jar包 2、 在web.xml中配置dwr,如下: &lt;!-- 配置DWR --&gt; &lt;servlet-name&gt;dwr-invoker org.directwebremoting.servlet.DwrServlet &lt;init-param&gt; &lt;param-name&gt;debug&lt;/param-name&gt; ...

    DWR应用示例源代码,很好地说明了dwr工作原理

    在这个"DWR应用示例源代码"中,我们可以深入理解DWR的工作原理及其实际应用。 DWR的核心概念包括三个主要部分:`dwrc.js`(客户端库)、`DWR Engine`(服务器端组件)和`Servlet`(DWR引擎的入口点)。以下是对这些...

    dwr笔记 dwr自学资料

    本笔记将深入探讨DWR的核心概念、工作原理以及实际应用。 一、DWR简介 DWR的主要目标是消除传统的HTTP请求-响应模式的局限性,提供一种更加高效、灵活的远程调用机制。通过DWR,开发者可以在浏览器中编写JavaScript...

    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实现ajax功能ajax+dwr

    `dwr需要用的jar`是DWR运行所需的库文件。`Ajax无刷新页的业务逻辑实现`可能探讨了如何在不刷新页面的情况下实现复杂的业务逻辑。`ajaxReg(解决中文问题)`可能解决了在使用Ajax注册功能时遇到的中文字符编码问题。 ...

    DWR介绍

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

    DWR原理及中文文档

    DWR(Direct Web Remoting)是一种Java库,用于在Web应用程序中实现JavaScript和服务器端Java对象之间的双向通信。...通过深入学习DWR的原理和实践,开发者可以构建出更具吸引力和响应性的Web应用。

    dwr.jar 以及dwr配置文件

    在这个压缩包中,包含的核心组件是“dwr.jar”,这是DWR框架的主要运行时库,以及“dwr.xml”配置文件,它是DWR进行自定义设置的关键。 首先,我们来详细了解“dwr.jar”。这个JAR文件包含了所有DWR运行所需的类和...

    SpringBoot整合DWR3.0.2-RELEASE独立部署示例代码以及修改过的DWR3.0.2-RELEASE资源JAR包

    其二就是解决了集成后的SpringBoot项目在开发环境和外置Tomcat环境下运行正常,但是以内置Tomcat独立JAR形式运行时,DWR框架无法初始化,项目无法正常运行的问题,这块主要修改了DWR源码资源加载相关代码。...

Global site tag (gtag.js) - Google Analytics