DWR介绍及基本用法

 
一 Dwr 是什么?
 DWR 是一个开源的类库 , 可以帮助开发人员开发包含 AJAX 技术的网站 . 它可以允许在浏览器里的代码( javascript )使用运行在 WEB 服务器上的 JAVA 函数 , 就像它就在浏览器里一样 .

  它包含两个主要的部分 : 允许 JavaScript WEB 服务器上一个遵循了 AJAX 原则的 Servlet( 小应用程序 ) 中获取数据 . 另外一方面一个 JavaScript 库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容 .

   DWR 采取了一个类似 AJAX 的新方法来动态生成基于 JAVA 类的 JavaScript 代码 . 这样 WEB 开发人员就可以在 JavaScript 里使用 Java 代码就像它们是浏览器的本地代码 ( 客户端代码 ) 一样 ; 但是 Java 代码运行在 WEB 服务器端而且可以自由访问 WEB 服务器的资源 . 出于安全的理由 ,WEB 开发者必须适当地配置哪些 Java 类可以安全的被外部使用 .
dwr 的使用事例
 1 从网站 http://getahead.ltd.uk/dwr/下载dwr.jar, 放入放到 WEB-INF/lib
 2 web.xml 中引用包中的一个 servlet:
<servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
    <init-param>
      <description>
      </description>
      <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>
3 创建Hello.java,和Person
package com.hf.dwr;
 
public class Hello {
    String name="";
    public String getName() {
       return name;
    }
    public void setName(String name) {
       this.name = name;
    }
    public Person getPerson(String value) {
       Person per=new Person();
       per.setName(value);
       System.out.println(per.getName());
       return per;
    }
   
   
}
 
package com.hf.dwr;
 
public class Person {
    private String name;
    public String getName() {
       return name;
    }
    public void setName(String name) {
       this.name = name;
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
       // TODO Auto-generated method stub
 
    }
 
}
4 创建 dwr.xml 文件,并在里面配置Hello.java
<? xml version = "1.0" encoding = "UTF-8" ?>
<! DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
    "http://www.getahead.ltd.uk/dwr/dwr10.dtd" >
< dwr >
 
  < allow >
     < create creator = "new" javascript = "Hello" >
      < param name = "class" value = "com.hf.business.dwr.helloTest" />
     </ create >
 
      < convert converter = "bean"
        match = "com.hf.dwr.Person" />
  </ allow >
 
 
 
</ dwr >
Creator 设定为 new ,表示使用 Hello 的无参构造函数生成对象, javascript 设定为 Hello ,表示客戶端 JavaScript 程式可以使用 Hello 来调用的 com.hf.business.dwr.HelloTest.Hello 的函数。
至于 < convert converter = "bean"        match = "com.hf.dwr.Person" /> ,因为我们需要将其作为一个返回对象传回客户端,所以需要配置一下(我认为只是个声明,用于反射转化)。
 
5 创建jsp页面
< meta http-equiv = "Context-Type" content = "text/html; charset=UTF-8" >
< html >
< head >
< title > TabContainer Demo </ title >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" ></ meta >
< script type = 'text/javascript' src = "<%=request.getContextPath()%>/dwr/interface/Hello.js"></script>
< script type = "text/javascript" src = "<%=request.getContextPath()%>/js/dwr/engine.js"></script>
< script type = "text/javascript" src = "<%=request.getContextPath()%>/js/dwr/util.js"></script>
 
< script type = "text/javascript" >
var person;
  function readPerson()
  {    
         var nameValue=document.getElementById( "name" ).value;
      Hello.getPerson(nameValue,callback);
      //JDate.toString(callback);
   }
 function callback(aperson) {
  alert(aperson.name);
 person = aperson;
 DWRUtil.setValues(person);
  }
 
</ script >
</ head >
 
< body >
      < table >
< tr >
 
< td > Name: </ td >
< td >< input id = "name" type = "text" />
 
< input type = "button" value = "Read" onclick = "readPerson()" />
</ td >
 
</ tr >
 
</ table >
</ body >
</ html >
 
首先,文件 src = "<%=request.getContextPath()%>/dwr/interface/Hello.js"></script>
并不是由我们创建的。这是由dwr根据反射机制进行引用。
我们可以看一下流程:
点击onclick事件3执行函数: readPerson ,函数中调用 Hello.getPerson () ,这其实是通过ajax访问web.xml中配置的servlet,然后根据反射机制调用Hello.java的getPerson函数。并将返回的person对象的数据组织成javascript对象返回到客户端。并传递给callback()去执行。这样做起码省去了我们如下工作:
A:ajax访问代码的编写。
B:返回数据的解析
很方便吧??
 
 如需要原代码请回复
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值