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

DWR使用要点

阅读更多
DWR使用要点
关键字: dwr 异步 同步 request
想在JAVA WEB项目中应用AJAX?当然有不少解决方案,其中应用DWR是个不错的选择,使用起来省时又省力。



DWR(Direct Web Remoting)是一个开源的类库,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样.



DWR不认为浏览器/WEB服务器协议是重要的,而更乐于保证编程界面的简单自然.对此最大的挑战就是把AJAX的异步特性和正常JAVA方法调用的同步特性相结合.在异步模式下,结果数据在开始调用之后的一段时间之后才可以被异步访问获取到.也就是说浏览者可以在页面上远程调用服务器端的方法而不用担心提交请求的过程会阻塞浏览的进程,他们完全可以在等待响应的同时在页面上做其他的操作。从浏览者的角度看,在操作的过程中基本上感觉不到响应时间,这对提升浏览者的浏览体验非常有好处。



DWR允许WEB开发人员传递一个回调函数,来异步处理 Java函数调用过程.

类似如下定义:

在服务端的java方法定义:  DemoService.doSomething(String name,String addr){return name+addr;}

在浏览器Javascript中的调用:  DemoService.doSomething(name,addr,callback)



callback就是回调函数,开发人员可以用这个回调函数在取得doSomething方法的返回值时做一些处理,在Javascript里可以这样定义:

var callback=function(data){};参数data即调用DemoService类doSomething方法的返回值,当DWR接收到这个返回值时,便会调用这个回调函数,并把doSomething方法返回值作为参数传给回调函数,后台没有返回之前是不会调用的。



Js代码
var resultValue="firstValue";  
 
var callback=function(data){  
resultValue=data;  
}  
 
