`

DWR使用

阅读更多
一、简介
   DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它通过反射,将java翻译成javascript,然后利用回调机制,轻松实现了javascript调用Java代码。
二、开发过程
  其大概开发过程如下:
1.编写业务代码,该代码是和dwr无关的。
2.确认业务代码中哪些类、哪些方法是要由javascript直接访问的。
3.编写dwr组件,对步骤2的方法进行封装。
4.配置dwr组件到dwr.xml文件中,如果有必要,配置convert,进行java和javascript类型互转。
5.通过反射机制,dwr将步骤4的类转换成javascript代码,提供给前台页面调用。
6.编写网页,调用步骤5的javascript中的相关方法(间接调用服务器端的相关类的方法),执行业务逻辑,将执行结果利用回调函数返回。
7.在回调函数中,得到执行结果后,可以继续编写业务逻辑的相关javascript代码。

三、配置

1).配置web.xml
<servlet>
    <servlet-name> dwr-invoke </servlet-name>
    <servlet-class> uk.ltd.getahead.dwr.DWRServlet </servlet>
    <init-param> //这个是调试用,如果正式发布请该为false,不过听说2.0就默认为true了
       <param-name> debug </param-value>
       <param-value> true </param-value>
    </init-param>
    <init-param> //这个是DWR2.0必须的,不然会报java.lang.IllegalArgumentException
       <param-name> classes </param-value>
       <param-value> java.lang.Object </param-value>
</servlet>

<servlet-mapping>
    <servlet-name> dwr-invoke </servlet-name>
    <url-pattern> /dwr/* </url-pattern>
</servlet-mapping>

2).配置dwr.xml
dwr.xml的作用是让你告诉DWR哪些class中的哪些方法你需要暴露给前台使用,当DWR启动时候根据dwr.xml这个文件把java类中的方法转成js中可用的类中方法,使前台可以使用。
<?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配置 -->
<dwr>   
  <allow>      
  <!-- 建立JS对象,将目标对象的方法转换成JS对象的方法 -->       
<create javascript="testService" creator="new">           
   <param name="class" value="services.testService"></param>        </create>      
<!-- 从Spring中获取Java对象 -->       
<create javascript="deptSrv" creator="spring">           
  <param name="beanName" value="deptServices"></param>           
   <!-- 禁止执行 -->           
  <exclude method="deleteDept" />       
</create>       
<create javascript="loginSrv" creator="spring">           
   <param name="beanName" value="loginSrv"></param>        </create>       
<!-- 指定针对于特定对象的转换器 -->       
  <convert match="entity.*" converter="bean"></convert>       
  <convert match="java.lang.Throwable" converter="bean">              <param name="include" value="message"></param>       
   </convert>  
</allow>
</dwr>

3).js引入和调用
<script src="<%=basePath %>dwr/interface/testService.js"></script>  <script src="<%=basePath %>dwr/engine.js"></script>  
//Dwr的脚本驱动Js,以上两个必写
<script src="<%=basePath %>dwr/util.js"></script>  
//这是个工具包,可以不调用
<script type="text/javascript">
    function doMethod()
    {
        //调用方法:若公开的类是testService,公开的testService里的方法是test([参数]);
        testService.test([参数],callBack);//回调函数callBack()
    }

    function callBack(data)//data是后台返回的值,名字自取,也可省略,因为JS允许
    {
       处理方法……;//如果callBack()没有写明返回值,可以通过argments[0]拿到
    }
</script>

  DWR自动地在Java和JavaScript表示之间调整简单数据类型,这些类型包括Java原生类型和它们各自的封装类表示,还有String、Date、数组和集合类型。但如果参数类型非简单数据类型,则要通过转换。
在dwr.xml的<allow>标签中加入

<convert converter="bean" match="***一般来说是javabean***"> 
//int,String,list等不需要显式的转换就可以被js拿到
    <param name="include" value="***javabean中的属性,用','隔开***" />  </convert>

(1)调用有JavaBean参数的java方法

在JS端,把要传入的参数写成javabean方式,例:要传入一个名为student的javabean,参数有name,password,则
var stu = {name:"zhangsan",password:"zspassword"}; //这是json的表示方法
AAA.bbb(stu,callBack);

(2)调用返回List、Set或者Map的java方法

在JS端,以List,里面数据是bean为例,data是一个List型,只要用for循环就可以依次拿到数据。
遍历方法1:
for(var i=0;i<data.length;i++) 
    /*对于java方法的返回值为List(Set)的情况,DWR将其转                                 化为Object数组,传递个javascript*/
{
    alert(data[i].name+":"+data[i].password);
}

遍历方法2:
for(var property in data) //property为序号,从0开始
{
    var bean = data[property];
    alert(bean.name+":"+bean.password);
}

如果java方法的返回值为Map,则如下

//property为key值
for(var property in data)    
/*对于 java方法的返回值为Map的情况,DWR将其转化为一个Object,
其中Object的属性为原Map的key值,属性值为原Map相应的 value值*/
{
  var bean = data[property];
  alert(bean.username);
  alert(bean.password);
}

调用有List、Set或者Map参数的java方法
在dwr.xml的<dwr>标签内加入:<signatures>标签。

<signatures>标签是用来声明java方法中List、Set或者Map参数所包含的确切类,以便java代码作出判断,是js-->java的。

<signatures>
<![CDATA[
  import java.util.List;
  import com.dwr.AAA;     //AAA的包路径要写完整
  import com.dwr.TestBean;  //javabean
  AAA.bbb(List<TestBean>);
]]>
</signatures>
参数是javabean的Map,key是String,value是javabean,如下:
var stu =

{
    "key1":{name:"zhangsan",password:"zspassword"},
    "key2":{name:"lisi",password:"lspassword"}
};

AAA.bbb(stu,callBack);


并且在dwr.xml中增加如下的配置段(刚才试验了下,不加也可以)

<signatures>
<![CDATA[
  import java.util.List;
  import com.dwr.AAA;     //AAA的包路径要写完整
  import com.dwr.TestBean;  //javabean
  AAA.bbb(Map<String,TestBean>);
]]>
</signatures>















0
0
分享到:
评论

相关推荐

    DWR使用方法-step by step

    ### DWR使用方法详解:逐步指南 #### 一、引言 DWR(Direct Web Remoting)是一种简化Ajax开发的框架,它允许在浏览器端直接调用服务器端的方法,如同调用本地对象一样简单。本篇文章将从安装DWR、配置相关文件到...

    java dwr 使用例子

    对于初学者来说,这是一个很好的起点,它涵盖了DWR基本的使用方式和配置,同时也提供了一个可运行的示例,帮助理解Ajax通信的工作原理。通过深入学习和实践,你可以利用DWR构建更复杂的交互式Web应用。

    Ajax的DWR使用

    **Ajax的DWR使用** Direct Web Remoting (DWR) 是一种开源JavaScript库,它使得在Web应用程序中实现Ajax(Asynchronous JavaScript and XML)技术变得简单。DWR允许JavaScript与服务器端Java对象直接通信,无需编写...

    dwr 使用例子,一目了然

    标题"使用DWR的例子"暗示我们将讨论如何在实际项目中应用DWR。DWR的核心特性包括自动类型转换、安全机制、缓存管理以及错误处理等。在这个例子中,我们可能会看到如何配置DWR引擎,创建Java服务,以及在客户端...

    最完整的DWR入门文档及DWR使用案例

    这个“最完整的DWR入门文档及DWR使用案例”包含的资源无疑将帮助你深入理解和高效使用DWR。 首先,DWR的核心功能是提供了一种跨域的通信机制,使得前端JavaScript可以直接调用后端Java方法,就像操作本地函数一样,...

    一个简单的dwr使用示例

    这个"一个简单的dwr使用示例"旨在为初学者提供一个基础的DWR应用搭建教程。 一、DWR简介 DWR的核心功能是提供了动态的JavaScript到Java的调用,使得前端开发者可以在不刷新页面的情况下更新部分网页内容,提升用户...

    DWR使用步骤详解DWR使用步骤详解

    4. **反射机制**:根据`dwr.xml`的配置,DWR使用Java的反射机制动态地加载指定的类(例如,HelloWorld),实例化对象,并调用相应的方法(如test)。 5. **结果返回**:调用完成后,结果被序列化并返回到JavaScript...

    dwr使用入门总结

    dwr使用入门总结,适合想入门的dwr学者。

    dwr使用例子配置和使用

    下面我们将详细探讨DWR的配置和使用方法。 首先,配置DWR涉及以下几个关键步骤: 1. **引入DWR库**:在项目中添加dwr.jar,这是DWR的核心库,包含了所有必要的类和接口。 2. **创建Java类**:定义你需要在客户端...

    [DWR(Ajax)]DWR使用笔记.chm

    [DWR(Ajax)]DWR使用笔记.chm

    DWR使用步骤DWR使用步骤

    默认情况下,DWR使用异步方式发送请求,这意味着JavaScript中的调用可能不会按照预期顺序执行。如果需要同步执行,可以使用`DWREngine.setAsync(false)`来设置为同步方式。 3. **Servlet方法示例**: 例子中的`...

    ajax框架dwr使用的jar包

    ajax框架dwr使用的jar包,欢迎下载

    dwr说明dwr说明dwr说明

    DWR (Direct Web ...总的来说,DWR提供了一种高效且易于使用的解决方案,使得开发者能够构建高度互动的Web应用,同时减少了传统AJAX技术的复杂性。通过学习和掌握DWR,你可以更轻松地创建动态、响应式的网页应用。

    DWR的使用方法

    **DWR(Direct Web Remoting)使用方法详解** DWR,全称为Direct Web Remoting,是一种开源Java技术,用于在Web应用程序中实现浏览器与服务器之间的实时双向通信。它允许JavaScript直接调用Java方法,就像它们在...

    DWR 框架使用手册

    DWR通过在客户端和服务器之间建立一个通信层,使得开发者可以轻松地在JavaScript中使用Java对象,极大地简化了前后端交互的复杂性。 DWR的核心组件包括: 1. **DWRServlet**:这是DWR的主要入口点,它是一个...

Global site tag (gtag.js) - Google Analytics