首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

DWR基础引见

2012-11-12 
DWR基础介绍一,DWR(Direct Web Remoting)是一个开源的类库,可以帮助开发人员开发包含AJAX技术的网站.它可

DWR基础介绍

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

 二,配置?

1、拷贝dwr.jar文件
2、修改web.xml文件,添加dwr servlet配置:
??<servlet>
????<servlet-name>dwr-invoker</servlet-name>
????<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>/

????<!--以上用这个类也可以uk.ltd.getahead.dwr.DWRServlet--!>??
????<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><!--每一个文件在访问时,程序会自动加/dwr..-->
??</servlet-mapping>
3、在web-inf下面添加dwr.xml配置文件

//作用:Java代码运行在WEB服务器端而且可以自由访问WEB 服务器的资源.出于安全的理由,WEB开发者必须适当地配置哪些Java类可以安全的被外部使用。

4、创建页面
需引入以下javascript:

  <script src='dwr/interface/testClass.js'></script>//在配置文件中以怎么为对象就以怎么为命名,为dwr自动产生(????<create creator="new" javascript="testClass.js">)

<script src='dwr/engine.js'></script>
  <script src='dwr/util.js'></script>
  其中TestClass.js是dwr根据配置文件自动生成的,engine.js和util.js是dwr自带的脚本文件。


与spring结合使用

?<create creator="spring" javascript="Intro">
??<param name="beanName" value="id" />//beanName为固定形式,id为bean中配置的<bean id=""..>
??</create>

在jsp中对javascript调用函数时,function dwr()不能以dwr命名

基础部分:

??dwr.util.getValue("id");//可以获取到值

1,??object.method1(para1,para2,..,);//这种是进行赋参,2

2, object.method1(para1,function(data){

???alert(data);//这个为返回值,自行处理

});

3, object.method1(para1,method2);

?????function method2(data){

?????alert(data);

}//2,3为两种不同的返回值 类型


dwr的配置文件详解(指明标签中包括可以暴露给javascript访问的东西。)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<dwr>
??<allow>
????<create creator="new" javascript="T3">
??????<param name="class" value="com.wqy.DataBaseHandle"/>

?????<include method="testMethod1"/>//说明了这个T3在javaScrip中只能访问这个方法,没有声明时,代表全部可以。

 <exclude method="testMethod2">//标签指定要防止被访问的方法。

????</create>

<!--

<converter>标签则负责这些方法的参数和返回类型。convert元素的作用是告诉DWR在服务器端Java 对象表示和序列化的JavaScript之间如何转换数据类型。DWR自动地在Java和JavaScript表示之间调整简单数据类型。这些类型包括Java原生类型和它们各自的封装类表示,还有String、Date、数组和集合类型,

如当一个集合中加了User的自定义类对象,则要进行声明。bean是有getter setter类型,还有object类型

其他的array,list...是默认开放的。

-->
???????<convert converter="bean" match="com.wqy.User" javascript="user"/>


??</allow>
</dwr>

2,进行传对象

//进行传一个Bean ,User(string username,string password)的对象

如以下:因满足条件,

1,必须要有set方法

2,必须在convert里面进行转化<convert match="com.wqy.User" converter="bean" ></convert>

3,java方法中void testMethod5(User user)相对应的传进来

Function callTestMethod5(){

//定义要传到java方法中的参数
  var data;
  //构造参数,data实际上是一个object
  data1 = { username:"user", password:"password" }
  testClass.testMethod5(data);
  }

3,如果传的参数是数组、List
 Function callTestMethod7(){
  //定义要传到java方法中的参数
  var data;
  //构造参数,data实际上是一个object数组,即数组的每个元素均为object
  data = [
  {
  username:"user1",
  password:"password2"
  },
  {
  username:"user2",
  password:" password2"
  }
  ];
  testClass.testMethod7(data);
  }

  function callBackFortestMethod(data){
  //其中data接收方法的返回值
  for(var property in data){
  var bean = data[property];
  alert(bean.username);
  alert(bean.password);
  }
  }

4,如果返回值为map的值/或者传的参数为Map
function test2(){
????T5.hello(
????????function(datas){
????????????//循环获取Map中的内容
????????????for(var prop in datas){
????????????????alert("key="+prop+",value="+datas[prop]);
????????????}
????????}
????);
}、、可以以这种形式获取值
//可以以这种方式传map参数进去
如果java的方法的参数为Map(假设其key为String,value为TestBean),则在调用该方法的javascript函数中用如下方法构造要传递的参数:
  function callTestMethod (){
  //定义要传到java方法中的参数
  var data;
  //构造参数,date实际上是一个object,其属性名为Map的key,属性值为Map的value
  data = {
  "key1":{
  username:"user1",
  password:"password2"
  },
  "key2":{
  username:"user2",
  password:" password2"
  }
  };
  testClass.testMethod(data);
  }
  并且在dwr.xml中增加如下的配置段
  <signatures>
  <![CDATA[
  import java.util.List;
  import com.dwr.TestClass;
  import com.dwr.TestBean;
  TestClass.testMethod7(Map<String,TestBean>);
  ]]>
  </signatures>
//标签是用来声明java方法中List、Set或者Map参数所包含的确切类,以便java代码作出判断。

?

?

热点排行