通过DWR简化AJAX开发
DWR(Direct Web Remoting)是一个WEB远程调用框架,采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码。这样WEB开发人员就可以在JavaScript里使用Java代码,就像它们是浏览器的本地代码(客户端代码)一样。
其开发过程如下:
下面以用户注册的例子,来说明其使用。
修改web.xml文件,添加dwr servlet配置
创建jsp页面,需引入dwr的javascript文件,然后调用java类方法通过转换器,把javascript的map结构转换到java的User对象或者把java User对象转换到javascript的map结构。(javascript的map结构:各个项是用逗号连接的,而每个项的键值对是用冒号连接的,如var userMap = {id:'admin',password:'123456',name:'chenbug'};)转换器也有多种,比如BeanConverter、ArrayConverter等分析js代码
DWRUserAccess.js和DWRUserAccess.java是对应的,将我们编写的DWRUserAccess类,经dwr反射后,生成的就是对应的javascript代码,实际上我们就是通过这个js文件去调用服务器端的DWRUserAccess类的。
OnSave函数,首先它构造一个map,然后调用DWRUserAccess.save(userMap, saveFun),第一个参数userMap是javascirpt中的map对象,而服务器端的DWRUserAccess中的save方法是这样的:boolean save(User user),参数是一个User对象,所以在服务器端代码执行前,会通过convert转换成User对象。第二个参数saveFun即是一个回调函数,执行完服务端的方法后,将结果填充到function saveFun(data)中的data中。
OnFind函数,因为服务器端返回的是一个User对象,所以需要通过convert,将User对象转换成avascript的一个map对象,将最终结果填充到回调函数findFun(data)的data参数中。
小结
这个从JAVA到JavaScript的远程调用,非常像传统的RPC机制,比如RMI或者Web Service,只需要通过网络向远程计算机请求相应的服务,就能达到想要做的事情。