`
rq2_79
  • 浏览: 239070 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

请教关于DWR的推技术问题,

阅读更多
我大概看了一下DWR的推的机制,我的理解是:

服务器状态保存在ScriptSession中

客户端页面中的引擎定时发请求到WEB 服务器 ,察看ScriptSession ,如果发现不为空,则将
ScriptSession中保存的JS调用发送到客户端页面,否则 线程等待一定时间,但是ScriptSession 是通过DWR内部上下文对象得到的,也就是说在DWR框架以外无法改变ScriptSession

我的问题是,如果是DWR控制范围外的机制导致服务器数据变化,如:数据库被外部系统改变,

这种改变怎么推到客户端?
分享到:
评论
16 楼 rq2_79 2008-09-14  
czwlucky 写道
每一次调用DWR,都是通过DWRServlet(或者是SpringServlet等),在这里进行session会话的向后(你的业务层)传递.所以如果没有经过DWR的控制器,会话也就得不到保存,用WebContextFactory.get()当然拿到的也就是空的,如果像楼主说的用一个静态变量保存的话,就存在一个问题,会话的不确定性,A通过DWR控制器访问后session被保存起来,B通过DWR外访问该逻辑时,用的会话却不是自己的,这样似乎不妥.不知我说的对不对.请教楼主...



因为我的数据对于每个客户端都是一样的,所以不存在上面所说的问题。最近由于工作关系,没有继续好好研究dwr,个人感觉,数据的时时刷新不存在session的保存问题,应该对于同一个“页面”要显示的数据是一样的。如果不同session显示不同数据不应该用此技术。
15 楼 eeeeeeee 2008-09-05  
这个不叫推吧,应该叫ajax反转吧……
14 楼 czwlucky 2008-08-21  
每一次调用DWR,都是通过DWRServlet(或者是SpringServlet等),在这里进行session会话的向后(你的业务层)传递.所以如果没有经过DWR的控制器,会话也就得不到保存,用WebContextFactory.get()当然拿到的也就是空的,如果像楼主说的用一个静态变量保存的话,就存在一个问题,会话的不确定性,A通过DWR控制器访问后session被保存起来,B通过DWR外访问该逻辑时,用的会话却不是自己的,这样似乎不妥.不知我说的对不对.请教楼主...
13 楼 absolute007 2008-08-07  
楼主看下这个了,应该会对你有所帮助,这个也是我转载的了。
http://absolute007.iteye.com/admin/blogs/225398
12 楼 小天蝎 2008-03-02  
rq2_79 写道
谢谢Foxswily 的帮忙。我在没有该dwr类的情况下,
在调用代码中把webcontext设为静态的,以后调用这个静态的就可以了。谢谢Foxswily 的提醒。
private static WebContext wctx=null;


这个是怎么做的?能不能详细一些?
11 楼 hutboy 2007-10-24  
楼主怎么解决的,可否详细分享一下,谢谢
10 楼 rq2_79 2007-09-30  
谢谢Foxswily 的帮忙。我在没有该dwr类的情况下,
在调用代码中把webcontext设为静态的,以后调用这个静态的就可以了。谢谢Foxswily 的提醒。
private static WebContext wctx=null;
9 楼 Foxswily 2007-09-30  
有点蹩脚的解决方法:需要修改DwrServlet两个地方,公开Ioc Container
    public static Container getContainer()
    {
        return container;
    }
    private static DefaultContainer container;


然后在想要的地方,直接取ScriptSessionManager

        Container container = DwrServlet.getContainer();
        ScriptSessionManager ssm = (ScriptSessionManager) container.getBean(ScriptSessionManager.class.getName());
        Collection<ScriptSession> sessions = ssm.getAllScriptSessions();
        Util utilAll = new Util(sessions);
        ScriptBuffer s = new ScriptBuffer();
        s.appendScript("alert(");
        s.appendData("something funny here!");
        s.appendScript(");");
        utilAll.addScript(s);
        out.println("</body></html>");
8 楼 rq2_79 2007-09-30  
是的啊。我收到的数据是没有request、response的啊。所以没有办法,推给客户端啊。看看还有什么办法吗?
7 楼 Foxswily 2007-09-30  
DWRServet.doPost()
webContextBuilder.set(request, response, getServletConfig(), getServletContext(), container);
这里new了WebContext,WebContext与request、response关系很紧,正在考虑其他办法绕过去
6 楼 rq2_79 2007-09-29  
我通过页面访问,wctx不为null的,只要我后台发一个udp包给服务,在服务器端自己调用,wctx就是null,前面DWRServlet肯定调用过了。
5 楼 Foxswily 2007-09-29  
DWRServlet:
webContextBuilder = StartupUtil.initWebContext(servletConfig, servletContext, container);
应该是这里。
感觉要真正调用过一次DWRServlet之后才真正有效。

DWR本身就没有规定哪里是框架内,只要能WebContextFactory.get(); 对比公开给js的java类,完全没有限定吧,也就是说在任一个类里用WebContext都能正常完成功能才对。
4 楼 rq2_79 2007-09-29  
WebContext wctx = WebContextFactory.get();
我看了源码 
public static WebContext get()
    {
        if(builder == null)
            return null;
        else
            return builder.get();
    }
因为我的数据变化不是通过页面来的,我调用上面方法不知道里面builder 在什么时候注入啊,所以我得到的wctx是null。应该是有框架内外之分的。至少我通过udp得到的数据,不知道通过什么方式通知到每个web客户端。
3 楼 Foxswily 2007-09-29  
建议看看WebContext的取得方式,对于DWR来说基本上没有框架内外之分,拿到这个就剩下数据组织的问题了。需要注意的是,在Servlet初始化的某些阶段无法取得WebContext,怀疑是DWRServlet还没有完成初始化。
2 楼 rq2_79 2007-09-29  
楼上的你用过dwr吗?

如果数据来自页面增加没有问题,比如:我在一个list页面中增加一条数据,通过dwr调用保存新增的信息,调用相应的推的方法。其他页面也能实现推的效果。不过如果我的数据来自业务层而不是通过页面请求上来的,数据虽然变化了,手动调用推方法,页面还是不能实现数据的更新。
1 楼 aone 2007-09-28  
"定时发请求到WEB 服务器",你也这么说了.
这哪儿还叫推呀.

所以你的问题在这个"ScriptSession"上.它能不能及时的得到真实数据,就决定了被"推"来的数据是不是被外部系统改变后的数据.


相关推荐

    dwr推技术官方实例

    标题中的“dwr推技术官方实例”是指DWR提供的关于其推技术的实际操作示例,这些示例可能涵盖了DWR 2.0.4及以上版本的最新功能。由于高质量的实例资源在网络上可能不易找到,所以这份实例集合显得尤为宝贵。 描述中...

    dwr推技术实现服务器推送数据

    DWR的推技术则解决了这个问题,它允许服务器在数据更新时立即推送到客户端,从而实现更实时、更高效的用户体验。 DWR的工作原理是通过在服务器端创建一个Java对象,这个对象暴露了若干方法供客户端JavaScript调用。...

    DWR推送技术大全 dwr推送聊天实例

    DWR的主要功能之一是推送技术,这使得服务器可以主动向客户端发送数据,而不仅仅是响应客户端的请求。这种能力在创建实时更新的应用程序,如聊天应用,股票报价或者在线游戏时非常有用。 DWR推送技术的核心在于其...

    dwr 实现推技术 实例

    **DWR(Direct Web Remoting)技术详解及推技术实例** DWR,全称为Direct Web Remoting,是一种在Web应用程序中实现JavaScript与Java之间进行安全、高效通信的技术。它允许服务器端的Java代码直接调用客户端的...

    dwr推技术简单案例

    在这个“dwr推技术简单案例”中,我们将深入理解DWR的核心概念,学习如何设置和使用DWR来实现实时数据推送。 首先,我们需要了解DWR的基本工作原理。DWR通过在浏览器和服务器之间建立一个持久连接,使得服务器可以...

    DWR服务器推技术Demo

    DWR是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。

    dwr 推技术 demo

    本"dwrd 推技术 demo"显然是一个用于展示DWR实时推送功能的示例项目。 1. **DWR框架核心概念**: - **Reverse AJAX**:DWR的核心特性之一就是反向AJAX,即服务器可以主动向客户端发送数据,而不仅仅是响应客户端的...

    DWR服务器推送技术(实时)

    DWR的核心特性是它支持AJAX(Asynchronous JavaScript and XML)以及服务器推送技术,极大地提高了Web应用的用户体验。 **服务器推送技术**: 传统的HTTP协议是基于请求-响应模型的,即客户端发起请求,服务器响应...

    dwr推送技术

    在实际项目中,根据`dwrpush`这个文件名,我们可以推测这是一个关于DWR推送技术的示例或配置文件,可能包含了如何设置和使用DWR推送功能的代码示例。通过对这个文件的深入学习和实践,可以更好地理解和掌握DWR3的推...

    dwr服务器推技术

    在描述中提到的"DWR服务器推技术整合Struts2",意味着我们将DWR与流行的MVC框架Struts2相结合,以创建一个具有聊天功能的Web应用。Struts2提供了一个强大的架构来处理HTTP请求,并结合DWR,可以创建一个动态的、交互...

    dwr推技术反转聊天事例

    在“dwr推技术反转聊天事例”中,我们将探讨DWR如何用于构建一个实时的聊天应用程序,并分析其中的关键知识点。 首先,我们需要理解DWR的核心概念。DWR允许JavaScript在浏览器端直接调用服务器端的Java方法,而无需...

    DWR的推技术

    ### DWR的推技术详解 #### 一、DWR推技术概述 DWR(Direct Web Remoting)是一种简化Ajax开发的框架,它允许Java对象直接与JavaScript交互,从而实现更流畅的网页应用体验。在DWR 2.x版本中,引入了推技术,即所谓...

    DWR推技术-用于做及时通讯更新的

    然而,DWR通过建立一个持久的连接,使得服务器可以主动地向客户端推送数据,从而提高了用户体验。 DWR的核心功能包括: 1. **远程方法调用(Remote Method Invocation, RMI)**:DWR允许JavaScript直接调用服务器...

    DWR推送技术

    在本项目的背景下,由于HTML5的WebSocket不适用于所有浏览器,特别是对旧版IE的支持,因此选择了DWR作为实现推送技术的工具。DWR的核心思想是建立一个持久的连接(long-polling)来实现实时数据推送。这种机制下,...

    dwr推模式

    标题 "dwr推模式" 涉及到的是Direct Web Remoting (DWR) 技术的一种工作模式,主要用于Web应用程序中的实时数据交互。DWR允许JavaScript与服务器端的Java代码进行交互,提供了异步更新页面的能力,极大地提高了用户...

    dwr推送及js访问java代码

    **DWR(Direct Web Remoting)**是一种Java技术,它允许JavaScript在客户端直接调用服务器端的Java方法,实现浏览器与服务器之间的实时交互。DWR的出现极大地简化了Web应用中的AJAX(Asynchronous JavaScript and ...

    java聊天室 dwr推技术

    在这个聊天室项目中,DWR推技术扮演了关键角色。"推技术"通常指的是服务器向客户端主动推送信息,而不是等待客户端发起请求。在聊天室这种实时性要求较高的场景下,服务器端需要及时将新消息推送到所有在线用户,而...

    使用dwr+spring实现消息推送

    在IT行业中,消息推送是一项重要的技术,它使得服务器能够实时地向客户端发送数据,而无需客户端不断地轮询请求。在本教程中,我们将探讨如何利用Direct Web Remoting (DWR) 和Spring框架来实现这样的功能。 DWR是...

    DWR消息推送简单实例

    在这个实例中,我们可能会看到如何利用DWR的长轮询技术实现简单的消息推送。 3. **Maven工程** 提到"Maven工程"意味着这个示例项目是使用Maven构建的。Maven是Java项目管理工具,它帮助管理项目的依赖关系,构建...

Global site tag (gtag.js) - Google Analytics