2012-08-15 9 views
6

私たちは、GISサポートを提供する必要があるJavaFX 2.xアプリケーションを開発しています。 Googleでは、埋め込みWebViewを使用してGoogleMapsを使用するのが最も簡単な方法だと結論づけました。問題は、アプリケーションが起動するたびに、対応するJavaScriptライブラリがダウンロードされることです。 WebViewパネルで対話ができるようになるには、数秒かかるので開発が非常に難しくなります。JavaFX WebViewでのキャッシュ

最初に気になるのは、ライブラリを保存して必要なときにローカルで読むために、Webブラウザのようなキャッシュを用意することです。これはWebViewでどのように達成できますか?私たちの場合にキャッシングの代替手段はありますか?

Thanx。

答えて

8

WebViewコンポーネントでは、Webリソースをすぐにキャッシングできません。ただし、ネットワーク通信用にjava.netスタックを使用します。つまり、キャッシュと通信し、そのキャッシュからリソースを処理する独自のURLハンドラをインストールできます。例えば、JavaFXの起動呼び出しの前に、あなたのmain()方法では、このブロックのようなものを置く:

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管理システムを検討することもできます。

関連する問題