`

ajax之旅--dwr探密(转载)

    博客分类:
  • dwr
阅读更多
ajax是Asynchronous JavaScript and XML的简称,是一种由javascript通过XmlHttpRequest与服务器交互更新数据的一种异步请求的技术,因为通过ajax你只需传递需要更新的数据,而不是整个页面,能有效的减少页面和服务器端的数据传输,通过javascript更新页面时可以做到页面不刷新,所以ajax很适合用于局部频繁更新的页面。

我一直都对ajax提不起兴趣,理由很简单,也很偏激:我是一个java狂热者,并固执的认为java最好的用途就是在中间件上,还有java代码能带给系统很好的重用性和可维护性。而ajax处理的方面却是在最不被我看上的表示层上,而表示层一般都不被我系统的考虑范围之内,觉得这是系统的外衣,是有可能要经常变换的。所以纵是很早之前就已经知道有ajax,但一直没有更深的去了解它。

事实上在ajax 这个概念提出来之前,我们已经在项目中采用了相同的技术,我们大多的做法是通过增加一个隐含的iFrame,通过iFrame向服务器提交请求获取数据和页面进行交互,这完全的实现了ajax的功能,但这种做法很繁琐,实现起来工作量也很大,而且在代码上也会相当的冗余,不怎么优美。而ajax的java 框架dwr使这一过程变得简单,在此特别感谢Getahead IT咨询公司的Joe Walker和他的团队开发出DWR这样神奇的工具并与大家分享它!

现在我们来看看dwr是怎么处理相应的关系的

ajax是通过javascript向服务器发出请求来获取相应的数据的,所以首先,dwr需要你在web部署了一个servlet--DWRServlet,DWRServlet在初始化的时候会去读dwr的发布文件/WEB-INF/dwr.xml

在解释dwr.xml文件之前我们先来看看两个重要的概念,creator和converter这两个从它们的字面意义就很容易看出它们的作用
creator在dwr中主要的职责就是把用户发布在dwr.xml中的class进行实例化,
converter的职责是在接受请求时把客户端的javascript对象转换成服务器端的java对象,通过调用发布的java bean后,在把返回的java的对象转化成javascript的对象给客户端调用

dwr.xml有两个主要的元素:init,arrow
init是用来定义你可以使用的converter和creator它们都有一个id和class的属性:id是一个标志可以在arrow元素中被引用于配置create和convert的,class是具体的类,的其定义样式如下:
    <creator id="new" class="uk.ltd.getahead.dwr.create.NewCreator"/>
    <converter id="bean" class="uk.ltd.getahead.dwr.convert.BeanConverter"/>
arrow是用于定义你允许dwr创建和转换的java bean,包含两种类型:create和convert。其标签样式如下:
    <create creator="new" javascript="planApp">
      <param name="class" value="com.ionglobal.erp.app.PlanApp" />
    </create>
    <convert converter="servlet" match="javax.servlet.ServletConfig"/>

create就是配置哪些类是可以由dwr创建的,其包含creator,javascript,creator也是通过init元素进行定义的,creator还有一个javascript的属性,其定义的值就是在javascript中对应的对象名称
convert就是配置哪些java bean是可以通过dwr转换的,其包含converter,match属性,coverter就是选择转换的converter由init中配置,match就是可以转换的java bean

dwr 已经为你提供了大量的creator和converter如:jsf,none,new,pageflow,spring,script,struts这几种creator,和null,enum,primitive,bignumber,string,array,map,collection, date,dom,dom4j,jdom,xom,servlet,bean,object,hibernate这几种convertor
如果你觉得dwr提供的creator和converter还不能满足你的需求时还可以定制自己的creator和converter把它们部署到dwr.xml中,并把要发布的bean和method放到creators中,

如果你使用dwr的测试页面,你还可以得到一个以你配置的js文件,js文件对你配置的creator和method进行了映射,其中的planApp是你发布的scriptName,get是发布调用的class方法,p0是方法传入的参数,callback是处理判断成功的标志。
planApp.get = function(p0, callback) {
    DWREngine._execute(planApp._path, 'planApp', 'get', p0, callback);
}


现在我们看看dwr在页面上怎样跟服务器交互,dwr为我们提供了一个叫engine.js文件中定义一个DWREngine的javascript对象,其主要功能是处理页面和servlet之间的数据传递和转换。当中有三个函数需要特别的留意

1、_execute由界面的javascript调用根据传入的参数进行一系列的初始化,并调用调用endBatch调用_sendData与服务器的servlet进行交互
其传入的参数主要有
path——在/WEB-INF/web.xml配置的url-pattern,
scriptName——/WEB-INF/dwr.xml中creator的javascript的名称,
methodName——creator的方法名,
vararg_params——传进的值和一些控制参数

2、 _sendData dwr通过这个方法对传入的参数生成与servlet进行交互的javascript语句,它做了很多的工作以保证你的提交是真正的有效,比如判断客户的浏览器是支持XMLHttpRequest还是支持ActiveXObject,如果两种方式都不行它还会采取iFrame提交的方式与服务器进行交互获取数据

3、_stateChange DWREngine在判断数据传输完成之后,会根据返回的字符串构造成一个对象

你可以通过修改下面的javascript语句获取返回的javascript对象和你的页面进行交互显示


<script type='text/javascript'>
    var reply0 = function(data)
    ...{
      if (data != null && typeof data == 'object') alert(DWRUtil.toDescriptiveString(data, 2));
      else DWRUtil.setValue('d0', DWRUtil.toDescriptiveString(data, 1));
    }
  </script>

在util.js文件定义了一个DWRUtil对象,里面主要有对select的处理和table的处理的方法,具体的使用就不在这里说明。
分享到:
评论

相关推荐

    java之ajax开发---dwr基础(适合基础开发ajax)

    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; &lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;debug&lt;/param-name&gt; &lt;param-value&gt;true&lt;/param-value&gt; &lt;/init-param&gt; ...

    服务器端ajax框架--------DWR实践总结

    **服务器端Ajax框架——DWR实践总结** DWR(Direct Web Remoting)是一个开源的Java框架,它使得在Web应用程序中实现Ajax(异步JavaScript和XML)功能变得更加简单。DWR允许JavaScript在客户端与服务器端Java对象...

    AJAX--dwr开发及应用

    \第五部分ajax\第15章 AJAX--dwr开发及应用\第15章 AJAX--dwr开发及应用.ppt )

    ---------DWR中文文档

    Direct Web Remoting (DWR) 是一个开源Java库,它允许Web应用程序在客户端JavaScript和服务器端Java代码之间进行实时通信,无需使用XMLHttpRequest或JSONP等传统Ajax技术。DWR通过提供一套简单易用的API,使得开发...

    AJAX高级的应用--DWR框架使用的学习笔记

    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; &lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;debug&lt;/param-name&gt; &lt;param-value&gt;true&lt;/param-value&gt; ...

    ajax--dwr测试

    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; &lt;display-name&gt;DWRServlet&lt;/display-name&gt; &lt;description&gt;DirectWebRemoterServlet &lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;/servlet-class&gt; &lt;init...

    疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发(part01)

    《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是疯狂Java体系丛书之一,前8章基本以XHTML、JavaScript和DOM编程为主,无须任何基础即可阅读;第9章以后的内容则需要掌握Spring、Hibernate等Java ...

    AJAX --DWR

    **AJAX (Asynchronous JavaScript and XML) 和 DWR (Direct Web Remoting) 是Web开发中的两个重要技术,它们主要用于创建富互联网应用程序(Rich Internet Applications,RIA)。** **AJAX** 是一种在不重新加载...

    Dwr 学习研究应用--Spring和DWR的整合

    4. **DWR-Spring集成**:为了让DWR能够找到Spring容器中的bean,你需要创建一个SpringDwrServlet,它是DWR的扩展,能够从Spring上下文中查找bean。这通常涉及到修改web.xml配置文件: ```xml &lt;servlet-name&gt;DWR...

    spring-hibernate-dwr实例

    spring-hibernate-dwr做的AJAX操作CRUD实例 ...1.3.jar poi-2.5.1.jar cos.jar velocity-1.5.jar velocity-tools-view-1.3.jar commons-codec.jar dwr-2.0.rc2.jar asm.jar files.lst

    Ajax学习之-DWR与界面开发

    而DWR(Direct Web Remoting)是实现Ajax的一种框架,它使得JavaScript与Java后端服务器之间的通信变得更加简单。本文将深入探讨DWR与界面开发的相关知识点,包括DWR.xml配置文件、WEB界面开发规范以及DWR的开发培训...

    ajax-dwr.rar_dwr

    **Ajax与DWR** Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使得网页实现异步更新,提高了用户体验。Ajax的核心是...

    Ajax + struts 与 ajax 的 dwr 框架的使用

    **Ajax + Struts 与 Ajax 的 DWR 框架使用详解** 在现代Web开发中,Ajax(Asynchronous JavaScript and XML)技术极大地提升了用户体验,它允许网页在不刷新整个页面的情况下与服务器进行交互。Struts作为Java EE...

    整理好的DWR-2.0.5-src

    这个不是我的原创,原文件出至这里:...原资源包含了,源代码和API Doc,只是美中不足的是没有整理成可用的zip文档,我这特分离了一下,并重新打好包了,初步测试了一下能用。

    AJAX学习资料之-DWR中文手册

    ### AJAX学习资料之-DWR中文手册 #### 一、引言与背景介绍 随着Web 2.0技术的兴起,Ajax作为一种重要的前端技术受到了广泛关注。它不仅提升了用户体验,还简化了开发过程。对于想要深入了解Ajax及其相关技术的...

    dwr源码包,dwr.jar包下载

    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; &lt;servlet-class&gt; org.directwebremoting.servlet.DwrServlet &lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;debug&lt;/param-name&gt; &lt;param-value&gt;true...

    commons-logging-1.1.1+dwr

    commons-logging-1.1.1.jar 与 dwr.jar 配合使用 前后端通信 commons-logging-1.1.1.jar 与 dwr.jar 配合使用 前后端通信 commons-logging-1.1.1.jar 与 dwr.jar 配合使用 前后端通信

    WEB-2.0-AJAX-DWR:关于WEB 2.0 AJAX DWR的演示

    WEB-2.0-AJAX-DWR 关于WEB 2.0 AJAX DWR的演示源码

Global site tag (gtag.js) - Google Analytics