`
kidiaoer
  • 浏览: 807149 次
  • 性别: 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 知识点和实例代码的总结--DWR应当如何获得要进行远程的类的实例

    dwr结合ssh使用

    学习ajax很好的资料,希望对大家学习能有所帮助

    dwr中的配置

    dwr的配置和最基本的知识点讲解等等内容.

    个人信息管理系统Struts2 spring hibernate dwr

    每天面对大量的知识,时间一长,容易造成某些知识点的生疏或者遗忘,本系统方便对知识进行分类收录,并结合人类遗忘规律,及时对相应的知识点进行提示复习。 提示复习的时间分别是: 第一次:10 分钟, 第二次:30...

    客户端开发常用知识

    javascript jquery ajax json DWR sigma-grid HTML CSS FusionCharts在开发过程中最常用用的知识点

    java方向知识点总结和部分理论代码

    对Jsp/Servlet/JavaBean和SSH集成框架和ajax的知识点做了概括性的总结.其中包括理论知识和部分代码.

    自己做的知识总结

    dwr框架的小应用,jquery的小知识点,webServices的发布

    个人知识管理系统 Struts2.0 + Spring + Hibernate

    每天面对大量的知识,时间一长,容易造成某些知识点的生疏或者遗忘,本系统方便对知识进行分类收录,并结合人类遗忘规律,及时对相应的知识点进行提示复习。 提示复习的时间分别是: 第一次:10 分钟, 第二次:30...

    个人知识管理系统 Struts2 + Spring + Hibernate

    每天面对大量的知识,时间一长,容易造成某些知识点的生疏或者遗忘,本系统方便对知识进行分类收录,并结合人类遗忘规律,及时对相应的知识点进行提示复习。 提示复习的时间分别是: 第一次:10 分钟, 第二次:30...

    EXTJS+SSH房屋出租系统

    涉及技术知识点繁多,EXTJS,DWR,SSH,验证码,换皮肤,标签,上传下载,导入导出,报表制作,数据打印等,是许老师博客http://blog.csdn.net/lenotang/archive/2008/10/12/3063050.aspx上的配套资源,大家有什么不明白...

    WEB开发框架选取 经验之谈

    探讨出开发框架STURTS+SPRING+[HIBERNET|JPA]+DWR+EXTJS的组合,并给出这一框架选取中实验的开发例子,其中包括dwr的ajax及reverseajax、extjs的EditGrid与DB交互及分组编辑和json-lib的应用等知识点... 加上点分值...

    微信公众平台java开发代码

    区别于“第一 季”重点讲授知识点的授课方法,在“第二季”将重点讲授“应用级别”的微信程序。 “微信公众平台深度开发JAVA版(第二季)”将包含的知识点主要有:HTML5、css3、AJAX等前端知识;java文件读写、java...

    EasyJWeb服务调度和自定义邮件引擎技术的CRM系统实战开发

    第三个知识点是自定义邮件引擎,针对于CRM系统来说,大批量的持续发送邮件是一个很重要的功能,但是普通的邮件群发是无法完成的,邮件服务器会对邮件进行过滤和处理,为了能够尽可能的提高邮件发送的准确性,在本...

    Java顺发物流管理系统源码(源码+数据库+开发文档+部署手册+用户分析需求手册).rar

    我们在学习了Java各种基础知识之后,最需要做的就是学会应用,开发一些项目把所学的知识应用起来,下面的这个《顺发物流管理系统源码》实战项目就是比较好的练手教程。 业务描述:本系统是基于JavaWeb开发的《顺发...

    (3.0版本)自己写的struts2+hibernate+spring实例

    我会陆续在博客中更新相关针对与当前项目模块的关于struts2的一些知识点.当作大家一起进步了... 也希望各位高人多多指点啊... 这个版本起名为Struts2Test3.0.以后的日志相关内容就为关于Struts2Test3.0例子...

    北风客户关系管理源码 CRM

    这个项目所涉及的知识点包括SSH三大框架,同时也介绍了其他常用的框架,如Jquery、Jfreechart等,在介绍了新技术点的同时重点让大家了解了CRM的业务知识,TBC(技术+业务+沟通)是优秀程序员必不可少三要素。...

    适合Python新手的爬虫练习:网易LOFTER图片爬虫

    目录前言1. 网页分析1.1 HTML分析1.2 DWR分析1.3 数据整合2....但我对爬虫充满了好奇,想要快速掌握点知识,我就尝试着一点点百度一点点摸索。今天为大家分享一下,我这个爬虫渣渣师是如何写爬虫项目的。 注:

Global site tag (gtag.js) - Google Analytics