7

GISサポートを提供する必要があるJavaFX2.xアプリケーションを開発しています。埋め込まれたWebViewを介してGoogleMapsを使用するのが最も速いオプションであるという結論に達しました。問題は、アプリケーションが起動するたびに、対応するJavaScriptライブラリがダウンロードされることです。これにより、WebViewパネルでインタラクティブな操作を実行できるようになるまでに数秒かかるため、開発が非常に困難になります。

最初に頭に浮かぶのは、ライブラリを保存し、必要に応じてローカルで読み取るために、Webブラウザのようなキャッシュを使用することです。これはWebViewでどのように達成できますか?私たちの場合、キャッシュに代わるものはありますか?

ありがとう。

4

1 に答える 1

10

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ヘッダー(ETagなど)によって返されるキャッシュポリシーを考慮に入れる必要があります。もう1つの考慮事項は、HTMLメタタグです。 これがキャッシングに関する優れたリソースです。

このキャッシュ管理システムを補完するCookie管理システムを検討することもできます。

于 2012-09-18T22:09:06.003 に答える