• 1. 中科院计算所职业培训中心 杨少波trainict@sohu.comDWR框架技术
  • 2. DWR 框 架 技 术在本讲中您能了解如下知识点 为什么要提出DWR框架 DWR的工作原理及各种组件 DWR的主要组成部分及职责 应用DWR的主要开发过程
  • 3. 1、使用AJAX技术时的实现难度 (1)使用AJAX时,要求开发者必须要对各种前台技术非常了解(2)详细学习Ajax 时的“低级”编码并不是那么容易 由于不同的浏览器是以稍微不同的方式实现 XMLHttpRequest对象。同一浏览器(例如 IE)的不同版本z在实现该对象的方式上也不同。 另外对于不同的浏览器和版本对JavaScript的支持也是不同的,因此也给我们的应用开发增加了复杂度。 这对于一个普通的Java程序员来说,这种要求是有点过分了! 因此,如何使普通的Java程序员快速进行基于AJAX的开发呢,那么就要求我们使用一些AJAX框架,来屏蔽各种前台技术。
  • 4. (4)特别是类似于跨浏览器的DOM编程实现的兼容性问题 这将会导致在编码和调试Javascript代码上面花费很多时间,这显然对开发者来说很不合算的。 (3)XML 请求和响应在客户端浏览器和服务器后端之间传输的标准化问题 由于缺乏关于数据应该如何通过 XML 请求和响应在浏览器代码和服务器后端之间传输的标准化,因而事情更加复杂---目前只利用DOM,但DOM解析比较复杂! 我们如何避免出现这样的问题?
  • 5. (5)直接使用XmlHttpRequest对象创建异步请求也是比较麻烦的 我们的JavaScript代码不仅冗长,而且还必须考虑客户端所可能的各种版本的浏览器、以及如何获得服务器端的返回结果。 设置回调 识别状态等 错误处理等 目前在Java平台中比较好的AJAX框架,应该属DWR(Direct Web Remoting)框架。
  • 6. 2、Direct Web Remoting(DWR)框架(2)它可以允许在JavaScript中直接访问服务器端的JavaBean组件(也就是业务组件)中的方法。(1)DWR(直接Web远程控制)项目是在Apache许可下的一个开源的AJAX技术的解决方案
  • 7. (3)使用DWR非常像传统的RPC机制但客户端的为JavaScript   由于在DWR中采用了一种“新方法”来动态生成基于JAVA类的JavaScript代码,这样WEB开发人员就可以在JavaScript里使用Java代码-----就像它们是浏览器的本地代码(客户端代码)一样。
  • 8. 3、DWR的工作原理说明(1)右图展示了 DWR 是如何简化 Ajax 编程 基于Java类(可以为各种JavaBean)动态地生成JavaScript代码 我们需要在页面中包含这些函数库 我们需要在Web应用中部署该组件
  • 9. (2)DWR的工作原理 由于JavaBean对象被远程化了----将服务器端的某个JavaBean组件(可以为业务组件或者业务实体组件)转换为JavaScript中对象,所以该数据是自动变得对运行在客户机浏览器上的 JavaScript 代码可用。 但在幕后,DWR则自己通过向浏览器提供的 XMLHttpRequest 对象向其自己的运行在应用服务器上的后台组件发出异步调用。 (3)DWR 是一个引擎以帮助我们简化对AJAX技术的应用 DWR是一种AJAX(Asynchronous JavaScript and XML)的JAVA实现,它提供了一种能在Web浏览器端采用JavaScript语言直接调用后台业务商业组件的解决方案。 同时能够动态生成JavaScript代码和隐藏http协议的细节。
  • 10. 4、应用DWR技术所带来的主要优点(1)DWR通过JavaScript直接调用远程组件可以减少应用AJAX 的Web开发的时间 这特别对于那些需要和用户频繁交互的Web应用程序----DWR使得浏览器不用刷新页面就可以从远程Web服务器取得用户需的数据(本质为AJAX技术) 这种无刷新页面的交互方式大大提高Web页面的响应时间。 (2)具有良好的浏览器的兼容性 DWR采用浏览器端的纯JavaScript实现并提供了良好的兼容性 并且会自动根据浏览器类型采用最高效率的远程组件调用机制。(3)减少了在页面中的JavaScript脚本代码的数量。
  • 11. 5、DWR 中两个标准的组件 (1)一个是运行在用户浏览器上的 JavaScript 库(如utils.js 和 engine.js等6、主要的JavaScript库(*.js文件) (1)engine.js和util.js(2)另一个则是运行在应用服务器上的Servlet组件 注意:不同版本的DWR,该Servlet是不同的。 DWR1.1版:uk.ltd.getahead.dwr.DWRServlet DWR2.0版:org.directwebremoting.servlet.DwrServlet
  • 12. (2)在JavaScript中使用DWR的JavaScript 库的方法7、DWR 的实现机制及各个组件的职责 (1)DWR主要组成部分 我们需要在页面中包含这些函数库
  • 13. (2)DWR前台引擎(Engine.js)的主要职责 截取每个后台组件的请求实现客户端的统一入口,将用于组件调用的JS参数对象重新包装组合; 检测客户端浏览器的环境并选择最佳的数据提交方案,处理后台执行结果并通过执行回调函数通知客户 (3)后台控制器(DWRServet)的主要职责 完成DWR的初始化和DWR的配置参数文件的加载,以达到对后台业务组件调用的服务器端的统一入口。 实现对客户端的各种不同类型的请求(如JS文件和业务调用请求)的分发 最后再实现输出后端组件执行的结果(JavaScript语句)到客户端浏览器
  • 14. (4)业务组件执行器的主要职责 根据配置文件的参数确定后台组件的访问规则和生命周期 拆包由前台页面中的JavaScript所传入的参数并且包装后端服务器组件的执行结果 按参数类型匹配数据类型转换器,并采用反射机制执行业务组件的对应方法以处理客户端的请求 处理与其他系统的接口和协作 如:Spring Hibernate等(5)数据类型转换器的主要职责 将一系列单个的参数转换成对应的Java对象(JavaScript--Java) 将Java对象转换成JavaScript对象 (Java—>JavaScript)
  • 15. 8、DWR的开发过程----详细过程请见文档中的说明 (1)下载和安装 DWR的系统包(2)将DWR的系统包的dwr.jar放到Web应用中的lib目录
  • 16. (3)在Web应用的web.xml中部署其uk.ltd.getahead.dwr.DWRServlet不同版本的DWR,该Servlet是不同的(4)通过dwr.xml文件配置我们的JavaBean组件
  • 17. (5)在Web页面中使用远程JavaBean中的方法 (6)将出现下面的提示结果
  • 18. 本讲的回顾孔子说:“学而不思则罔,思而不学则殆。”