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

dwr的ScriptSession和HttpSession分析

    博客分类:
  • dwr
阅读更多

1、关于ScriptSession 

ScriptSession不会与HttpSession同时创建 

当我们访问一个页面的时候,如果是第一次访问,会创建一个新的HttpSession,之后再访问的时候,就会保持当前的HttpSession,即使是刷新,也能保持当前的HttpSession。 

ScriptSession则不同,第一次访问,会创建一个新的ScriptSession,但是,如果你刷新,就会再创建一个新的ScriptSession. 跟第一次的ScriptSession完全不一样。

 

 

2、如何得到ScriptSession 

在DWR中,我们可以通过WebContextFactory.get()来取得一个WebContext对象,进而通过WebContext的getScriptSession()取得ScriptSession对象。 

 

注意:

在我们自定义的Servlet中,我们也可以通过WebContextFactory.get()来取得一个WebContext,但是这种方法却不能取得ScriptSession对象。

因为,此WebContext对象其实不是通过DWR的上下文环境得到的,所以,就根本没有创建ScriptSession对象。 

假设这种方式也能得到ScriptSession的话,那么我们实现“推”也就可以不局限在DWR的上下文环境中了,那么其灵活性就会大很多了。 

所以,这就是我们不能在Servlet中实现推的原因。 

 

3、关于刷新就创建一个新的ScriptSession问题 

在我们需要推送的页面中,如果你刷新以下,那么就提交一个Http的request,此时,如果是第一次,那么就会创建一个httpSession对象,同时,请求由DwrServlet来处理后,就会创建一个ScriptSession.

这个ScriptSession会和你的request请求的URI绑定放在一个由ScriptSessionManager维护的Map里面(这里面其实是一个URI对应的Set,在Set里面放置的是URI绑定的所有ScriptSession)。

即:Map<URI,ScriptSession> map=HashMap<URI,ScriptSession>();最好是:Map<HttpSessionID,ScriptSession> map=HashMap<HttpSessionID,ScriptSession>();

当你刷新的时候,同样的一个HttpSession,却会创建一个新的ScriptSession,然后绑定到对应的URI上。 即每次刷新,都把新ScriptSession放入的map中,在Map中主键是不能重复的,URI不变的情况下使其对应的ScriptSession为最新。

 

4、向所有的页面访问者推送 

当我们想向所有的页面访问者推送的时候,我们只需要,取得所有的页面访问者,就可以“推”了。 

如何取得所有的页面访问者?

可以通过 

//      Collection pages = webContext.getScriptSessionsByPage("/SynMap/map/map.jsp"); 

来取得/SynMap/map/map.jsp的所有访问的ScriptSession 

如何推送?

// Util util = new Util(pages); 

// util.addFunctionCall("syningMap",new Double(x),new Double(y),new Integer(zoom)); 

通过此方法,就可以实现调用客户端的javascript函数,实现对客户端的操作。 

 

5、在上面的推送中产生的问题 

上面的方法已经可以实现向所有的访问者推送。但是问题是,在客户端,如果用户刷新一次或多次,那么,Collection里面可能就保存了很多的无用的ScriptSession,所以不仅仅会影响性能问题,更重要的是,可能就不能实现你想要的功能。 

比如,你想取得当前再现的有效用户,那么你就需要知道那些ScriptSession是有效的。 

 

6、如何管理有效的ScriptSession 

由于上面的问题,我们就需要自己管理ScriptSession.其实,有效地HttpSession,就是那个和当前的HttpSession匹配的ScriptSession. 

3中提到了这个,Map<HttpSessionID,ScriptSession> map=HashMap<HttpSessionID,ScriptSession>();

我们可以自己维护这个Map,在这个Map里面,我们定义key就是HttpSession的Id,其值就是ScriptSession对象。 

在每一次页面载入的时候,都去注册此ScriptSession,那么就会把新的ScriptSession在注册到HttpSessionId中,从而覆盖掉老的ScriptSession

 

分享到:
评论

