Eclipse RAP - Firefox不会忘记会话

时间:2009-07-29 23:39:56

标签: eclipse firefox session eclipse-rcp eclipse-rap

我们有一个Eclipse RAP应用程序在Firefox中表现得有点奇怪 - 两个不同的问题。

浏览时,可以单击系统某个部分的按钮。这将打开一个弹出窗口,如下所示:

IWorkbenchBrowserSupport bs;
bs = PlatformUI.getWorkbench().getBrowserSupport();
int style = IWorkbenchBrowserSupport.AS_EXTERNAL;
IWebBrowser b = bs.createBrowser(style, getRandomID(), "Hello world", "");
b.openURL(new URL(...));

其中URL是应用程序中的另一个servlet。这个servlet在同一个运行时,但与RAP无关 - 它从内存存储中获取二进制blob并将其转储到输出流中。

问题1:这会导致HTTP会话在firefox中死亡,并显示“会话已过期”RAP错误页面,其中包含重新启动会话的链接。

问题2:现在,当您单击链接以重新启动会话时,它会再次显示应用程序的对话框,但会在您执行任何操作时再次显示会话已过期错误。这可以防止用户再次使用系统,除非Firefox完全关闭并重新启动。快速浏览FireBug可以发现Firefox传递的JSESSIONID不会改变。

有没有人见过这个?

3 个答案:

答案 0 :(得分:0)

将流转储到输出多长时间?可能导致超时?由于RAP使用Javascript调用,因此可能比正常的超时时间短得多。

问题2:Firefox缓存了很多东西;如果Javascript执行挂起,可能会导致此类问题。

其他浏览器是否存在这些问题?检查内部浏览器(或任何其他具有不同渲染引擎的浏览器)可能是个好主意。

答案 1 :(得分:0)

事实证明,如果RAP应用程序打开一个指向应用程序本身中的servlet的弹出窗口,则在当前HTTP servlet上下文中,会话将被终止。通过为相关servlet创建虚拟HTTP上下文来解决此问题。

答案 2 :(得分:0)

如果您需要在同一个应用程序中提供内容,则应使用服务处理程序。看这个FAQ: http://wiki.eclipse.org/RAP/FAQ#How_to_provide_download_link.3F