转载JavaEye

1.1、dwr.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代码访问对象时使用的名称。 
  标签指定要公开给javascript的java类名。 
  <include>标签指定要公开给javascript的方法。不指定的话就公开所有方法。 
  <exclude>标签指定要防止被访问的方法。 
  1.2、javascript中调用 
  首先,引入javascript脚本 
  <script src='dwr/interface/ testClass.js'></script> 
  <script src='dwr/engine.js'></script> 
  <script src='dwr/util.js'></script> 
  其中TestClass.js是dwr根据配置文件自动生成的,engine.js和util.js是dwr自带的脚本文件。 
  其次,编写调用java方法的javascript函数 
  Function callTestMethod1(){ 
  testClass.testMethod1(); 
  } 
  2、调用有简单返回值的java方法 
  2.1、dwr.xml的配置 
  配置同1.1 
  <dwr> 
  <allow> 
  <create creator="new" javascript="testClass" > 
  <include method="testMethod2"/> 
  </create> 
  </allow> 
  </dwr> 
  2.2、javascript中调用 
  首先,引入javascript脚本 
  其次,编写调用java方法的javascript函数和接收返回值的回调函数 
  Function callTestMethod2(){ 
  testClass.testMethod2(callBackFortestMethod2); 
  } 
  Function callBackFortestMethod2(data){ 
  //其中data接收方法的返回值 
  //可以在这里对返回值进行处理和显示等等 
  alert("the return value is " + data); 
  } 
  其中callBackFortestMethod2是接收返回值的回调函数 
  3、调用有简单参数的java方法 
  3.1、dwr.xml的配置 
  配置同1.1 
  <dwr> 
  <allow> 
  <create creator="new" javascript="testClass" > 
  <include method="testMethod3"/> 
  </create> 
  </allow> 
  </dwr> 
  3.2、javascript中调用 
  首先,引入javascript脚本 
  其次,编写调用java方法的javascript函数 
  Function callTestMethod3(){ 
  //定义要传到java方法中的参数 
  var data; 
  //构造参数 
  data = “test String”; 
  testClass.testMethod3(data); 
  } 
  4、调用返回JavaBean的java方法 
  4.1、dwr.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自动地在Java和JavaScript表示之间调整简单数据类型。这些类型包括 Java原生类型和它们各自的封装类表示,还有String、Date、数组和集合类型。DWR也能把JavaBean转换成JavaScript 表示,但是出于安全性的原因,要求显式的配置,<convertor>标签就是完成此功能的。converter="bean"属性指定转换 的方式采用JavaBean命名规范,match=""com.dwr.TestBean"属性指定要转换的javabean名称,标签指定要转换的 JavaBean属性。 
  4.2、javascript中调用 
  首先,引入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.1、dwr.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.2、javascript中调用 
  首先,引入javascript脚本 
  其次,编写调用java方法的javascript函数 
  Function callTestMethod5(){ 
  //定义要传到java方法中的参数 
  var data; 
  //构造参数,data实际上是一个object 
  data = { username:"user", password:"password" } 
  testClass.testMethod5(data); 
  } 
  6、调用返回List、Set或者Map的java方法 
  6.1、dwr.xml的配置 
  配置同4.1 
  <dwr> 
  <allow> 
  <create creator="new" javascript="testClass" > 
  <include method="testMethod6"/> 
  </create> 
  <convert converter="bean" match="com.dwr.TestBean"> 
  </convert> 
  </allow> 
  </dwr> 
  注意:如果List、Set或者Map中的元素均为简单类型(包括其封装类)或String、Date、数组和集合类型,则不需要<convert>标签。 
  6.2、javascript中调用(以返回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、调用有List、Set或者Map参数的java方法 
  7.1、dwr.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方法中List、Set或者Map参数所包含的确切类,以便java代码作出判断。 
  7.2、javascript中调用(以返回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(假设其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> 
  3、由以上可以发现,对于java方法的返回值为List(Set)的情况,DWR将其转化为Object数组,传递个 javascript;对于java方法的返回值为Map的情况,DWR将其转化为一个Object,其中Object的属性为原Map的key值,属性 值为原Map相应的value值。 
  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]/ 部分。

时间: 2025-01-29 14:17:38

转载JavaEye的相关文章

【转载】Jenkins + Git + Maven + tomcat集成环境搭建

本文转载自http://shift-alt-ctrl.iteye.com/blog/2208786   折腾了好几天,终于吧Jenkins + Git + Maven + tomcat集成环境搭建起来了,最终主要实现"自动构建.部署"web应用.   1.安装环境     操作系统:Centos 6.5     JDK:1.7.x     Maven:3.1.x     Git: 1.7.1,自建GitLab平台     tomcat:7.x       上述宿主机器2台:192.16

完美解决layDate强制动态显示当前时间(不求评论,但求疯狂转载!)

**只给懂我的你** 强烈建议喜欢装逼(B)的使用上面的2.0版,优化了相关代码,封装了js,速度你懂得,O(∩_∩)O哈哈~, laydate2.0强势来袭:http://download.csdn.net/detail/cometwo/9371372 layDate默认是不显示时间的,实在是操蛋,现自己动手,现修源文件208行如下: 工程下载:你妈CSDN今天抽风,上传不了工程,改天传,急的加QQ:3120217729,我给你发,还是那句话:不求评论,但求疯狂转载!转转转 至此还是向@贤心同

软件架构模式转载

概要介绍 最近一两年,转载文章越来越少了,之所以转载这篇文章,是因为看这篇文章,弄明白了我的一些问题.所以梳理了一下,结合了几篇文章. 架构模式可以帮助你定义程序的基本特征和行为.例如一些架构模式很自然让程序成为大规模(scalable)的程序.有些模式让程序变得灵巧敏捷(agile).知道这些架构的特征,优点和缺点,你就可以根据你特定的业务需求和目标从容的选择一种架构模式.作为一位架构师,你总会为自己架构选择做解释,尤其你选择一个特别的架构模式的时候.O'Reilly的这本书提供了充足的信息来

【转载】低成本和高性能的MySQL云数据库的实现淘宝 MySQL

低成本和高性能的MySQL云数据库的实现 作者: 鸣嵩/曹伟(集团技术专家) 本文刊登于<程序员>杂志2012年12期上,转载请注明         UMP(Unified MySQL Platform)系统是淘宝核心系统数据库团队开发的低成本和高性能的MySQL云数据方案,关键模块采用Erlang语言实现.系统中包含了controller服务器.proxy服务器.agent服务器.API/Web服务器.日志分析服务器.信息统计服务器等组件,并且依赖于Mnesia.LVS.RabbitMQ.Z

[转载]JDK自带VM分析工具jps,jstat,jmap,jconsole

一.概述      SUN 的JDK中的几个工具,非常好用.秉承着有免费,不用商用的原则.以下简单介绍一下这几种工具.(注:本文章下的所有工具都存在JDK5.0以上版本的工具集里,同javac一样,不须特意安装)  .           我一共找到以下四个工具:重点看看jconsole和jmap. jps :与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号. jstat :一个极强的监视VM内存工具.可以用来监视VM内存内的各种堆和非堆

[转载] 黄志敏:一条数据新闻是如何用7步生产出来的?

PS:文章主要转载自36大数据的文章:           http://www.36dsj.com/archives/33280      最近同学找工作,在百度搜索引擎面试时就被问到"一条新闻是如何被发现的呢?"我能想到就是实时性,某段时间内突然关注的词汇可能是新闻,再或则是通过模板打分判断.      下面这篇文章就详细讲述了一条数据新闻是如何产生的?遗憾的是没有论述如何探索一条信息是有价值的新闻.但同样希望对你有所帮助,尤其是从事搜索引擎.信息挖掘相关的专业或面试的同学. 9月

[转载收藏]Ubuntu中设置samba共享可读写文件夹

在Ubuntu中设置samba共享可读写文件夹,需要在windows中通过iSCSI挂盘,或者使用samba来设置共享: samba安装方法如下:  代码: sudo apt-get install samba sudo apt-get install smbfs 下面我们来共享群组可读写文件夹,假设你要共享的文件夹为: /home/ray/share 首先创建这个文件夹 代码: mkdir /home/ray/share chmod 777 /home/ray/share 备份并编辑smb.c

消息队列和管道的区别(转载)

转载自:http://bbs.chinaunix.net/viewthread.php?tid=265266 作者:beginner-bj 请问管道和消息队列有什么不同  管道通信(PIPE) 管道通信方式的中间介质是文件,通常称这种文件为管道文件.两个进程利用管道文件进行通信时,一个 进程为写进程,另一个进程为读进程.写进程通过写端(发送端)往管道文件中写入信息:读进程通过读 端(接收端)从管道文件中读取信息.两个进程协调不断地进行写.读,便会构成双方通过管道传递信息 的流水线. 利用系统调用

【转载】关于时间、时区、系统时间和硬件时间

(文章为转载,针对部分表达不明确或错误的地方进行了修正)  时区(Time Zone)是用于划分地球上.使用同一时间定义的区域而产生的概念.1884年在华盛顿召开国际经度会议时,为了克服时间上的混乱,规定将全球划分为24个时区. 一.以下是一些术语的解释 格林威治标准时间 GMT十七世纪,格林威治皇家天文台为了海上霸权的扩张计划,而进行天体观测.1675年旧皇家观测所(Old Royal Observatory) 正式成立,到了1884年决定以通过格林威治的子午线作为划分地球东西两半球的经度零度