Struts2中的DWR

DWRDirect Web Remoting)是一个类库,可以帮助开发员开发包含AJAX的网站.它可以允浏览器里的代使用运行在WEB器上的JAVA函数,就像它就在浏览器里一.

  它包含两个主要的部分:JavaScriptWEB器上一个遵循了AJAXServlet取数据.另外一方面一个JavaScript可以帮助网站开发员轻松地利用取的数据来动态的内容.

  DWR采取了一个AJAX的新方法来动态生成基于JAVAJavaScript.这样WEB开发就可以在JavaScript里使用Java就像它浏览器的本地代(端代);但是Java运行在WEB器端而且可以自由访问WEB 器的.出于安全的理由,WEB开发者必适当地配置哪些Java可以安全的被外部使用.

  个从JAVAJavaScript程功能方法DWR的用户带来非常像传统RPC机制,就像RMI或者SOAP,而且有运行在WEB上但是不需要浏览器插件的好.

  DWR认为浏览/WEB协议是重要的,而更于保证编程界面的简单自然.此最大的挑就是把AJAX的异特性和正常JAVA方法用的同特性相.在异模式下,果数据在用之后的一段时间之后才可以被异步访问获取到.DWRWEB开发员传递一个回函数,来异步处Java函数.

使用方法

1.1dwr.xml的配置

  <dwr>

  <allow>

  <create creator="new" javascript="testClass" >

  <include method="testMethod1"/>

  </create>

  </allow>

  </dwr>

  <allow>标签中包括可以暴露javascript访问西。

  <create>标签中指定javascript中可以访问java,并定DWR当如何得要程的例。creator="new"属性指定java类实例的生成方式,new意味着DWR的默构造函数来例,其他的spring方式,通IOC容器Spring行集成来例等等。javascript=" testClass "属性指定javascript码访问对使用的名称。

  标签指定要公开给javascriptjava名。

  <include>标签指定要公开给javascript的方法。不指定的就公所有方法。

  <exclude>标签指定要防止被访问的方法。

  1.2javascript

  首先,引入javascript脚本

  <script src='dwr/interface/ testClass.js'></script>

  <script src='dwr/engine.js'></script>

  <script src='dwr/util.js'></script>

  其中TestClass.jsdwr根据配置文件自生成的,engine.jsutil.jsdwr的脚本文件。

  其次,java方法的javascript函数

  Function callTestMethod1(){

  testClass.testMethod1();

  }

  2用有简单返回java方法

  2.1dwr.xml的配置

  配置同1.1

  <dwr>

  <allow>

  <create creator="new" javascript="testClass" >

  <include method="testMethod2"/>

  </create>

  </allow>

  </dwr>

  2.2javascript

  首先,引入javascript脚本

  其次,java方法的javascript函数和接收返回的回函数

  Function callTestMethod2(){

  testClass.testMethod2(callBackFortestMethod2);

  }

  Function callBackFortestMethod2(data){

  //其中data接收方法的返回

  //可以在返回值进理和示等等

  alert("the return value is " + data);

  }

  其中callBackFortestMethod2是接收返回的回函数

  3用有简单参数的java方法

  3.1dwr.xml的配置

  配置同1.1

  <dwr>

  <allow>

  <create creator="new" javascript="testClass" >

  <include method="testMethod3"/>

  </create>

  </allow>

  </dwr>

  3.2javascript

  首先,引入javascript脚本

  其次,java方法的javascript函数

  Function callTestMethod3(){

  //java方法中的参数

  var data;

  //构造参数

  data = “test String”;

  testClass.testMethod3(data);

  }

  4用返回JavaBeanjava方法

  4.1dwr.xml的配置

  <dwr>

  <allow>

  <create creator="new" javascript="testClass" >

  <include method="testMethod4"/>

  </create>

  <convert converter="bean" match=""com.dwr.TestBean">

  </convert>

  </allow>

  </dwr>

  <creator>标签负责用于Web程的的方法,<convertor>标签则负责这些方法的参数和返回型。convert元素的作用是告DWR在服器端Java 象表示和序列化的JavaScript如何转换数据型。DWR地在JavaJavaScript表示之间调简单数据型。型包括Java原生型和它各自的封装表示,StringDate、数和集合型。DWR也能把JavaBean转换JavaScript 表示,但是出于安全性的原因,要求式的配置,<convertor>标签就是完成此功能的。converter="bean"属性指定转换的方式采用JavaBean命名范,match=""com.dwr.TestBean"属性指定要转换javabean名称,标签指定要转换JavaBean属性。

  4.2javascript

  首先,引入javascript脚本

  其次,java方法的javascript函数和接收返回的回函数

  Function callTestMethod4(){

  testClass.testMethod4(callBackFortestMethod4);

  }

  Function callBackFortestMethod4(data){

  //其中data接收方法的返回

  //JavaBean返回,有两方式

  //不知道属性名称,使用如下方法

  for(var property in data){

  alert("property:"+property);

  alert(property+":"+data[property]);

  }

  //知道属性名称,使用如下方法

  alert(data.username);

  alert(data.password);

  }

  其中callBackFortestMethod4是接收返回的回函数

  5用有JavaBean参数的java方法

  5.1dwr.xml的配置

  配置同4.1

  <dwr>

  <allow>

  <create creator="new" javascript="testClass" >

  <include method="testMethod5"/>

  </create>

  <convert converter="bean" match="com.dwr.TestBean">

  </convert>

  </allow>

  </dwr>

  5.2javascript

  首先,引入javascript脚本

  其次,java方法的javascript函数

  Function callTestMethod5(){

  //java方法中的参数

  var data;

  //构造参数,data实际上是一个object

  data = { username:"user", password:"password" }

  testClass.testMethod5(data);

  }

  6用返回ListSet或者Mapjava方法

  6.1dwr.xml的配置

  配置同4.1

  <dwr>

  <allow>

  <create creator="new" javascript="testClass" >

  <include method="testMethod6"/>

  </create>

  <convert converter="bean" match="com.dwr.TestBean">

  </convert>

  </allow>

  </dwr>

  注意:如果ListSet或者Map中的元素均为简单类型(包括其封装)或StringDate、数和集合型,不需要<convert>标签

  6.2javascript(以返回List例,List的元素TestBean)

  首先,引入javascript脚本

  其次,java方法的javascript函数和接收返回的回函数

  Function callTestMethod6(){

  testClass.testMethod6(callBackFortestMethod6);

  }

  Function callBackFortestMethod6(data){

  //其中data接收方法的返回

  //JavaBean返回,有两方式

  //不知道属性名称,使用如下方法

  for(var i=0;i<data.length;i++){

  for(var property in data[i]){

  alert("property:"+property);

  alert(property+":"+data[i][property]);

  }

  }

  //知道属性名称,使用如下方法

  for(var i=0;i<data.length;i++){

  alert(data[i].username);

  alert(data[i].password);

  }

  }

  7用有ListSet或者Map参数的java方法

  7.1dwr.xml的配置

  <dwr>

  <allow>

  <create creator="new" javascript="testClass" >

  <include method="testMethod7"/>

  </create>

  <convert converter="bean" match="com.dwr.TestBean">

  </convert>

  </allow>

  <signatures>

  <![CDATA[

  import java.util.List;

  import com.dwr.TestClass;

  import com.dwr.TestBean;

  TestClass.testMethod7(List<TestBean>);

  ]]>

  </signatures>

  </dwr>

  <signatures>标签是用来声明java方法中ListSet或者Map参数所包含的确切,以便java作出判断。

  7.2javascript(以返回List例,List的元素TestBean)

  首先,引入javascript脚本

  其次,java方法的javascript函数

  Function callTestMethod7(){

  //java方法中的参数

  var data;

  //构造参数,data实际上是一个object,即数个元素均object

  data = [

  {

  username:"user1",

  password:"password2"

  },

  {

  username:"user2",

  password:" password2"

  }

  ];

  testClass.testMethod7(data);

  }

  注意:

  1于第6情况,如果java方法的返回值为Map在接收返回javascript函数中如下理:

  function callBackFortestMethod(data){

  //其中data接收方法的返回

  for(var property in data){

  var bean = data[property];

  alert(bean.username);

  alert(bean.password);

  }

  }

  2于第7情况,如果java的方法的参数Map(假keyStringvalueTestBean),方法的javascript函数中用如下方法构造要传递的参数:

  function callTestMethod (){

  //java方法中的参数

  var data;

  //构造参数,date实际上是一个object,其属性名Mapkey,属性值为Mapvalue

  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>

  3、由以上可以发现java方法的返回值为List(Set)的情况,DWR将其Object传递javascriptjava方法的返回值为Map的情况,DWR将其一个Object,其中Object的属性Mapkey,属性值为Mapvalue

  4、如果java方法的参数List(Set)Map的情况,javascript中也要根据3,构造相javascript数据来传递java

[编辑本段]

安装配置

1. 安装 DWR JAR

  下 dwr.jar 文件,然后将它放在 web 程序的 WEB-INF/lib 下面,很可能在个目下已有一些 jar 文件了。

  2. 编辑 config 文件

  将下面的代添加到 WEB-INF/web.xml 文件中,<servlet>需要放在另外的<servlet>之后,<servlet-mapping>也是如此。

  <servlet>

  <servlet-name>dwr-invoker</servlet-name>

  <display-name>DWR Servlet</display-name>

  <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>

workjjh

 

  <init-param>

  debug</param-name>

  true</param-value>

  </init-param>

  </servlet>

  <servlet-mapping>

  <servlet-name>dwr-invoker</servlet-name>

  <url-pattern>/dwr/*</url-pattern>

  </servlet-mapping>

  接下来 dwr.xml 文件并将此放在 web.xml 所在的 WEB-INF 下。文件中似下面的内容:

  <!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=”JDate”>

  </create>

  <create creator=”new” javascript=”Demo”>

  </create>

  </allow>

  </dwr>

  DWR 配置文件定了由 DWR 建和被 Javascript 程使用的。在上面的例子中我建了2,并且出了在 Javascript 中的名。

  上面使用的 new creator 使用了所有的 JavaBeans 含有的公有(public)无参(no-args)的构造函数。得一提的是, DWR 有一些限制:

  避免使用 JavaScript 保留字;以保留字命名的方法将自被排除。大多数 JavaScript 的保留字同也是 Java 的保留字,因此无如何你也不能使用一个名 “try()” 的方法。但是最常用的一个 “delete()”,在 JavaScript 中有特殊的含而在 Java 中没有。

  重方法(Overloaded methods)将会在用的候陷入未知的状况,因此应该避免重方法。

  3. 访问下面的地址

  http://localhost:8080/[YOUR-WEBAPP]/dwr/

  你应该会看到一个面,上面示了才你在第二建的入一个接之后你会看到所有等待用方法的列表。动态产生的例子你也能通 DWR 实现

  尝试和体会下吧。

  怎样应用到你的 Web 程序中?

  在侧边栏有很多例子演示了怎中的文本、更新列表、操作表动态修改表格。一个例子都有详细明。

  另外一个始方法就是从面中看源代面你刚刚浏览过

   http://localhost:8080/[YOUR-WEBAPP]/dwr/ 然后点建的

  看源代然后定位到你所感趣的方法的代行;

  将些文本粘到你 Web 程序的一个 HTML JSP面中;

  包含下面的 javascrip 文件:

  <script src=’/[YOUR-WEBAPP]/dwr/interface/[YOUR-SCRIPT].js’></script>

  <script src=’/[YOUR-WEBAPP]/dwr/engine.js’></script>

  你可以根据实际情况修改 /[YOUR-WEBAPP]/ 部分。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值