DWR使用流程

 

1:DWR在WEB中的配置

1.1需要引入的JAR包

dwr.jar和commons-loggin.jar

1.2在web.xml中的配置

在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>

1.3在dwr.xml中的配置

在WEB-INF目录下的web.xml旁边创建一个dwr.xml文件,DWR配置文件定义了那些DWR会创建提供远程调用的Javascript类。

配置说明:

dwr.xml的业务组件发布和调用规则配置部分Allow:

一、create元素 这个元素是配置后台业务组件的创建规则和组件方法的访问规则。

二、convert元素 这个元素是配置Java对象和数据类型对应的转换器。DWR内置了所有java基本数据类型的转换器。基本数据类型的对象形式也采用同一的转换器转换。

dwr.xml的业务组件方法签名配置部分Signatures(实例):

<signatures>

    <![CDATA[

    import java.util.ArrayList;

    import java.util.List;

    import com.tech.dwr.UserDWR;   

    import com.tech.dwr.User; 

    UserDWR.getUserListSignatures(List<User>);

    ]]>

</signatures>

2:DWR实例

2.1配置dwr.xml

<!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="js_UserDWR">

             <param name="class" value="com.tech.dwr.UserDWR"/>

             <include method="user_Check"/>

             <include method="getUser"/>

             <include method="maps"/>

             <include method="getUserList"/>

             <include method="getUserListSignatures"/>

    </create>

   

    <convert match="com.tech.dwr.User" converter="bean">

        <param name="include" value="id,name"></param>

    </convert>

    </allow>

 

    <signatures>

    <![CDATA[

    import java.util.ArrayList;

    import java.util.List;

    import com.tech.dwr.UserDWR;   

    import com.tech.dwr.User; 

    UserDWR.getUserListSignatures(List<User>);

    ]]>

    </signatures>

 

</dwr>

 

2.2配置Java相关类

(1):创建User类

package com.tech.dwr;

public class User {

    private int id;

    private String name;

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

}

 

2.3返回普通类型测试(简单验证测试)

(1):相关JAVA类

package com.tech.dwr;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

/**

 * 描述:DWR测试类

 * @author xq

 */

public class UserDWR {

    //返回普通类型测试

    public String user_Check(String name) {

        if("xq".equals(name)) {

            return "0000"; 

        }

        return "1";

    }

}

 

(2):相关JSP代码

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+

  ":"+request.getServerPort()+path+"/";

%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

<script  type='text/javascript'

    src='<%=path%>/dwr/interface/js_UserDWR.js'></script>

<script type='text/javascript' src='<%=path%>/dwr/engine.js'></script>

 

    <title>DWR测试页面</title>

  </head>

  

  <body>

   <div style="float:left">

   用户名:<input type="text" name="username" id="username" onchange="check()"/>

         <input type="submit" value="提交" onclick="checkUserSignatures()">

   </div>

   <div style="float:left;margin-left:10px;font-size:13px;color:#FF0000"

     id="context"></div>

  </body>

 

  <script type="text/javascript">

    //dwr返回基本类型

    function check() {

        var user_name = document.getElementById("username").value;

        js_UserDWR.user_Check(user_name,function(rs){

            if(rs==0000) {

                document.getElementById("context").innerHTML = "用户名正确";

            } else {

                document.getElementById("context").innerHTML = "用户名错误";

            }

        });

    }

   

 

  </script>

</html>

 

2.4返回类型为对象的测试

(1):在UserDWR类中加入如下方法:

    //返回对象测试

    public User getUser() {

    User user = new User();

    user.setId(1);

    user.setName("xiongqi");

    return user;

   }

 

(2):在login.jsp加入如下js函数

    //dwr返回对象类型

    function checkUser() {

        js_UserDWR.getUser(function(rs){

            alert("对象类型返回结果为:" + rs.id + "-----" + rs.name);

        });

    }

 

(3):把提交按钮的onclick事件换成checkUser()

 

2.5返回map测试

(1):在UserDWR类中加入如下方法:

//返回map测试

 public Map<String,String> maps() {

    Map<String,String> map = new HashMap<String,String>();

    map.put("map1","xqMap1");

    map.put("map2", "xqMap2");

    return map;

}

 

(2):在login.jsp加入如下js函数

//dwr返回map类型

  function checkUserMap() {

    js_UserDWR.maps(function(rs){

        var t = "";

        for(var key in rs ) {

            t = t + rs[key] + "---";

        }

        alert("map中的值为:" + t);

    });
}

 

(3):把提交按钮的onclick事件换成checkUserMap()

 

2.6返回带泛型的List测试 

(1):在UserDWR类中加入如下方法:

//返回带泛型的List测试

public List<User> getUserList() {

User user = new User();

    user.setId(1);

    user.setName("xiongqi");

    User user2 = new User();

    user2.setId(1);

    user2.setName("xiongqi");

    List<User> list = new ArrayList<User>();

    list.add(user);

    list.add(user2);

    return list;

}

 

(2):在login.jsp加入如下js函数

//dwr返回list类型

  function checkUserList() {

    js_UserDWR.getUserList(function(rs){

        var t = "";

        for(var index in sr) {

            t = t + rs[index].id + "---" + rs[index].name + "---"

        }

        alert("list中的值为:" + t);

    });

  }

 

(3):把提交按钮的onclick事件换成checkUserList()

 

2.7测试DWR的signatures

(1):在UserDWR类中加入如下方法:

   //测试dwr的signatures,如果参数内部的泛型没有明确给出需要配置,如果给出为List<User>则无需配置

public List<User> getUserListSignatures(List list2) {

    List<User> list = new ArrayList<User>();

    list = list2;

    return list;

}

 

(2):在login.jsp加入如下js函数

function checkUserSignatures() {

    var userList = [{id:100,name:'xq'},{id:200,name:'xq2'}];

    js_UserDWR.getUserListSignatures(userList,function(rs){

        var t = "";

        for(var index in rs) { //rs从0开始

            t = t + rs[index].id + "---" + rs[index].name + "---"

        }

        alert("signatures配置后的结果为" + t);

    });

}

(3):在dwr.xml中配置好signatures

(4):把提交按钮的onclick事件换成checkUserSignatures()

(5):说明如果函数换成如下形式,则无需添加Signatures,只有形参泛型类型不确定的时候才需添加

public List<User> getUserListSignatures(List<User> list2) {

    List<User> list = new ArrayList<User>();

    list = list2;

    return list;

}

如果第三步没有配置signatures,则点击确定后结果如下:

 

 

 

 

 

 

   

 

posted on 2015-03-25 11:30  xiongqi_wentian  阅读(231)  评论(0编辑  收藏  举报