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的处理的方法,具体的使用就不在这里说明。
分享到:
相关推荐
理解DWR的这些工作原理对于开发人员来说至关重要,它能帮助你更有效地利用DWR进行前后端交互,实现高效、流畅的Web应用体验。通过深入研究DWR的内部机制,你可以更好地优化代码,解决可能出现的问题,以及利用其特性...
DWR(Direct Web Remoting)是一种Java库,用于在Web应用程序中实现JavaScript和服务器端Java对象之间的双向通信。...通过深入学习DWR的原理和实践,开发者可以构建出更具吸引力和响应性的Web应用。
dwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwr
本笔记将深入探讨DWR的核心概念、工作原理以及实际应用。 一、DWR简介 DWR的主要目标是消除传统的HTTP请求-响应模式的局限性,提供一种更加高效、灵活的远程调用机制。通过DWR,开发者可以在浏览器中编写JavaScript...
这将帮助你深入理解DWR的工作原理和数据转换过程。 此外,DWR还提供了其他高级特性,如异步调用、批量调用、缓存策略等,这些都是构建高效Ajax应用的重要工具。通过这个练习,你不仅可以掌握基本的数据转换,还能...
这份文档对于理解DWR的工作原理和使用方法至关重要,特别是对于中文用户来说。DWR2.0文档可能会涵盖以下几个方面: - **安装与配置**:介绍如何将DWR添加到现有项目中,包括引入jar文件、配置web.xml和dwr.xml文件...
**Direct Web Remoting (DWR)** 是一个开源的Java库,它允许JavaScript在浏览器和Java服务器之间进行安全、高效的通信。DWR使得Web应用程序能够利用AJAX技术,提供动态、实时的用户界面,无需页面刷新即可与服务器...
通过研究这个"TestDwr"项目,你可以了解到如何在实际应用中集成和使用DWR,理解DWR的工作原理,并掌握创建交互式Web应用的基本技能。这个简单的例子可以帮助你快速上手DWR,为后续深入学习和实践打下基础。
通过这个简单的DWR演示项目,你可以深入理解DWR的工作原理,掌握如何配置DWR、编写可被客户端调用的Java方法,以及如何在JavaScript中使用这些方法。这对于想要学习和使用DWR来构建动态Web应用的初学者来说是一个很...
DWR开发培训.ppt、DWR.ppt:这些可能是DWR的培训演示文稿,包含了一系列主题的讲解,可能涵盖了DWR的工作原理、核心组件、使用示例和最佳实践。通过这些PPT,你可以系统地学习DWR,并通过实例加深理解。 DWR与界面...
**DWR配置文件详解** Direct Web Remoting (DWR) 是一种开源的Java库,它允许Web应用程序在客户端JavaScript和服务器端Java之间进行双向通信。DWR的核心配置文件是`dwr.xml`,该文件定义了DWR允许访问的Java对象、...
DWR(Direct Web Remoting)是一种Java库,它允许JavaScript在客户端与服务器端进行直接的交互,从而实现在Web应用程序中的Ajax功能。DWR的主要目标是简化前后端的数据交换,提高用户体验,使得Web应用能够像桌面...
Direct Web Remoting (DWR) 是一个开源的Java库,它允许在JavaScript和服务器端Java之间进行双向通信,实现Web应用程序的Ajax功能。DWR使得动态网页能够与后台服务器进行实时交互,无需刷新整个页面,提高了用户体验...
DWR (Direct Web Remoting) 是一个开源框架,它允许JavaScript在浏览器端直接调用Java方法,从而实现AJAX的应用。...对于任何希望深入了解DWR工作原理的开发者来说,阅读源代码都是一个有价值的学习过程。
DWR(Direct Web Remoting)是一个开源的Java库,它为Web应用程序提供了强大的Ajax功能。通过DWR,前端JavaScript可以直接调用后端Java方法,从而实现动态、实时的Web交互,提升用户体验。这个主题主要围绕DWR的两个...
1、 导入dwr.jar包 2、 在web.xml中配置dwr,如下: <!-- 配置DWR --> <servlet-name>dwr-invoker org.directwebremoting.servlet.DwrServlet <init-param> <param-name>debug</param-name> ...
通过查看源代码,开发者可以深入理解DWR的工作原理,定制和扩展其功能,或者排查遇到的问题。源代码还包含了一些示例和测试用例,帮助开发者快速上手。 3. **dwr.zip**: 这可能是一个重复的文件,或者包含了与dwr...
1. **DWR的工作原理**:DWR通过在服务器上设置一个代理,允许JavaScript调用Java方法,就像它们是本地函数一样。它处理了跨域问题,自动序列化和反序列化数据,并且支持异步调用,减少了页面刷新的需求。 2. **DWR...
**DWR(Direct Web Remoting)**是一种Java技术,它允许Web应用程序在客户端与服务器之间进行实时通信,而无需刷新整个页面。通过DWR,我们可以使用JavaScript直接调用服务器端的Java方法,实现Ajax(Asynchronous ...