DWR

一、简介。
      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


       DWR动态在javascript里生成一个AjaxService类,去匹配服务器端的代码。由eventHandler去调用它,然后DWR处理所以的远程细节,包括倒置所有的参数以及返回javascript和java之间的值。在示例中,先在eventHandler方法里调用AjaxService的getOperation()方法,然后通过反调方法populateList(data)得到返回的数据,其中data就是String[]{"1","2"."3"},最后再使用DWR utility把data加入到下拉列表。

 

 

二、示例。

1、下载dwr.jar包和commons-logging.jar,并添加到工程里面,路径\WebRoot\WEB-INF\lib;
2、将下载的dwr-版本号-src.zip\java\org\directwebremoting内的engine.js核util.js放入WEB应用中;
 
DWR

3、添加dwr的相关配置到配置文件web.xml(申明DWR Servlet);
 
 <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配置文件;
 
<?xml version="1.0" encoding="UTF-8"?>
<!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类;
1)Person类:
 package helloWorld.bean;
public class Person {
 private String name="aa";
 public Person(){
 
 }
 public Person(String name){
  this.name = name;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 
}

2)Service类:
package helloWorld;
import helloWorld.bean.Person;
public class Service {
 public Person sayHello(String name){
  return new Person(name);
 }
}

6、编写jsp文件;
 
<%@ page language="java" pageEncoding="UTF-8"%>
<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、结果。
DWR



三、解决DWR异步问题。
 1、关异步。
 
    解压dwr.jar,可以发现里面有engine.js,在它的里面有一个方法
    DWREngine.setAsync = function(async) {
        DWREngine._async = async;
    };
    这个async默认值为true.
    如果需要同步执行的话,就可以在执行的方法加上上面这个设置例如:
    DWREngine.setAsync(false);
 
 2、将相关操作放进回调函数里面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值