2012-08-15 76 views
6

我們正在開發一個JavaFX 2.x應用程序,它需要提供一些GIS支持。我們得出結論,通過嵌入式WebView使用GoogleMaps是最快捷的選擇。它的問題在於,每次我們的應用程序啓動時,都會下載相應的JavaScript庫。這使開發變得非常困難,因爲在WebView面板上完成任何交互操作之前,需要幾秒鐘的時間。在JavaFX WebView中緩存

首先想到的是爲了存儲庫並在需要時在本地讀取它們,需要像瀏覽器那樣進行某種緩存。 WebView如何實現這一點?在我們的案例中是否有其他緩存方式?

Thanx。

回答

8

WebView組件不提供開箱即用的Web資源緩存。但是,它確實利用java.net堆棧進行網絡通信。這意味着您可以安裝自己的URL處理程序,該處理程序與緩存進行對話並從緩存中提供資源。例如,把這樣的事情塊你main()方法JavaFX的推出呼叫前:

URL.setURLStreamHandlerFactory(new URLStreamHandlerFactory() { 
    public URLStreamHandler createURLStreamHandler(String protocol) { 
     if ("http".equals(protocol)) { 
      return new URLStreamHandler() { 
       protected URLConnection openConnection(URL u) throws IOException { 
        if (isCached(u)) { 
         return new CachedStreamConnection(u); 
        } 
        return new MyURLConnection(u); 
       } 
      }; 
     } 
     // Don't handle a non-http protocol, so just return null and let 
     // the system return the default one. 
     return null; 
    } 
}); 

當然,魔鬼存在於細節之中。當將緩存中的資源存儲到緩存中時,您應該考慮由HTTP頭返回的緩存策略(如ETags),因此您應該使用應該使用。另一個考慮因素是HTML元標記。 Here是一個很好的緩存資源。

您可能還想考慮一個cookie管理系統來補充這個緩存管理系統。