相关推荐

    DWR的技术分析与界面开发

    最后,关于“树控件”的代码分析和文档说明,说明这个压缩包也包含了与UI组件相关的资源。树控件是常见的数据展示方式,尤其在管理层次结构数据时。这部分内容可能介绍了如何使用DWR来动态加载和操作树形结构,以及...

    dwr 分页技术 案例分析

    在这个"Dwr分页技术案例分析"中,我们将深入探讨如何利用DWR实现高效、用户友好的分页功能。 首先,分页是大型数据集展示时常见的需求,它可以提高页面加载速度,优化用户体验。DWR提供了便捷的方法来实现在客户端...

    dwr开发、技术分析、配置使用

    在本文中,我们将深入探讨DWR的技术分析、配置使用以及如何将其集成到您的项目中。 **1. DWR的基本概念** DWR的核心功能是提供一种安全、高效的机制,让JavaScript能够调用Java对象的方法,这被称为远程方法调用...

    dwr和ajax技术

    DWR(Direct Web Remoting)是一种Java库,它允许JavaScript和Java在浏览器与服务器之间进行双向通信,而Ajax(Asynchronous JavaScript and XML)则是一种通过JavaScript实现异步数据交换和页面更新的技术,无需...

    DWR3.0.jar、DWR.war和DWR2.0中文说明文档

    通过分析这个war文件,开发者可以学习如何配置DWR的XML配置文件(dwr.xml),以及如何创建可从JavaScript调用的Java方法。 3. **DWR2.0中文说明文档**: 这份文档对于理解DWR的工作原理和使用方法至关重要,特别是...

    DWR3参考资料

    总结来说,DWR3的核心功能之一是实现实时推送,这依赖于ScriptSession管理和事件监听机制。通过`Browser.withPageFiltered()`和自定义的`ScriptSessionFilter`及`SendMessageThread`,开发者可以在服务器端向特定的...

    dwr dwrdwr

    dwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwr

    dwr配置和使用详解

    在DWR的配置过程中,主要涉及到两个关键文件:`dwr.xml`和`web.xml`。`dwr.xml`是DWR的核心配置文件,它定义了哪些Java类和方法可以被JavaScript访问。例如: ```xml &lt;dwrfactory name="dwr"&gt; &lt;!-- 允许访问...

    dwr1+dwr2+dwr3 jar包

    这个压缩包包含了DWR的三个主要版本:DWR1.0、DWR2.0和DWR3.0的jar包,这些jar包是运行DWR应用的核心组件。 DWR1.0: DWR1.0是DWR项目的早期版本,主要目标是简化Web应用中的异步通信。在这个版本中,DWR提供了一个...

    dwr,jar和dwr-noncla.jar

    Direct Web Remoting (DWR) 是一个开源Java库,它允许在Web应用程序中轻松地进行JavaScript和服务器端Java代码之间的交互。DWR使得AJAX(Asynchronous JavaScript and XML)开发更为简便,允许开发者在不刷新整个...

    dwr和ssh的集成源码

    **标题:“dwr和ssh的集成源码”** ...总的来说,这个集成示例对于初学者来说是一份宝贵的教育资源,虽然可能存在不规范之处,但通过对这些代码的分析和修改,可以加深对DWR和SSH框架的理解,进一步提高开发技能。

    DWR即时通讯

    4. **DWR API**:ChatManager类中使用了DWR的API,如`ScriptSession`、`ServerContext`和`Util`。`ScriptSession`代表与特定客户端的会话,可以用来存储和发送数据到客户端。`ServerContext`提供服务器上下文信息,...

    dwr和简单的文件上传

    这通常包括创建一个`dwr.xml`配置文件,其中定义了哪些Java类和方法可以被JavaScript调用。例如,你可以定义一个处理文件上传的类,如`FileUploadService`,并在其中声明一个接收文件的`uploadFile`方法。 ```xml ...

    dwr实现ajax功能ajax+dwr

    在提供的文件中,`DWR 中文帮助.pdf`可能包含了DWR的详细文档和使用指南,帮助开发者更好地理解DWR的配置和API。`总结DWR的步骤.txt`可能是对实施DWR步骤的简洁概述,方便快速参考。`Ajax主要代码.txt`可能包含了...

    dwr2.0 dwr3.0 jar包

    这个主题主要围绕DWR的两个主要版本——DWR 2.0和DWR 3.0,以及它们与jar包的关联。 首先,DWR 2.0是DWR项目的一个早期版本,它引入了核心的远程方法调用(Remote Method Invocation, RMI)功能,使得JavaScript...

    dwr源码包,dwr.jar包下载

    1、 导入dwr.jar包 2、 在web.xml中配置dwr,如下: &lt;!-- 配置DWR --&gt; &lt;servlet-name&gt;dwr-invoker org.directwebremoting.servlet.DwrServlet &lt;init-param&gt; &lt;param-name&gt;debug&lt;/param-name&gt; ...

    DWR的配置和传值DWR的配置和传值

    Direct Web Remoting (DWR) 是一个开源的Java库,允许在Web应用程序中实现Ajax功能,即在客户端JavaScript和服务器端Java之间进行实时通信。DWR简化了这个过程,使得开发者无需处理底层的HTTP请求和响应,而是可以...

    dwr笔记 dwr自学资料

    DWR (Direct Web Remoting) 是一种开源Java技术,它允许Web应用程序在浏览器和服务器之间进行实时、双向通信,使得JavaScript可以直接调用服务器端的Java方法,极大地简化了客户端和服务器端的数据交换。本笔记将...

Global site tag (gtag.js) - Google Analytics