DWR原理探秘

简介: DWR原理探秘DWR(Direct Web Remoting)远程Web命令;是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。

DWR原理探秘

DWR(Direct Web Remoting)远程Web命令;
是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。

 

ajax 是Asynchronous JavaScript and XML的简称,是一种由javascript通过XmlHttpRequest与服务器交互更新数据的一种异步请求的技术,因为通过ajax你只需传递需要更新的数据,而不是整个页面,能有效的减少页面和服务器端的数据传输,通过javascript更新页面时可以做到页面不刷新,所以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的处理的方法,具体的使用就不在这里说明。

目录
相关文章
|
机器学习/深度学习 人工智能 数据可视化
机器学习:详解贝叶斯网络+例题分析
机器学习:详解贝叶斯网络+例题分析
3613 0
机器学习:详解贝叶斯网络+例题分析
|
9月前
|
存储 缓存 测试技术
阿里云服务器经济型e实例怎么样?性能、价格与适用场景全解析
阿里云服务器经济型e实例2核2G3M带宽40G ESSD Entry云盘价格只要99元1年,而且续费不涨价。经济型e实例是阿里云面向个人开发者、学生以及小微企业推出的一款入门级云服务器。这款实例以其高性价比和灵活的配置,迅速赢得了市场的青睐。那么,阿里云服务器经济型e实例到底怎么样?是否值得购买呢?本文将为您解析经济型e实例的性能、价格与适用场景,以供参考。
|
监控 安全 搜索推荐
企业应用集成(EAI):连接企业系统的技术探索
【6月更文挑战第25天】企业应用集成(EAI)技术连接异构系统,实现数据共享和业务流程优化。EAI包括界面、业务过程、应用和数据集成,提升协同效率、降低成本、改善客户体验、支持创新及强化风险管控。实施涉及规划、需求分析、选择方案、开发测试、部署监控及维护优化。EAI在企业信息化中扮演关键角色。
1169 3
|
编译器 C# Windows
C#基础:手动编译一个.cs源代码文件并生成.exe可执行文件
通过上述步骤,应该能够高效准确地编译C#源代码并生成相应的可执行文件。此外,这一过程强调了对命令行编译器的理解,这在调试和自动化编译流程中是非常重要的。
1675 2
|
数据采集 机器学习/深度学习 搜索推荐
大数据与社交媒体:用户行为分析
【10月更文挑战第31天】在数字化时代,社交媒体成为人们生活的重要部分,大数据技术的发展使其用户行为分析成为企业理解用户需求、优化产品设计和提升用户体验的关键手段。本文探讨了大数据在社交媒体用户行为分析中的应用,包括用户画像构建、情感分析、行为路径分析和社交网络分析,以及面临的挑战与机遇。
1182 3
|
SQL 缓存 Java
揭秘物联网性能优化的终极攻略!提升系统效率的七大法宝
小米在物联网项目中遇到了性能优化问题,他从数据库、集群、硬件、代码、并行处理、JVM及操作系统等多个层面分享了优化经验。包括SQL优化、分库分表、缓存使用、水平扩容、分布式调度、硬件升级、代码分析、并行处理、GC调优及操作系统参数调整等。小米强调性能优化需结合实际情况,逐步提升系统响应速度与稳定性。欢迎留言交流,共同进步。关注他的微信公众号“软件求生”,获取更多技术干货。
502 1
|
安全 Linux 开发者
跨界英雄Python:一招搞定跨平台兼容性难题🎯
【8月更文挑战第5天】Python 展现了卓越的跨平台能力,使开发者能在多种操作系统上编写一致的代码。利用标准库如 `os` 和 `pathlib`,可以轻松进行文件系统操作;借助 `subprocess` 可安全执行外部命令;Tkinter 则简化了跨平台 GUI 的创建。这些工具和技术让 Python 成为处理跨平台任务的理想选择,使开发者能更专注于应用程序的核心功能。
458 3
|
数据可视化 定位技术
线性回归和时间序列分析北京房价影响因素可视化案例(下)
线性回归和时间序列分析北京房价影响因素可视化案例
|
XML 缓存 Java
MyBatis原理分析之获取Mapper接口的代理对象
MyBatis原理分析之获取Mapper接口的代理对象
518 0
|
算法 自动驾驶 开发者
Cityscapes数据集(智能驾驶场景的语义分割)
面向智能驾驶(辅助驾驶、自动驾驶)场景下的语义分割任务,由于非结构化场景的复杂性,是一个非常具有挑战性的任务,所以有许多研究者和研究机构公开了很多相关的数据集推动语义分割领域的发展。本文主要介绍Cityscapes数据集。
1915 0

热门文章

最新文章

下一篇
开通oss服务