dwr 学习

  • 格式:doc
  • 大小:68.00 KB
  • 文档页数:10

1、DWR: Easy AJAX for JAVA 作为一个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了。 web.xml

2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

dwr-invoker uk.ltd.getahead.dwr.DWRServlet dwr-invoker /dwr/*

dwr.xml 与web.xml同目录 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">

index.html DWR - Test Home src='dwr/interface/JDate.js'>

dwr.jar 下载放lib下 完了,什么,够了,就这些。访问ok! 3、Examples http://www.aboutmyhealth.org/ 这不是Google Suggest吗!ok. 4、源码浅析 dwr的设计很象webwork2的设计,隐藏http协议,扩展性,兼容性及强。 通过研究uk.ltd.getahead.dwr.DWRServlet这个servlet来研究下dwr到底是如何工作滴。

Java代码 1. web.xml配置 2. 3. dwr-invoker 4. uk.ltd.getahead.dwr.DWRServlets> 5. 6. 7. dwr-invoker 8. /dwr/* 9. 10.这样所有的/dwr/*所有请求都由这个servlet来处理,它到底处理了些什么能。我们还以上面最简单的例子来看。 11.1、 web服务器启动,DWRServlet init()方法调用,init主要做了以下工作。 12.设置日志级别、实例化DWR用到的单例类(这些类在jvm中只有一个实例对象)、读去配置文件(包括dwr.jar包中的dwr.xml,WEB-INF/dwr.xml. config*.xml)。 13.2、请求处理 14.DWRServlet.doGet, doPost方法都调用processor.handle(req, resp)方法处理。Processor对象在init()方法中已经初始化了。 15.

28. { 29. doTest(req, resp);; 30. } else 31. if(pathinfo != null && pathinfo.equalsIgnoreCase("/engine.js");); 32. { 33. doFile(resp, "engine.js", "text/javascript");; 34. } else 35. if(pathinfo != null && pathinfo.equalsIgnoreCase("/util.js");); 36. { 37. doFile(resp, "util.js", "text/javascript");; 38. } else 39. if(pathinfo != null && pathinfo.equalsIgnoreCase("/deprecated.js");); 40. { 41. doFile(resp, "deprecated.js", "text/javascript");;

42. } else 43. if(pathinfo != null && pathinfo.startsWith("/interface/");); 44. { 45. doInterface(req, resp);; 46. } else 47. if(pathinfo != null && pathinfo.startsWith("/exec"););

48. { 49. doExec(req, resp);; 50. } else 51. { 52. log.warn("Page not found. In debug/test mode try viewing /[WEB-APP]/dwr/");; 53. resp.sendError(404);; 54. } 55. }