function doRemoteService(name,addr){  
DemoService.doSomething(name,addr,callback);  
alert(resultValue);  


var resultValue="firstValue";

var callback=function(data){
resultValue=data;
}

function doRemoteService(name,addr){
DemoService.doSomething(name,addr,callback);
alert(resultValue);
}

看上面一段js代码,很简单是吗,你觉得调用doRemoteService方法的时候会弹出什么值呢?由于DWR默认是异步调用远程函数的,调用callback的时机也许很快,但是也有可能需要过一段时间,在浏览器端调用js方法却是微秒级别的,所以,在回调函数被调用之前,alert已经被调用了。



很多人在使用DWR的时候会遇到这个问题,如果想要拿到期望的值,必须关闭DWR的异步特性。可以如下修改:



Js代码
function doRemoteService(name,addr){  
DWREngine.setAsync(false);  
DemoService.doSomething(name,addr,callback);  
DWREngine.setAsync(true);  
alert(resultValue);  


function doRemoteService(name,addr){
DWREngine.setAsync(false);
DemoService.doSomething(name,addr,callback);
DWREngine.setAsync(true);
alert(resultValue);
}

DWREngine.setAsync()可以设定DWR调用方式为异步还是同步。在一些不希望异步特性的场合会用到。



在WEB应用中会不可避免的用到request,session,context等的Http对象,在DWR应用中要如何调用呢,

可以在服务端的java方法定义: 

DemoService.doSomething(String name,String addr,HttpServletRequest request){return name+addr;}

在浏览器Javascript中的调用方式不用改变,DWR会自动传入HttpServletRequest 参数:

DemoService.doSomething(name,addr,callback)

这样我们就可以直接在Java方法里调用从DWR传过来的request对象,HttpServletRequest,HttpServletResponse,HttpSession,ServletContext等对象使用方式类似。



当然还可以直接在java方法里调用DWR的API:



Java代码
WebContext ctx = WebContextFactory.get();  
ctx.getSession();  
ctx.getHttpServletRequest(); 

WebContext ctx = WebContextFactory.get();
ctx.getSession();
ctx.getHttpServletRequest();

注1:以上所有代码在JDK1.4.2 ,DWR1.1.1,webspere6.0环境下测试通过。



注2:webspere6.0 不支持JDK5.0以后的版本,DWR 2.x 包含了 Java5 支持的内容。在应用时可能出现不能正常运行的情况,现在在webspere6.0上还是使用dwr1.X版本。



注3:DWR现在最新版本是2.0.3, 3.0版本正在开发中。



参考资料:官方网站http://getahead.org/dwr

分享到:
评论

相关推荐

    dwr中文文档dwr中文文档dwr中文文档

    ### DWR中文文档知识点概述 #### 一、DWR简介 **DWR**(Direct Web Remoting)是一种简化Ajax编程的...以上内容基于给定的文件信息进行了详细的知识点整理和解释,希望能帮助读者更好地理解和掌握DWR的相关技术要点。

    DWR中文文档(pdf)

    - 在`dwr.xml`中使用`<creators>`元素引用Spring的bean。 ##### 4.3 DWR与JSF整合 - **整合要点**: - 使用`JSFCreator`来创建JSF托管bean。 - 配置`dwr.xml`以支持JSF的生命周期。 ##### 4.4 DWR与Struts整合 ...

    DWR 实现QQ消息提示

    综上所述,"DWR实现QQ消息提示"涉及到的技术要点包括DWR的反向推送机制、服务器端与客户端的交互、JavaScript UI设计、以及性能优化和安全防范。通过这些技术手段,我们可以构建出一个高效、实时的在线消息通知系统...

    dwr实现的网页即时聊天

    DWR(Direct Web Remoting)是一...通过以上内容,我们可以了解到使用DWR构建网页即时聊天系统的核心技术和实践要点。在实际应用中,开发者还需要结合具体的业务需求,不断调整和优化系统设计,以提供更好的用户体验。

    dwr调用带集合返回值的方法

    Direct Web Remoting (DWR) 是一种在Web应用程序中实现AJAX...以上就是关于"DWR调用带集合返回值的方法"的主要内容,理解并掌握这些要点,可以帮助你更有效地利用DWR进行前后端交互,提高Web应用的用户体验。

    SSH与DWR框架整合

    SSH与DWR框架整合是指将Struts、Spring、Hibernate(通常简称为SSH)这三种框架与DWR框架进行结合使用的过程。这种整合使得Web应用程序能够更好地支持AJAX技术,提高用户体验,并通过Spring管理整个项目的依赖关系,...

    dwr实例代码

    ### DWR实例代码知识点解析 #### 一、简介 ...通过以上分析可以看出,本示例代码覆盖了DWR的基本用法,包括数据传输、业务逻辑处理等方面,有助于初学者快速理解和掌握DWR的核心概念和技术要点。

    DWR与界面开发教程

    - **总结**:回顾DWR的学习过程,总结学到的关键知识点和技术要点。 - **展望**:展望未来DWR的发展趋势,讨论可能的新特性和技术革新,以及DWR在现代Web开发中的地位和作用。 通过以上详细的知识点介绍,希望能够...

    DWR实现Google自动提示功能

    总结,通过DWR实现Google自动提示功能,不仅涉及到了DWR框架的使用,还涵盖了AJAX通信、JavaScript与Java的交互、前端事件监听和数据处理等多个知识点。理解和实践这一实例,有助于提升你在Web开发中的综合技能。

    practical dwr project

    ### 实践DWR项目知识点详解 #### 一、DWR技术简介 ...通过阅读本书,读者不仅可以掌握DWR的核心概念和技术要点,还能够学会如何将这些知识应用于实际项目的开发中,从而构建出高效、稳定、易维护的Web 2.0应用。

    struts+hibernate+dwr的项目

    5. **开发流程**:在开发过程中,首先需要设计数据库模型并使用Hibernate进行映射,然后创建Struts Action和对应的业务逻辑,最后利用DWR在前端实现动态交互。测试和调试是整个流程的关键环节,确保各组件协同工作,...

    DWR+spring+struts+hibernat整合登陆

    "项目说明.doc"文档则可能详细解释了项目的构建步骤、技术要点以及使用方法,对初学者来说是非常宝贵的资源。 综上所述,这个项目为初学者提供了一个很好的学习平台,通过整合DWR、Spring、Struts和Hibernate,展示...

    struts+hibernate+spring+dwr集成开发文档pdf

    标题与描述中的关键词“struts+...整体而言,文档提供了从环境搭建到具体配置的详尽指南,有助于开发者快速掌握在MyEclipse下集成Struts+Hibernate+Spring+DWR的技术要点,对于企业级应用的开发具有较高的参考价值。

    自己做的知识总结

    接着,jQuery的学习要点包括选择器、DOM操作、事件处理、动画效果和Ajax请求。选择器是jQuery最强大的特性之一,它能高效地定位DOM元素。DOM操作如添加、删除和修改元素,让网页动态化变得简单。事件处理可以监听...

    Ajax框架的相关学习资料和json

    **JSON的学习要点:** 1. **基本语法**:学习JSON的基本数据类型(字符串、数字、布尔值、数组、对象)和语法规范。 2. **解析与生成**:了解如何在JavaScript中解析JSON字符串为对象,以及将JavaScript对象转换为...

    Heritrix 源码和Jar

    在实际应用中,合理配置Heritrix以避免对目标网站造成过大的压力,遵循爬虫伦理,设置合理的爬取速率和范围,都是重要的实践要点。 10. **问题排查**: 当遇到爬取失败、重复抓取、内存溢出等问题时,了解...

    优美迷人聊天程序

    2. **实时通信**:使用DWR实现的Web Socket或Ajax长轮询技术,确保信息的即时传输。这种方式能保证用户在聊天过程中不会错过任何一条消息,增强了用户体验。 3. **消息存储**:聊天记录通常需要存储在服务器上,...

    Java ee 企业应用开发:第8章 Ajax用户注册.ppt

    #### 一、章节概述 ...此外,还介绍了一些基本的概念和技术要点,如DWR的配置、DAO和服务层的设计、JSP页面的修改以及Ajax的基本原理。通过这些内容的学习,读者可以更好地理解和掌握Ajax技术在实际开发中的应用。

    java和JavaScript开发细节

    2. **跨域会话安全:** 在使用DWR(Direct Web Remoting)框架时,可以通过配置`web.xml`中的`crossDomainSessionSecurity`参数来增强安全性。将该值设置为`false`可以禁用跨域会话的安全检查,但这也可能引入安全...

    flex测试总结

    标题“flex测试总结”指的是对Adobe Flex应用的测试经验与技术要点的综合概述。Flex是一种用于构建富互联网应用程序(RIA)的开源框架,基于ActionScript编程语言和Flash Player或Adobe AIR运行时。这篇博文可能详细...

Global site tag (gtag.js) - Google Analytics