DWR简要总结
DWR是Direct Web Remoting 的缩写.
DWR 是一个开放源码的使用 Apache 许可协议的解决方案,它包含服务器端 Java 库、一个 DWR servlet 以及 JavaScript 库。虽然 DWR 不是 Java 平台上唯一可用的 Ajax-RPC 工具包,但是它是最成熟的,而且提供了许多有用的功能。
从最简单的角度来说,DWR 是一个引擎,可以把服务器端 Java 对象的方法公开给 JavaScript 代码。使用 DWR 可以有效地从应用程序代码中把 Ajax 的全部请求-响应循环消除掉。这意味着客户端代码再也不需要直接处理 XMLHttpRequest 对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成 XML。甚至不再需要编写 servlet 代码把 Ajax 请求调整成对 Java 域对象的调用。
DWR 是作为 Web 应用程序中的 servlet 部署的。把它看作一个黑盒子,这个 servlet 有两个主要作用:首先,对于公开的每个类,DWR 动态地生成包含在 Web 页面中的 JavaScript。生成的 JavaScript 包含存根函数,代表 Java 类上的对应方法并在幕后执行 XMLHttpRequest。这些请求被发送给 DWR,这时它的第二个作用就是把请求翻译成服务器端 Java 对象上的方法调用并把方法的返回值放在 servlet 响应中发送回客户端,编码成 JavaScript。DWR 还提供了帮助执行常见的用户界面任务的 JavaScript 工具函数 .
使用 DWR 的优点:
2 规范化应用 AJAX ,紧跟业界技术潮流;
2 提高界面响应速度,增强用户体验;
2 简化前台开发流程,减少代码量,提高开发效率;
2 与 GBP 的集成比较容易;
dwr的设计构思很是巧妙。
第一、把java类转化为javascript类由dwr自动完成,只需简单的配置。
第二、应用起来极其简单。开发者不要该服务器代码就可以集成。
第三、容易测试。和webwork一样,隐藏的http协议。
第四、及强扩展性。例如与spring集成,只需修改一点代码。
第五、性能。就我与jason,等简单比较,dwr性能可能是最好的。
第六、自动把java对象转化为javascript对象,并且及易扩展。
流程:
1、 web服务器启动,DWRServlet init()方法调用,init主要做了以下工作。*
设置日志级别、实例化DWR用到的单例类(这些类在jvm中只有一个实例对象)、读去配置文件(包括dwr.jar包中的dwr.xml,WEB-INF/dwr.xml. config.xml)。
2、请求处理
DWRServlet.doGet, doPost方法都调用processor.handle(req, resp)方法处理。Processor对象在init()方法中已经初始化了。
其实 动态在浏览器端生成一个AjaxService的JavaScript类,以匹配服务器端AjaxService的Java类.
然后进服务器端进行数据处理返回到(js对象)控制器响应请求,其次响应动态更新页面(展现层).
配置文件
dwr需要运行的话,必须要配置文件支持,首先需要修改web.xml配置文件并引入本身的dwr配置文件,
dwr.-**.xml
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<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>
1.
配置其URL映射方式:
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
2、在DWR配置文件dwr.xml中描述浏览器端与服务器端对象的转换关系:
<dwr>
<allow>
<convert converter="bean" match="com.xxx.gbp.formbean.form.*" />
<create creator="spring" javascript="mscCtrl">
<param name="beanName" value="mscControl" />
<include method="doService"/>
<include method="doQuery"/>
</create>
</allow>
</dwr>
在javascript中通过使用dwr.util.setValue("控件ID",值) 来获取数据库取出来放到页面上,来个控件更新数据
在javascript中通过使用dwr.util.getValue() 来获取页面中某个页面元素的值