作为一个java open source library,DWR可以帮助开发人员完成应用AJAX技术的web程序。它可以让浏览器上的javascript方法调用运行在web服务器上java方法。 DWR主要由两部分组成。javascript与web服务器通信并更新web页;运行在web服务器的Servlet处理请求并把响应发回浏览器。 DWR采用新颖的方法实现了AJAX(本来也没有确切的定义),在java代码基础上动态的生成javascript代码。web开发者可以直接调用这些javascript代码,然而真正的代码是运行在web服务器上的java code。出与安全考虑,开发者必须配置哪些java class暴露给DWR.(dwr.xml) 这种从(java到javascript)调用机制给用户一种感觉,好象常规的RPC机制,或RMI or SOAP.但是它运行在web上,不需要任何浏览器插件。 | |
DWR不认为浏览器和web服务器之间协议重要,把系统界面放在首位。最大挑战是java method call的同步特征与ajax异步特性之间的矛盾。在异步模型里,结果只有在方法结束后才有效。DWR解决了这个问题,把回调函数当成参数传给方法,处理完成后,自动调用回调方法。 这个图表显示了,通过javascript事件,DWR能改变select的内容,当然这些内容由java代码返回。 javascript函数Data.getOptions(populateList)由DWR动态生成,这个函数会调用java class Data类的方法。DWR处理如何远程调用,包括转换所有的参数和返回的结果(javascript\java)。java方法执行完后,执行回调方法populateList。在整个过程中我们就想在用本地的方法一样。 2、Getting Started 废话少说,试试就ok了。 <?xml version="1.0" encoding="ISO-8859-1"?> <web-app id="dwr"> dwr.xml 与web.xml同目录 index.html dwr.jar 下载放lib下 完了,什么,够了,就这些。访问ok! 通过研究uk.ltd.getahead.dwr.DWRServlet这个servlet来研究下dwr到底是如何工作滴。 代码
代码
|
DWR工作原理及相关操作步骤
一、什么是DWR?
DWR:(Direct Web Remoting)是一个开源的类库,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码(javascript)使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样.
它包含两个主要的部分:
a.允许JavaScript从WEB服务器上一个遵循了AJAX原则的Servlet(小应用程序)中获取数据.
b.它的JavaScript库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容.
二、工作原理及其优缺点
DWR工作原理:通过请求的url调用到对应的DwrServlet,DwrServlet加载对应dwr.xml,将对应的类转换成js代码,发送到浏览器客户端的调用,通过js的ajax封装
优点:
1.浏览器兼容:
2.json的封装
3.多种对象的转换(ssh对象转换)
缺点:出错不容易找
三、操作步骤:
1.导入DWR包
2.在WEB-INF写dwr.xml
3.在web.xml中配置servlet<servlet>
<display-name>DWR Servlet</display-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
4.<script type="text/javascript" src="/T1001_DWR/dwr/engine.js"></script>
<script type="text/javascript" src="/T1001_DWR/dwr/util.js"></script>
<!-- 自定义的js -->
<script type="text/javascript" src="/T1001_DWR/dwr/interface/T1001.js"></script>
原理:
通过请求的url调用到对应的DwrServlet
DwrServlet加载对应dwr.xml,将对应的类
转换成js代码,发送到浏览器
客户端的调用,通过js的ajax封装,具有了
1.浏览器兼容
2.json的封装
3.多种对象的转换(ssh对象转换)
四、DWR的其它应用
我们需要确认所有的参数能被转换。许多JDK提供的类型使你能够使用,但是你如果要转换你自己的代码,就必须告诉DWR。一般是指JavaBean的参数需要一个<convert…>标签作为入口。
A.为单独的某类打开转换器。
<convert converter="bean" match="your.full.package.BeanName"/>
B.为某个包下的所有类打开转换器。
<convert converter="bean" match="your.full.package.*"/>
C.允许转换所有的JavaBean
<convert converter="bean" match="*"/>
五、使用DWRUtil.addRows对表格进行操作
function(data){
DWRUtil.removeAllRows(“tab”); //移除tab中行对象
//三个参数
// 1 tbody的id; 2数据集合; 3 函数数组 ["1","2","3"]
DWRUtil.addRows("tab",data,
[
function(items){return i++},
function(items){return items.empname},
function(items){return items.birthday==null?"":items.birthday.toLocaleDateString()},
function(items){return items.jp},
function(items){return ""}
]);}
六、DWR中的时间转换
1、添加操作:
birthday=birthday.replace(/-/g,"/");
var d=new Date(birthday);
var emps={empname:empname,birthday:d,jp:jp};
2、赋值操作:
1>emp.birthday.toLocaleDateString()
2>date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate()