一、简介。
DWR是一个可以允许你去创建AJAX WEB站点的JAVA开源库。它可以让你在浏览器中的javascript代码调用web服务器上的java代码,就像在java代码就在流浪器中一样。
DWR包含两个主要部分:
1、一个运行在服务器端的Java Servlet,它处理请求并且向流浪器发回响应。
2、运行在流浪器的javascript,它发送请求而且还能动态更新网页。
DWR工作原理是通过动态把Java类生成为javascript。它的代码就像Ajax魔法一样,你感觉调用就像发生在流浪器端,但是实际上代码调用发送在服务器端,DWR负责数据的传递和转换。这种从Java到javascript的远程调用功能的方式使DWR用起来有种非常像RMI或者SOAP的常规RPC机制,而且DWR的优点在于不需要任何的网页浏览器插件就能运行在网页上。
Java从根本上讲是同步机制,然而AJAX却是异步的。所以调用远程方法时,当数据已经从网络上返回的时候,你要提供有反调(callback)功能的DWR。
DWR动态在javascript里生成一个AjaxService类,去匹配服务器端的代码。由eventHandler去调用它,然后DWR处理所以的远程细节,包括倒置所有的参数以及返回javascript和java之间的值。在示例中,先在eventHandler方法里调用AjaxService的getOperation()方法,然后通过反调方法populateList(data)得到返回的数据,其中data就是String[]{"1","2"."3"},最后再使用DWR utility把data加入到下拉列表。
二、示例。
2、将下载的dwr-版本号-src.zip\java\org\directwebremoting内的engine.js核util.js放入WEB应用中;
3、添加dwr的相关配置到配置文件web.xml(申明DWR Servlet);
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>
org.directwebremoting.servlet.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、在web.xml的同一目录下,创建dwr.xml配置文件;
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
" http://getahead.org/dwr/dwr30.dtd">
<dwr>
<allow>
<create creator="new" javascript="service">
<param name="class" value="helloWorld.Service"></param>
</create>
<convert converter="bean" match="helloWorld.bean.Person" ></convert>
</allow>
</dwr>
5、编写java类;
private String name="aa";
public Person(){
}
public Person(String name){
this.name = name;
}
return name;
}
this.name = name;
}
2)Service类:
public Person sayHello(String name){
return new Person(name);
}
}
6、编写jsp文件;
<html>
<head>
<title>My JSP 'dwrExample.jsp' starting page</title>
<script type='text/javascript' src='js/util.js'></script>
<script type='text/javascript' src='js/engine.js'></script>
<script type='text/javascript' src='dwr/interface/service.js'></script>
<script type="text/javascript">
function dwrFn(){
service.sayHello("yimin",callBackHello);
}
function callBackHello(data){
alert(data.name);
}
</script>
</head>
<body>
<input type="button" name="button" value="Click" οnclick="dwrFn()">
</body>
</html>
7、结果。
DWREngine._async = async;
};