我们有一个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不会改变。
有没有人见过这个?
答案 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