`
rickycm
  • 浏览: 69949 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DWR Reverse Ajax功能实践的要点

    博客分类:
  • Ajax
阅读更多
Reverse Ajax主要是在BS架构中,从服务器端向多个浏览器主动推数据的一种技术。它的一种实现就是客户端向服务器请求后,服务器不立即回应,从而导致一个http长连接,等到有更新数据的时候,再利用这个连接“主动”向客户端回送。
如果是初次接触,那一定要看下这篇文章
其中,详述了这种技术和JETTY服务器Continuations功能结合时的强大性能:运行在非阻塞方式下,当多个客户端请求时不会占用过多线程。
最后,此文申明DWR的实现已经天然使用了JETTY这一功能。所以使用DWR还是非常有好处的。如何使用及示例上面这篇文章已经有说明,下面就以我实际使用中碰到的问题和要点做个说明。


首先,说一下代码的组织和声明。
将使用到Reverse Ajax的代码归入一个类,比如是NotifyClient,并用spring的bean来声明。在将要用到这个类的地方(NodeSvcImpl类),也通过成员变量引入:

    <bean id="notifyClient" class="com.hhh.nms.remote.NotifyClient">
    bean>
       
       <bean id="nodeSvcImpl" class="com.hhh.nms.magic.NodeSvcImpl">
        <property name="notifyClient" ref="notifyClient"/>
       bean>


然后在dwr.xml里这样声明:

<dwr>
    <allow>
        <create creator="spring" javascript="NotifyClient">
            <param name="beanName" value="notifyClient"/>
            <include method="updateService" />
    create>        
    allow>
dwr>



其次一个要点是,如果你不是在DWR所开的线程中使用Reverse Ajax,那WebContextFactory.get()会返回空,这是因为只有DWR自己的线程才会初始化它。那如果你是在DWR之外使用,比如说收到JMS消息,或者UDP消息后,想通知所有客户端,你就要用到ServerContext。
要得到ServerContext,就需要用到spring的ServletContextAware接口,下面是完整代码:
package com.hhh.nms.remote;

import org.apache.log4j.Logger;

import javax.servlet.ServletContext;
import org.springframework.web.context.ServletContextAware;

import java.util.Collection;

import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.ServerContext;
import org.directwebremoting.ServerContextFactory;
import org.directwebremoting.proxy.dwr.Util;


public class NotifyClient implements ServletContextAware {
static Logger logger = Logger.getLogger (NotifyClient.class.getName());

private ServletContext servletContext = null;
public void setServletContext( ServletContext servletContext )
{
this.servletContext = servletContext;
}

public int serviceUpdate (String str1, String str2) {
logger.info ("entered");

logger.info ("WebContext1"+servletContext);

ServerContext ctx = ServerContextFactory.get(servletContext );

// Generate JavaScript code to call client-side

// WebContext ctx = WebContextFactory.get();
logger.info ("WebContext"+ctx);
if (ctx != null) {
//String currentPage = ctx.getCurrentPage();
//logger.info ("current page:" + currentPage);

ScriptBuffer script = new ScriptBuffer();
script.appendScript("updatePoint(")
.appendData(str1)
.appendScript(",")
.appendData (str2)
.appendScript(");");

// Push script out to clients viewing the page
Collection sessions =
ctx.getScriptSessionsByPage("/ebnms/index.eb?do=dwrtest");

logger.info ("jsp session size:" + sessions.size ());

// or

Collection sessions2 =
ctx.getAllScriptSessions ();

logger.info ("all session size:" + sessions2.size ());


for (ScriptSession session : sessions2) {
session.addScript(script);
}
}

return 0;
}
}



另外,ScriptBuffer的appendScript方法是插入原始字串,appendData会根据参数类型做相应转换。
分享到:
评论
2 楼 rickycm 2009-07-28  
这个是我转的,不过我自己也做过类似的,我用的是:
WebContext ctx = WebContextFactory.get(); 
1 楼 lujiawu12 2009-07-17  
兄弟你实践过吗?
见鬼了 , 为什么我的
ServerContext ctx = ServerContextFactory.get(servletContext );   

返回的一直都是NULL ...

相关推荐

    即时通讯DWR Reverse Ajax

    DWR(Direct Web Remoting)是实现这种功能的一种技术,尤其以其独特的Reverse Ajax特性在服务器推送(Server-Sent Events, SSE,也常被称为Comet技术)领域中备受关注。下面我们将深入探讨DWR Reverse Ajax的工作...

    dwr reverseajax clockms

    dwr reverseajax clockms

    dwr reverseajax ClockLogging

    dwr reverseajax ClockLogging

    dwr3ReverseAjax示例

    通过学习和实践这个“dwr3ReverseAjax示例”,开发者可以掌握DWR的基本用法,以及如何利用Ajax和反向Ajax构建实时Web应用。这不仅对理解DWR的工作原理有所帮助,也能提升在实际项目中运用这些技术的能力。

    dwr实现ajax功能ajax+dwr

    **DWR(Direct Web ...通过学习和实践这些资源,开发者可以深入理解DWR如何与Ajax结合,实现高效的Web应用交互。同时,掌握DWR可以帮助开发者避免编写复杂的JavaScript网络请求代码,提高开发效率并提升应用性能。

    DWR REVERSEAJAX DEMO

    Server Side Reverse Ajax Clock

    dwr和ajax技术

    JavaScript作为Web开发中的基础语言,是实现DWR和Ajax功能的关键。 **压缩包文件解析** - **dwr.jar**:这是DWR的核心库文件,包含了所有必要的类和资源,用于在浏览器和服务器之间建立通信。 - **standard.jar**...

    dwr 2.0(reverse ajax)实现推的web IM例子

    DWR (Direct Web Remoting) 是一个开源的Java库,它允许JavaScript在浏览器端与服务器端的Java对象进行交互,从而实现类似Ajax的功能,但比传统的Ajax更为强大。在DWR 2.0版本中,引入了Reverse Ajax的概念,这是一...

    Dwr 官方Reverse Ajax Demo

    DWR是基于AJAX技术的,但其提供了更高级的功能,如Reverse Ajax和自动类型转换,使得开发者可以更专注于业务逻辑,而无需过多关注底层通信细节。AJAX主要负责局部页面更新,而DWR则扩展了这一概念,使得服务器可以...

    dwr反转AJAX聊天源码

    标题中的“dwr反转AJAX聊天源码”是指使用DWR库构建的一个聊天应用程序,其核心功能是实现实时的消息传递。这个源码示例可能包括了服务器端的Java代码,用于处理聊天消息的接收和发送,以及客户端的HTML、JavaScript...

    DWR让Ajax如此简单

    - **Reverse Ajax(反向Ajax)**: DWR实现了反向Ajax,即服务器可以主动推送数据到客户端,而不仅仅是响应客户端的请求。 - **Caching(缓存)**: DWR支持缓存服务器端的响应,提高性能,减少网络流量。 ### 2. ...

    dwr和ajax使用demo

    【DWR(Direct Web Remoting)与Ajax技术详解】 DWR(Direct Web Remoting)是一种在Web应用程序中实现异步JavaScript和XML(Ajax)的方法,它简化了客户端和服务器之间的通信,使得动态更新网页变得更加简单。DWR...

    DWR实现AJAX验证实例

    在本实例中,我们将使用DWR来实现一个数据库字段存在的验证功能。用户输入数据后,后台会立即查询数据库,如果该字段存在,前端将会收到反馈信息,提示用户该字段已被占用。 **实现步骤:** 1. **配置DWR**:首先...

    dwr的例子 反向AJAX 实现时时提醒

    DWR使得JavaScript能够调用服务器端的Java方法,就像它们是本地函数一样,这样就可以在不刷新整个页面的情况下更新部分网页内容,从而实现即时提醒功能。 反向AJAX是相对于传统AJAX(用户发起请求,服务器响应)的...

    dwr反向Ajax的三种情况

    DWR(Direct Web Remoting)是一种Java库,它允许Web应用程序实现实时的双向通信,即反向Ajax。反向Ajax是指服务器能够主动地向客户端浏览器推送数据,而不仅仅是响应客户端的请求。DWR提供了三种反向Ajax技术,分别...

    DWRtree DWR实现AJAX的一个树形

    **DWR (Direct Web Remoting) 是一个开源的Java库,它允许JavaScript在客户端与服务器端之间进行直接的异步通信,从而实现AJAX(Asynchronous JavaScript and XML)应用程序的功能。DWR使得开发者无需手动编写复杂的...

    dwr、ajax 无刷新技术

    描述中提到,DWR是基于AJAX的框架,这意味着它利用AJAX的优势,如后台数据传输和局部页面更新,简化了开发者实现无刷新功能的难度。这种技术适用于构建动态的、交互性强的门户网站,对于追求高效、流畅用户体验的...

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

    **DWR(Direct Web Remoting)**是一种Java库,它允许在浏览器和服务器之间进行实时、双向通信,从而实现AJAX(Asynchronous JavaScript and XML)应用程序。DWR简化了JavaScript与Java后端交互的过程,无需手动编写...

    DWR 实现ajax上传的小实例

    DWR (Direct Web Remoting) 是一个开源Java库,它允许Web应用程序在客户端JavaScript和服务器端Java之间进行异步通信,实现了类似Ajax的功能。在这个小实例中,我们将探讨如何使用DWR来实现实时的文件上传功能,这...

    DWR AJAX框架(包含使用教程)

    - **Reverse Ajax**:DWR的特色功能,使得服务器可以直接调用客户端的JavaScript函数。 3. **DWR的使用步骤** - **配置DWR**:在web.xml中配置DWRServlet,以及在dwr.xml中定义允许的远程Java类和方法。 - **...

Global site tag (gtag.js) - Google Analytics