`
lifaming15
  • 浏览: 64799 次
  • 来自: ...
文章分类
社区版块
存档分类

DWR Reverse Ajax功能实践的要点

 
阅读更多

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


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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><beanid="notifyClient"class="com.hhh.nms.remote.NotifyClient">
</bean>

<beanid="nodeSvcImpl"class="com.hhh.nms.magic.NodeSvcImpl">
<propertyname="notifyClient"ref="notifyClient"/>
</bean>


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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><dwr>
<allow>
<createcreator="spring"javascript="NotifyClient">
<paramname="beanName"value="notifyClient"/>
<includemethod="updateService"/>
</create>
</allow>
</dwr>



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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->packagecom.hhh.nms.remote;

importorg.apache.log4j.Logger;

importjavax.servlet.ServletContext;
importorg.springframework.web.context.ServletContextAware;

importjava.util.Collection;

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


publicclassNotifyClientimplementsServletContextAware{
staticLoggerlogger=Logger.getLogger(NotifyClient.class.getName());

privateServletContextservletContext=null;
publicvoidsetServletContext(ServletContextservletContext)
{
this.servletContext=servletContext;
}

publicintserviceUpdate(Stringstr1,Stringstr2){
logger.info(
"entered");

logger.info(
"WebContext1"+servletContext);

ServerContextctx
=ServerContextFactory.get(servletContext);

//GenerateJavaScriptcodetocallclient-side

//WebContextctx=WebContextFactory.get();
logger.info("WebContext"+ctx);
if(ctx!=null){
//StringcurrentPage=ctx.getCurrentPage();
//logger.info("currentpage:"+currentPage);

ScriptBufferscript
=newScriptBuffer();
script.appendScript(
"updatePoint(")
.appendData(str1)
.appendScript(
",")
.appendData(str2)
.appendScript(
");");

//Pushscriptouttoclientsviewingthepage
Collection<ScriptSession>sessions=
ctx.getScriptSessionsByPage(
"/ebnms/index.eb?do=dwrtest");

logger.info(
"jspsessionsize:"+sessions.size());

//or

Collection
<ScriptSession>sessions2=
ctx.getAllScriptSessions();

logger.info(
"allsessionsize:"+sessions2.size());


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

return0;
}
}



另外,ScriptBuffer的appendScript方法是插入原始字串,appendData会根据参数类型做相应转换。

分享到:
评论

相关推荐

    即时通讯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