`
高级java工程师
  • 浏览: 405286 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DWR(学习四)

    博客分类:
  • DWR
阅读更多
这部分将实际开发一个应用,套用了一个老外的示例模板,做了一个在线礼品的简易版本。
先讲一下应用的结构
页面端:
    demo.jsp用来展示界面
服务端:
    DemoAction是Struts中的Action子类负责控制转换,
    DemoFacade是业务类负责业务处理。
    Goods是一个业务实体类

Struts部分的配置就忽略不说了,实际上这个应用并没有包含Struts的配置
主要讲一下dwr的配置,首先需要在web.xml增加下面的servelt映射:

xml 代码
<servlet>  
    <description>Direct Web Remoter Servlet</description>  
    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>dwr-invoker</servlet-name>  
    <url-pattern>/dwr/*</url-pattern>  
  </servlet-mapping>  

 

如上uk.ltd.getahead.dwr.DWRServlet是dwr的核心,用来处理javascript的对远程方法的调用,还有其他参数请参考相关文档。
然后,需要在dwr.xml配置相应的远程方法(与具体需要在客户端调用的方法相关),如下为演示应用的配置:

xml 代码
<dwr>  
    <allow>  
        <convert converter="bean" match="dwr.demo.Goods"/>  
        <create creator="new" javascript="DemoAction" class="dwr.demo.DemoAction">  
            <include method="query4dwr"/>  
            <include method="copy4dwr"/>  
            <include method="paste4dwr"/>  
        </create>  
        <create creator="new" javascript="DemoFacade" class="dwr.demo.DemoFacade">  
            <include method="queryList"/>  
            <include method="restore"/>  
            <include method="del"/>  
        </create>  
      </allow>  
</dwr>  

如上有一个转换器(converter)是用来映射dwr.demo.Goods为bean类型,其他转换器类型请参考相关文档;还有两个创建器分别创建 javascript中的DemoAction类和DemoFacade类,分别对应dwr.demo.DemoAction类和 dwr.demo.DemoFacade,其中定义的方法就可以从javascript中直接调用了。
最后,我们需要在页面中包含相应的javascript:
  <script src="http://www.zhmy.com/dwr/interface/DemoAction.js"></script>
  <script src="http://www.zhmy.com/dwr/interface/DemoFacade.js"></script>
  <script src="http://www.zhmy.com/dwr/engine.js"></script>
  <script src="http://www.zhmy.com/dwr/util.js"></script>
如上,dwr/interface/DemoAction.js和dwr/interface/DemoFacade.js是dwr自动生成的 javascript文件,包含相应的类及方法,dwr/engine.js是dwr的核心引擎脚本处理客户端调用的转换,dwr/util.js包含了工具函数简化页面处理。

下面以查询为例,看一下dwr的具体使用:
DemoAction:
    public List query4dwr(int type, boolean needClear, HttpServletRequest request) {
        if (needClear) request.getSession().removeAttribute("dwr.demo.goodsId");
        return demoFacade.queryList(type);
    }
demo.jsp:
  function updateResults() {
    DWRUtil.removeAllRows("goodsbody");
    var type = document.getElementById("type").value;
    DemoAction.query4dwr(type, true, fillTable);
  }
  function fillTable(goods) {
    document.forms[0].select.checked = false;
    document.getElementById("totalRecords").innerHTML = goods.length;
    DWRUtil.addRows("goodsbody", goods, [ addCheckbox, getName, getPrice, getCount]);
  }
如上,DemoAction.query4dwr(type, true, fillTable)就可以直接调用DemoAction的方法了,这里fillTable是函数,dwr通过回调函数的方式来进行后续处理。比较一下 javascript和action中的方法参数,HttpServletRequest是可以不传的,dwr会自动加上,另一个就是回调参数放在最后,这是比较好的方式,其他方式请参考文档。

最后看一下,dwr如何与Struts集成,如下代码:
    public ActionForward query(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String type = request.getParameter("type");
        //或者从form中取值
       
        List goodsList = query4dwr(Integer.parseInt(type), true, request);
        request.setAttribute("goodsList", goodsList);
       
        return mapping.findForward("success");
    }

    public List query4dwr(int type, boolean needClear, HttpServletRequest request) {
        if (needClear) request.getSession().removeAttribute("dwr.demo.goodsId");
        return demoFacade.queryList(type);
    }
前一个方法是Struts的方式,但dwr不支持,因此要重构一下在下面的方法才可以被dwr调用。
实际上,只有在方法中需要使用到HttpServletRequest是才需要重构方法,如果不使用HttpServletRequest,我们就可以直接调用业务层的类的方法,这样即简单又方便,如下:
demo.jsp:
  function restore() {
    DemoFacade.restore(updateResults);
  }

DemoAction:
    public synchronized void restore() {
        goodsList.clear();   
        initGoods();
    }

小结

  dwr封装了ajax中与服务端交互的模块,通过直接调用服务端类的方法简化了客户端与服务端的交互。虽然说还缺省类似tag这样的组件,但已经很大程度简化了ajax的开发。

 

资源

  dwr主站:http://getahead.ltd.uk/dwr
  ajax主站:http://en.wikipedia.org/wiki/AJAX
分享到:
评论

相关推荐

    dwr学习教程3

    【DWR学习教程3】是针对Direct Web Remoting (DWR)这一JavaScript和Java之间的通信框架的深入学习资料。DWR允许在Web浏览器和服务器之间进行实时、安全且高效的交互,使得前端JavaScript能够调用后端Java方法,极大...

    dwr学习总结dwr学习总结

    ### DWR学习总结 #### 一、DWR简介与版本变迁 DWR(Direct Web Remoting)是一个开源项目,它简化了服务器端Java对象与客户端JavaScript脚本之间的交互过程。通过DWR,开发者可以直接调用服务器端的方法就像调用...

    DWR框架配置学习教程

    ### DWR框架配置学习教程 #### 一、DWR框架简介与配置 DWR(Direct Web Remoting)是一个用于简化Ajax应用开发的框架,它可以让客户端JavaScript代码直接调用服务器端Java方法,从而大大简化了前端与后端的交互...

    dwr推模式学习资料

    ### dwr推模式学习资料知识点解析 #### 一、DWR简介及推模式概述 **Direct Web Remoting (DWR)** 是一个简化Ajax应用程序开发的Java框架,它允许客户端JavaScript直接调用服务器端的Java方法,从而使得开发更加...

    dwr学习笔记pdf文件

    ### dwr学习笔记pdf文件知识点概述 #### 一、DWR框架简介 - **DWR**(Direct Web Remoting)是由GetAhead公司开发的一款用于实现Ajax应用的框架。该框架的核心价值在于允许客户端JavaScript直接调用服务器端Java类...

    dwr学习笔记和总结

    ### dwr学习笔记和总结 #### 一、DWR简介 DWR (Direct Web Remoting) 是一个简化Ajax开发的框架,它使得JavaScript能够直接调用服务器端的Java方法成为可能,无需编写复杂的Ajax代码。这极大地提高了开发效率,并...

    ajax dwr学习笔记和jar文件

    四、DWR的优势 1. **易用性**:DWR提供了一套简单的API,让开发者能够快速上手。 2. **安全**:DWR提供了安全机制,如白名单、签名等,防止未授权的远程方法调用。 3. **性能**:通过批处理和缓存技术,DWR提高了...

    dwr笔记 dwr自学资料

    DWR (Direct Web Remoting) ...通过学习和掌握DWR,你可以更好地融合前后端开发,实现更为流畅的用户交互。在自学过程中,理解DWR的工作原理、熟练运用其主要组件以及掌握实际应用场景,都将对你的IT职业生涯大有裨益。

    DWR学习资料及源代码

    DWR(Direct Web Remoting)是一个开源的Java库,它允许Web应用程序在浏览器和服务器之间...在学习DWR的过程中,你可以参考提供的书籍和实例,深入了解其工作原理和最佳实践,从而更好地利用DWR提升Web应用的用户体验。

    DWR学习文档易懂 好东西

    **四、DWR的应用场景** 1. **动态数据更新**: 无需刷新整个页面,只更新部分区域,如实时股票信息、聊天窗口等。 2. **表单验证**: 客户端可以即时验证用户输入,提高用户体验。 3. **文件上传下载**: 通过DWR...

    Dwr3.0 与 Dwr2.0 区别

    - 同时还提供了更完善的文档和支持资源,方便开发者学习和使用。 #### 五、兼容性和移植性 **DWR 2.0:** - 在兼容性方面,2.0 版本主要支持当时的主流浏览器。 - 移植性较好,但由于技术限制,对于新出现的平台或...

    dwr实现四级联动(五级参数信息展示)

    通过分析这些文件,我们可以学习到如何实际操作DWR来实现这样的功能,包括但不限于DWR的配置文件(dwr.xml)、JavaScript接口调用、服务器端的Java处理类、以及可能的数据库查询语句。 总的来说,"dwr实现的四级...

    dwr基础学习书籍新手必备

    #### 四、DWR中的JavaScript应用 **简单的回调函数**:展示了如何使用DWR实现JavaScript对服务器端Java方法的调用,并获取结果。 **调用元数据对象**:介绍了如何利用DWR的元数据功能,动态获取服务器端对象的信息...

    DWR与界面开发 资料大全

    1. **JavaScript API**:学习DWR提供的JavaScript库,如`dwr.engine`、`dwr.util`等,了解如何调用服务器端方法。 2. **异步调用**:理解DWR的异步调用机制,如回调函数和错误处理。 3. **批量调用**:DWR支持批量...

    dwr框架入门学习文档

    DWR 框架入门学习文档 DWR(Direct Web Remoting)是一个开放源码的使用 Apache 许可协议的解决方案,它包含服务器端 Java 库、一个 DWR Servlet 以及 JavaScript 库。DWR 框架是最成熟的 Ajax-RPC 工具包之一,...

    dwr和ajax使用demo

    通过这个示例,你可以学习到如何将DWR集成到你的项目中,以及如何利用DWR与Ajax技术实现动态交互的Web应用。理解并掌握DWR和Ajax的结合使用,能够极大地提升你的Web开发能力,让你能构建出更加高效、用户体验优良的...

    DWR中文文档、学习文档

    四、DWR的使用 1. 配置:在dwr.xml文件中,定义允许的Java类和方法,设置安全策略等。 2. 编写Java类:定义服务器端需要暴露给客户端的方法。 3. 创建JavaScript接口:DWR自动生成与Java类对应的JavaScript接口,...

    DWR 学习笔记

    **四、DWR 示例应用** 在 `dwr-dome` 压缩包中,通常会包含一个简单的 DWR 示例项目,可能包括以下部分: 1. `dwr.xml`: DWR 配置文件,定义允许的服务器方法。 2. `Java` 类: 包含被客户端调用的服务器方法。 3. `...

Global site tag (gtag.js) - Google Analytics