2009-07-29 53 views
0

我們有一個Eclipse RAP應用程序,它在Firefox中表現得有點奇怪 - 兩個截然不同的問題。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

事實證明,如果RAP應用程序打開一個彈出窗口,指向應用程序本身中的一個servlet,在當前的HTTP servlet上下文中,會話被終止。通過爲有問題的servlet創建一個虛擬HTTP上下文來修復這個問題。

0

將流轉儲到輸出需要多長時間?可能會導致超時?由於RAP使用Javascript調用,它可能比正常的超時時間短得多。

對於問題2:Firefox緩存了很多東西;如果Javascript執行掛起,可能會導致此類問題。

這些問題是否存在於其他瀏覽器?使用內部瀏覽器(或其他具有不同渲染引擎的瀏覽器)進行檢查可能是一個好主意。