一、什么是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()