DWR学习(一)使用步骤

 DWR(direct  web  remote)直译就是“直接web远程调用”, 是一个基于服务器端的ajax框架。通过该框架,我们可以使用js来直接调用java方法。[c1] 
以前面试时,有人要我向他解释什么是dwr,那时候对ajax还没有深入骨子那种理解,夸夸说了一通,其实dwr也是ajax技术的一种。不过现在在网上看到别人帖子里有说,“dwr非常好,比ajax好用都了”,此时再回头想想自己,会心一笑。
其他ajax框架: Prototype.js是一个基于浏览器其端的ajax框架,其实prototype.js只是一个封装好的js文件,只需要引入prototype.js即可使用。现在还一个用的比较的的ajax框架就是jQuery,jQuery也是一种基于浏览器的ajax框架。现在我们项目中用的比较多的是ExtJs,它是一种用于创建前端用户界面,与后台技术无关的ajax框架。
使用步骤
1.       引入jar包到WEB-INF/lib
2.       web.xml中写入:

    <servlet>
      <servlet-name>dwr-invoker</servlet-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>


3.       建立java类(普通java类即可,不是servlet)TestClass
public class TestClass {
        public void testMethod1(){
           System.out.println("hello dwr!");
        }
       public String testMethod2(String name, int a){
           return "hello " + name + a;
        }
}


4.       在/WEB-INF[p2] /dwr.xml[p3] 中配置java类:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
   <allow>
      <create creator="new" javascript="testClass" >
          <param name="class" value= "com.dwr.TestClass" />
       </create>[p4]       
   </allow>
</dwr>


 
注解: 一个<create/>标签对应一个java类的配置,可以是多个。 
5.       在dwr.jsp中使用,需要首先引入:(需要保证dwr这个目录位于web应用的根目录)
        <script src='dwr/interface/testClass.js'></script>
        <script src='dwr/engine.js'></script>
        <script src='dwr/util.js'></script>
[p5]       

    
注:engine.js和util.js不需要引入,因为在dwr.jar包中已经包含了,dwr默认在WebRoot的根目录下,所以可以通过web.xml中配置的映射名找到,如果你的页面jsp在webRoot的子目录中可以通过../dwr/xxx.js来找到。     
6.       在javascript方法中调用后台java类方法:
           function test() {
              testClass.testMethod1();
           }
用dwr调用有参数的java方法,有返回值:
    function test(){
       testClass.javaMethod2("bbb","5",parseInfo[p6] ); //若java方法需要传参,处理响应数据的函数名放到参数列表后面。
                                                                  //dwr会进行自动类型转换,这些类型都是基本数据类型
}
    function parseInfo (data){
       document.getElementById("div1").innerHTML=data;
    }


DWR调用的简单顺序:
1.  js调用相应的方法发送请求。/dwr/td.test1
2.  DWRServlet处理相关请求。根据dwr.xml配置内容,调用相应的java类的方法。
3.  DWRServlet将处理完的数据返回给客户端。


其他知识点:
1.dwr中的得到request对象:
HttpServletRequest req = WebContextFactory.[c7] get().getHttpServletRequest();
2. javascript顺序执行的问题:
    function test8(data){
//  DWREngine.setAsync(false);  //将ajax改成同步方式,可以实现顺序执行。
       testClass.testMethod7({
                  function(a){
                     alert(a);
                  }
       });
       alert("ttt");
    }
4.  javabean转化成js中的对象:
    public Address test6(){
       return new Address("中国","北京","海淀区");
}
        <convert match="com.pk.beans.Address" converter="bean">
        <param name="include"  value="country,province" ></param>[c8] 
    </convert>
           td.test6(function(data){
              alert(data.country);
        });


5.  集合中的对象为javabean时,如何使用:
    public List test7(){
       List list = new ArrayList();
       for(int i=0;i<5;i++){
           list.add(new Address("中国","北京"+i,"海淀区"));
       }
       return list;
    }
    public List test8(){
       List list = new ArrayList();
       for(int i=0;i<5;i++){
           list.add(new User("a",3,new Address("中国","北京"+i,"海淀区")));
       }
       return list;
    }
        <convert match="com.pk.beans.Address" converter="bean">
        <param name="include"  value="country,province" ></param>
        </convert>
        <convert match="com.pk.beans.User" converter="bean">
    </convert>
    <signatures>
       <![CDATA[
           import java.util.*;
           import com.pk. beans.*;
           import com.pk. ajax.TestDwr;
           TestDwr.test7(List<Address>);
           TestDwr.test8(List<User>);
       ]]>
</signatures>
[c9] 
           td.test7(function(data){
              alert(data.length);
              alert(data[3].province); //dwr中:java的List,Set会自动转化为js中的数组
           });
           td.test8(function(data){
              alert(data[0].addr.country);
              alert(data[0].name);
        });
 


 [c1]本质上仍然是请求响应模式
 [p2]位置
 [p3]名字是固定的,必须是:dwr.xml
 [p4]配置一个类,增加一个create元素就可以了。
 [p5]这两个js必须加上。
 [p6]通常所调用的java方法返回的是字符串,所以要用parseInfo来获取响应数据
 [c7]Dwr1.0引入:uk开头的包。
Dwr2.0引入:org开头的包。
 [c8]不写的话,所有属性都转化。
写的话,只转化value指定的属性。
 [c9]该元素置于<allow>外,<dwr>中。




转载地址:http://www.webspherechina.net/home/space.php?uid=28038&do=blog&id=51948

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值