`
kidiaoer
  • 浏览: 822468 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

dwr相关知识点

    博客分类:
  • dwr
阅读更多
  GBP是我们的框架名称,它基于SSH,提供代码生成、基础组件调用等平台功能。在我们框架中引入DWR后,DWR代替struts充当控制层,用于接收用户请求,调用后台逻辑进行处理,最后将处理数据返回客户端。DWR全程处理从客户端到服务器端的所有传输细节。

1  DWR 是什么

     DWR 是一个可以允许你去创建 AJAX WEB 站点的 JAVA 开源库,它可以通过浏览器端的 Javascript 代码去调用服务器端的 Java 代码,看起来就像是 Java 代码运行在浏览器上一样。 DWR 是一个完整的异步 AJAX 框架,它隐藏了 XMLHttpRequest 对象,程序员在开发过程中不需要接触 XMLHttpRequest 对象就可以向服务器发送异步请求并通过回调方式处理服务器的返回值。

    DWR 包含两个主要部分:

    *   运行在服务器端的 servlet 控制器 (DwrServlet) ,它负责接收请求,调用相应业务逻辑进行处理,向客户端返回响应。



    *   运行在浏览器端的 Javascript ,它负责向服务器端发送请求,接收响应,动态更新页面。



    DWR 工作原理是通过动态把 Java 类生成为 Javascript 。它的代码就像 Ajax 魔法一样,你感觉调用就像发生在浏览器端,但是实际上代码调用发生在服务器端, DWR 负责数据的传递和转换。这种从 JavaScript 到 Java 的远程调用功能的方式使 DWR 用起来有种非常像 RMI 或者 SOAP 的常规 RPC 机制,而且 DWR 的优点在于不需要任何的网页浏览器插件就能运行在网页上。

    Java 从根本上讲是同步机制,然而 Ajax 却是异步的。所以你调用远程方法时,当数据已从网络上返回的时候,你要提供有回调 (callback) 来接收数据。

DWR 动态在浏览器端生成一个 AjaxService 的 JavaScript 类,以匹配服务器端 AjaxService 的 Java 类。由 eventHandler 去调用它,然后 DWR 处理所有的远程细节,包括转换所有的参数以及将返回的 Java 对象映射成 Javascript 对象。在示例中,先在 eventHandler 方法里调用 AjaxService 的 getOptions() 方法,然后通过回调 (callback) 方法 populateList(data) 得到返回的数据,其中 data 就是 String[]{"1", "2", "3"} ,最后再使用 DWR utility 把 data 加入到下拉列表。

2  为什么使用 DWR

    GBP 是建立在 Struts+Spring+Hibernate 之上的 MVC 框架,它的控制层是由 Struts 负责的,而视图层则是通过 JSP 页面呈现。

当前台页面向服务器发送一个请求时, struts 调用业务逻辑处理该请求获得处理数据,然后导航到配置的页面上显示结果数据。由此可见, struts 处理请求后一般是跳转到新的页面,浏览器需要进行页面刷新。这与目前流行的通过异步 AJAX 局部刷新页面的方式相比,界面的用户体验显然要差很多。当然 struts 也能实现 AJAX 异步调用,但目前 GBP 系统中对 AJAX 的使用方式比较原始零碎,没有一套完整成熟的规范来约束。而在 GBP 中引入 DWR 的直接目的正是为了正确使用 AJAX ,为 AJAX 异步调用建立一套规范。

    在 GBP 架构中可以用 DWR 来代替 Struts 做为控制器,用户请求通过 DWR 进行处理并发送响应。

    异步调用过程中, DWR 通过 JSP 页面上的 JS 代码可以直接调用业务处理逻辑的 Java 代码,使用 DWR 时通过在浏览器端调用 JS 对象的方法就可以触发服务器 JAVA 对象的相应方法,并且自动完成 JS 对象与 JAVA 对象之间的数据类型转换,看起来就像是 Java 代码直接在浏览器上执行一样。其实在 JS 对象并不是直接操作 JAVA 对象的,这之间有一个控制器层, JS 方法调用时将请求发送到 DWR 控制器 DwrServlet ,然后通过 DwrServlet 调用相应的 JAVA 对象。

  与 Struts 相比, DwrServlet 接收到模型返回的处理数据后并不是导航到一个新的页面,而是将这些 JAVA 对象数据转化为 JS 对象数据然后发送到调用页面上,在页面上可以通过 JS 操纵 CSS 、 DOM 等方式来局部更新页面。由此可见, DWR 通过异步 AJAX 方式的实现了页面的局部刷新效果,可以取得非常友好的界面体验。                    

       DWR 提供了一种使用 AJAX 的正确规范的方式。 DWR 将 XMLHttpRequest 对象进行封装和隐藏,程序员在开发过程中只需要调用普通的 JS 方法就可以实现 AJAX 的异步调用功能,并且能够方便地处理返回值。因此在 GBP 框架中引入 DWR 可以有效解决滥用 AJAX 的问题,并且可以提高页面响应速度。另外,实践说明,使用 DWR 比使用 Struts 的开发效率更高。

3  如何使用 DWR

    在 GBP 框架中引入 DWR , DWR 可以作为接收并处理用户请求的控件器存在,与目前系统中的 struts 处于同一层次。如此一来,程序员使用 DWR 的方式几乎与目前的 Struts 一致,学习成本较低,易于快速上手。下面以系统监控为例详细说明如何在 GBP 中使用 DWR 。
3.1    编写服务器端的 JAVA 类

    在 GBP 框架中, DWR 应该与 Struts 处于同一层次,它不是直接调用业务逻辑 BO ,而是根据统一编号调用相应 service ,再由 service 调用业务处理逻辑。类似 Struts 层的业务 Action , DWR 也存在一个“业务 Action ”,系统监控对应的 DWR 业务 Action 是 com.jiuqi.GBP.action.sysapp.msc.MscControl 类。

类似于 Struts 中一个 Action 对应一个 ActionForm ,一般地,在 DWR 中,一个业务 form (相当于 Struts 的 ActionForm )需要对应一个 DWR 的业务 Action 。系统监控模块通过 QueryConditionExtForm 封装所有的查询指标,因此只需一个 DWR 的业务 Action 即可处理所有请求。 MscControl 类通过 doService 方法可以实现一般情况下对 service 的调用,而 doQuery 方法则专用于分页查询。不同于 Struts 的业务 Action 一个请求必须对应一个方法并且需要在配置文件中提供导航配置的情况,使用 DWR 时上述两个方法可以处理系统监控模块的所有请求而且无需导航配置,代码数量大大减少。当然,实际项目开发过程中, DWR 的 Action 可能需要对前台提交的参数做一些特殊处理,此时只需在 Action 中新起一个专门方法即可。

3.3   配置文件

    DWR 的运行需要配置文件的支持。在 GBP 中引入 DWR ,首先需要修改 web.xml 文件并引入 DWR 本身的配置文件 dwr-GBP.xml ,还需要在 Spring 的配置文件中声明服务器端对象的 bean 。

    1 、在 web.xml 中 DWR 作为一个 servlet 进行配置:
配置其 URL 映射方式:

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



2 、在 DWR 配置文件 dwr-gbp.xml 中描述浏览器端与服务器端对象的转换关系:

<dwr>
<allow>
<convert converter="bean" match="com.xxx.gbp.formbean.form.*" />
<create creator="spring" javascript="mscCtrl">
<param name="beanName" value="mscControl" />
<include method="doService"/>
<include method="doQuery"/>
</create>
</allow>
</dwr>

上述配置表明,浏览器端对象为 mscCtrl ,服务器端对象是一个 Spring 的 bean ,名为 mscControl ,故需要在 Spring 配置文件中声明。

4  结论: DWR 是否适合 GBP ?

    使用 DWR 的优点:

²  规范化应用 AJAX ,紧跟业界技术潮流;

²  提高界面响应速度,增强用户体验;

²  简化前台开发流程,减少代码量,提高开发效率;

²  与 GBP 的集成比较容易;



    DWR 是一个异步 AJAX 框架,非常适合处理异步类请求。但它并不是万能的,在有些方面使用 DWR 并不合适:



Ø  确实需要通过 Form 方式提交请求,如保存照片信息时;

Ø  处理文件上传下载请求;

Ø  处理导入导出请求;

Ø  构造树结构时,目前也无法用 DWR 改造;



    DWR 的优点十分明显,但在处理与 Servlet 耦合度比较高的请求时存在困难。

    另外, DWR 在高并发及大数据量情况下的表现尚未经过测试,我对此并不是很放心。

    综合 DWR 的优点与缺点,考虑到 GBP 的现有架构,推荐在 GBP 中引入 DWR 框架,做为控制层与 Struts 并存,开发过程中以 DWR 为主,以 Struts 为辅,充分发挥 DWR 的优势,在 DWR 不擅长的地方用 Struts 处理。

分享到:
评论

相关推荐

    dwr开发相关资料文档

    以下是对DWR相关知识点的详细解释: 1. **DWR的基本概念**: DWR允许在客户端JavaScript和服务器端Java之间进行直接的远程方法调用(Remote Method Invocation, RMI),这就好比在本地Java应用中调用对象的方法...

    dwr结合ssh使用

    在实际的SSH与DWR集成项目中,你需要配置DWR的Servlet在Web应用的web.xml中,定义DWR的配置文件dwr.xml,并且在Spring配置文件中配置DWR相关的bean。同时,你需要在Hibernate和Spring配置中正确配置数据库连接、事务...

    dwr Ajax 技术点

    DWR (Direct Web Remoting) 是一种开源...通过以上知识点,我们可以看到DWR如何在项目中实现Ajax通信,提高Web应用的用户体验。在实际开发中,理解并熟练掌握这些技术点,对于构建响应式和交互性强的Web应用至关重要。

    DWR中文教程(外带DWR包)

    在提供的“dwr教程.pdf”中,你可能会学习到以下关键知识点: 1. **DWR安装与配置**:包括如何将DWR库添加到项目中,配置DWR引擎,以及设置Web.xml文件,使DWR服务生效。 2. **DWR API理解**:DWR提供了一系列API...

    DWR中文文档 (DWR 2.0)

    ### DWR中文文档知识点概述 #### 一、DWR简介 **DWR(Direct Web Remoting)** 是一个开源的类库,旨在帮助开发者轻松构建包含AJAX技术的网站。其核心价值在于允许浏览器中的JavaScript代码能够直接调用运行在Web...

    DWR2.jar + DWR.xml + DWR2.0.dtd + Web.xml

    Direct Web Remoting (DWR) 是一个开源Java库,它允许Web应用程序在浏览器和服务器之间进行实时、双向通信,使得JavaScript可以直接...通过熟练掌握这些知识点,开发者可以有效地利用DWR构建动态、交互性强的Web应用。

    dwr3api+DWR文档.pdf

    这份文档可能涵盖了以下关键知识点: 1. **安装与配置**:如何在你的Java应用服务器上集成DWR,配置DWR的XML配置文件(dwr.xml),以及如何在web.xml中设置过滤器和servlet。 2. **基本概念**:解释了Reverse Ajax...

    葵花宝典之js、ajax、dwr.pdf

    JavaScript、Ajax、DWR相关知识点总结 一、JavaScript与Java的区别 1. 编程语言类型:JavaScript是一种基于对象的脚本语言,而Java是一种面向对象的编程语言。 2. 执行方式:JavaScript是通过浏览器解释执行的,而...

    java dwr 框架源码

    在“java dwr 框架源码”这个主题中,我们可以深入探讨以下几个关键知识点: 1. **DWR的核心概念**:DWR的核心组件包括`Engine`、`Configurator`和`Caucho Hessian`。`Engine`是DWR的核心,负责处理所有请求和响应...

    DWR2.0中文文档

    **DWR 2.0 知识点详解** DWR(Direct Web Remoting)是一种开源JavaScript库,它允许Web应用程序与服务器端Java代码进行实时交互,实现类似桌面应用的用户体验。DWR 2.0是该框架的一个重要版本,提供了许多增强的...

    dwr实现的无刷新技术 dwr+jsp

    通过理解以上知识点,并结合"DWR实现无刷新联动.doc"文档中的详细步骤和示例,开发者可以有效地运用DWR和JSP构建高效、动态的Web应用,提供流畅的用户体验。同时,文档可能涵盖了具体实现过程,包括DWR的配置、Java...

    DWR 视频教程 使用DWR开发AJAX For JavaEE

    在**“DWR 视频教程 使用DWR开发AJAX For JavaEE”**中,我们主要会学习以下几个关键知识点: 1. **DWR的基本概念**:理解DWR的核心功能,包括自动暴露Java对象到JavaScript,提供安全的跨域调用,以及对HTTP请求的...

    dwr服务器推技术

    4. **整合DWR与Struts2**: 需要在Struts2的配置文件中添加DWR的相关配置,让两者能协同工作。同时,需要在DWR的配置文件中定义可被JavaScript调用的Java方法。 5. **多人聊天实现**: 聊天功能的核心是消息的发布和...

    java+dwr框架实现聊天室

    下面将详细介绍该技术的实现过程和相关知识点。 一、dwr 框架简介 dwr(Direct Web Remoting)是一种基于Ajax技术的远程调用框架,提供了一个简单的方式来访问Java对象,实现了服务器推技术。dwr框架的主要特点是...

    ssh+dwr整合

    ### SSH+DWR整合知识点详解 #### 一、SSH框架简介 SSH,即Spring、Struts和Hibernate三个开源框架的组合,是Java Web开发中的一种流行架构。Spring负责业务逻辑层,提供依赖注入和面向切面编程;Struts作为MVC框架...

    dwr.jar dwrUtil常见方法 dwr详细资料

    **标题解析:** 标题“dwr.jar dwrUtil常见方法 dwr详细资料”指出,我们关注...以上就是关于DWRUtil常见方法及DWR框架的详细知识点,它们在Ajax驱动的Web开发中发挥着重要作用,提供了高效的客户端-服务器交互手段。

    dwr和ajax技术

    - **standard.jar**:可能包含标准JSP和Servlet相关的类,可能与DWR的运行环境有关。 - **commons-logging-1.1.1.jar**:Apache Commons Logging库,用于日志记录,DWR可能使用它来记录运行时信息。 - **jstl.jar**...

    DWR小代码小例子

    在DWR的实例中,主要涉及以下几个关键知识点: 1. **DWR的配置**:首先,你需要在Web应用的`web.xml`文件中配置DWR的Servlet,如`DWRServlet`,这使得DWR能够处理来自客户端的请求。此外,还需要创建一个或多个`dwr...

Global site tag (gtag.js) - Google Analytics