`
scholers
  • 浏览: 620317 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

DWR介绍

阅读更多
DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(JavaScript远程调用spring bean),更好浏览器支持,还支持一个可选的commons-logging日记操作.

DWR的设计构思很是巧妙。
第一、把java类转化为javascript类由dwr自动完成,只需简单的配置。
第二、应用起来极其简单。开发者不要该服务器代码就可以集成。
第三、容易测试。和webwork一样,隐藏的http协议。
第四、及强扩展性。例如与spring集成,只需修改一点代码。
第五、性能。就我与jason,等简单比较,dwr性能可能是最好的。
第六、自动把java对象转化为javascript对象,并且及易扩展

dwr一般都是异步调用,然后在回调函数里面设置相关的参数方法。可是我们有的时候往往需要调用JS函数的时候得到返回值,那么DWR中怎样设置成同步调用模式呢?下面的例子可以给你很好的注解。例子:


function getValidCode(){
          //优化取值方式,2007-11-29
    var _data = "";
    //设置成同步
    DWREngine.setAsync(false);
    //对返回参数进行赋值
    sessionUtil.getCurrVaildCode(function(data){_data = data;});
    //重新设置为异步方式
    DWREngine.setAsync(true);
            //返回值
    return _data;   
}




--------------------------------------------------------------------------------

DWR 下拉选择框实例下面以一个省市联动的例子来说明。
1.首先需要JAVA类中实现取数据的方法。下面在ItemsBean.java类实现了两个方法,一个是取省列表的,一个取市列表的。返回值都是MAP。

/**
* 得到省份列表
* @param request
* @return
*/
public Map provList(HttpServletRequest request) {
Map reply = new LinkedHashMap();
                //取省份列表
String[][] provStr = SelectControl.getSelectOption(
SelectControl.CODE_PROVINCE, 0, request);
if (provStr != null && provStr.length > 0) {
for (int i = 0; i < provStr.length; i++) {
if (i == 0) {
strProvId = provStr[i][1];
}
reply.put(provStr[i][1], provStr[i][0]);
}
}
return reply;
}

/**
* 得到城市列表
* @param provId
* @param request
* @return
*/
public Map cityList(String provId, HttpServletRequest request) {
Map reply = new LinkedHashMap();
if (provId == null || provId.equals("") || provId.equals("0")) {
if(strProvId == null) getDefaultPorvId();
provId = strProvId;
}
                //这里根据省份ID取城市列表
String[][] provStr = SelectControl.getSelectOption(
SelectControl.CODE_CITY, provId, request);
if (provStr != null && provStr.length > 0) {
for (int i = 0; i < provStr.length; i++) {
reply.put(provStr[i][1], provStr[i][0]);
}
}

return reply;
}

2.然后在DWR配置文件中配置如下:

   <create creator="new" javascript="ItemsBean">
      <param name="class" value="com.asiainfo.gp.bean.ItemsBean"/>
    </create>
3.在JSP页面首先引入:

   <script src="/webroot/dwr/interface/ItemsBean.js"></script>
  <script src="/webroot/dwr/engine.js"></script>
  <script src="/webroot/dwr/util.js"></script>
页面的JS代码:

       //得到省份列表的function
        function getProvList()
{
       ItemsBean.provList(createProvList); //调用JAVA类中的provList方法
}
       //回调函数
function createProvList(data)
{
    DWRUtil.removeAllOptions("provid"); //清除原来的数据
    DWRUtil.addOptions("provid", data); //省份下拉框中填入省份数据
    if(defaultProvid != null && defaultProvid != "" && defaultProvid != "0")
    DWRUtil.setValue('provid', defaultProvid);//设置默认的省份值
}
//得到城市列表的funtion
function getCityList()
{
       var provid = DWRUtil.getValue("provid");
       if(provid == null || provid == "")
       provid = defaultProvid;//取选中的省份ID
       ItemsBean.cityList(provid, createCityList); //根据省份ID取城市列表
}
       //回调函数
function createCityList(data)
{
    DWRUtil.removeAllOptions("cityid"); //清除下拉框中原有的城市数据
    DWRUtil.addOptions("cityid", data); //城市下拉框中天数城市数据
}
页面的下拉框写法:

<tr>
<td  class="info_title">
公司所在省份
</td>
        <td class="info_message">
       <select name="provCode" id="provid" onchange="javascript:update2();"></select> 
</td>
<td  class="info_title">
    公司所在地市
    </td>
    <td  class="info_message">
      <select name="cityId" id="cityid"></select>
    </td>

</tr>

 



--------------------------------------------------------------------------------

现象: DWR 在TOMCAT5.5.20上可以正常运行,而在TOMCAT5.0.30上提示以下错误: DefaultConfiguration.info(51) | Creator 'pageflow' not loaded due to ClassNotFoundException. This is only an problem if you wanted to use it. Cause: Beehive/Weblogic Creator not available.

处理方法: 1) put the xalan.jar in the endorsed folder for tomcat 2) use the following jvm args: -Djavax.xml.transform.TransformerFactory=com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl



 



--------------------------------------------------------------------------------

ransformerFactoryConfigurationError 这个问题的现象是在启动有DWR的Web应用时出现如下stack trace:

root cause
javax.xml.transform.TransformerFactoryConfigurationError:
  Provider org.apache.xalan.processor.TransformerFactoryImpl not found
       javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
这个问题和DWR没有什么关系,那是因为Tomcat没有配置好。比较简单的解决办法是下载Xalan替换掉$TOMCAT-HOME/common/lib目录下的xalan.jar文件。DWR2.0能更好的处理这个问题,但是本质的问题还是因为DWR的XML序列化需要有XSLT解析器的支持。
如果你用JDK5还是有这个问题的话,你可以增加以下VM参数来使Tomcat正常工作。

-Djavax.xml.transform.TransformerFactory=
   com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
分享到:
评论

相关推荐

    ajax技术和dwr介绍

    在DWR中,首先需要配置DWR Engine,然后创建Java服务接口,最后在客户端JavaScript中调用这些接口。例如: ```java // Java服务接口 public class MyService { public String getGreeting() { return "Hello, ...

    springMVC+dwr技术实现消息推送实例

    **DWR介绍** DWR是一种开源的JavaScript库,它的核心功能是实现了浏览器与服务器之间的双向通信。传统的Ajax技术通常依赖于浏览器发起请求,而DWR则允许服务器主动向客户端推送数据,无需等待用户的操作。这种特性...

    DWR中文教程(教程实在不可多得)

    - DWR介绍及安装指南 - 配置DWR环境 - 创建和使用JavaScript代理 - 调用Java方法与处理响应 - 错误处理和调试技巧 - 示例应用开发 - 性能优化和安全性考量 - DWR与其他技术的集成 这个DWR中文教程涵盖了...

    DWR基础教程 开发案例

    **DWR介绍** DWR的核心思想是通过在服务器上运行的Servlet处理来自浏览器的请求,并将结果以JavaScript可理解的形式返回。在浏览器端,DWR自动生成与Java类对应的JavaScript代码,允许JavaScript直接调用服务器端的...

    第一个DWR程序

    1. **DWR介绍**:DWR的工作原理,它是如何通过AJAX技术实现实时通信的,以及它的主要组件和API。 2. **环境搭建**:如何在Java项目中添加DWR依赖,配置Web应用的web.xml和dwr.xml文件,以启用DWR服务。 3. **Java...

    AJAX_DWR框架(二级联动+PPT实例代码)

    3. **DWR介绍PPT**:这个PowerPoint演示文稿可能是对DWR框架的详细介绍,包括其工作原理、如何集成到项目中、核心API的使用以及最佳实践。PPT可能涵盖了DWR的核心组件如`Engine`、`Caucho`和`Remoting`,以及安全性...

    DWR-Test源码

    理解DWR(Direct Web Remote)的使用方法 - 请参考《DWR介绍》 理解JSON(JavaScript Object Notation)数据格式 - 可参考http://www.json.org/json-zh.html

    DWR中文文档DWR

    - 该中文文档将详细介绍DWR的安装、配置、使用方法以及常见问题的解决,是学习DWR的重要参考资料。 通过深入学习这份DWR中文文档,开发者不仅可以掌握DWR的基本用法,还能了解到如何在实际项目中有效利用DWR提升...

    DWR3.0.jar、DWR.war和DWR2.0中文说明文档

    - **安装与配置**:介绍如何将DWR添加到现有项目中,包括引入jar文件、配置web.xml和dwr.xml文件。 - **基本使用**:讲解如何创建可从JavaScript调用的Java方法,以及如何在客户端使用DWR API进行调用。 - **安全...

    DWR 教程 中文API DWR.xml配置文件说明 DWR学习笔记

    在这个压缩包中,"DWR开发培训.ppt"可能是一个演示文稿,用于教学或研讨会,其中可能包含PPT幻灯片,系统地介绍了DWR的各个方面,可能包括实例演示、最佳实践和常见问题解答。 总的来说,这个DWR教程包提供了一套...

    DWR配置介绍

    ### DWR配置与使用详解 #### 一、DWR简介 DWR,全称为Direct Web Remoting,是一种专为Java开发者设计的AJAX框架。它通过简化JavaScript与Java后端服务之间的交互,使得前端开发人员能够如同调用本地JavaScript...

    DWR中文文档 (DWR 2.0)

    6. **调用远程的Cart方法**:详细介绍如何通过DWR调用具体的购物车服务端方法。 7. **演示结果**:提供最终实现效果的截图或视频。 8. **总结**:回顾项目过程,总结经验和教训。 #### 五、附录 **10.1 常见问题**...

    DWR(Direct Web Remoting)介绍

    ### DWR (Direct Web Remoting) 介绍与应用 #### 一、概述 DWR(Direct Web Remoting)是一个开放源代码的项目,遵循Apache许可协议。它为开发者提供了一个强大的工具集,使得通过JavaScript调用Java方法变得简单...

    dwr3api+DWR文档.pdf

    文档会介绍如何使用这些接口,以及如何定义和调用远程Java类和方法。 4. **安全与权限控制**:DWR提供了安全机制,如白名单、IP限制和安全配置,以防止未授权的远程方法调用。 5. **类型转换**:DWR自动处理Java...

    适合初学者的DWR基本使用视频教程

    资源名称:适合初学者的DWR基本使用视频教程资源目录:【】dwr01_dwr的安装【】dwr02_dwr的转换器和异常处理【】dwr03_dwr的util的介绍【】dwr04_文件上传和与spring进行整合【】dwr05_dwr的debug和获取ServletAPI...

    dwr配置文件详解 dwr.xml配置文件详解

    在本文中,我们将详细介绍dwr配置文件的结构和配置方法,并探讨它在实际应用中的作用。 dwr配置文件的结构 -------------------- dwr配置文件是一个XML文件,名称通常为dwr.xml。它的结构主要包括以下几个部分: ...

Global site tag (gtag.js) - Google Analytics