0

我们有一个 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 没有改变。

有没有人见过这个?

4

3 回答 3

0

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

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

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

于 2009-08-02T20:55:49.980 回答
0

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

于 2010-04-09T02:30:01.217 回答
0

如果您需要从同一个应用程序中交付内容,则应该使用服务处理程序。请参阅此常见问题解答: http ://wiki.eclipse.org/RAP/FAQ#How_to_provide_download_link.3F

于 2010-05-05T10:45:42.550 回答