Кэширование в JavaFX WebView

мы разрабатываем JavaFX 2.X приложение, которое должно обеспечить некоторую поддержку ГИС. Мы пришли к выводу, что использование GoogleMaps через встроенный WebView является самым быстрым вариантом. Проблема в том, что каждый раз, когда приложение запускается, скачал соответствующие библиотеки JavaScript. Это делает разработку очень сложной, так как она занимает пару секунд, прежде чем что-либо интерактивное может быть сделано на панели WebView.

первое, что приходит в голову имейте какое-то кэширование, как веб-браузеры, чтобы хранить библиотеки и читать их локально, когда это необходимо. Как это может быть достигнуто с помощью WebView? Есть ли альтернативы кэшированию в нашем случае?

Thanx.

1 ответов


компонент WebView не обеспечивает кэширование веб-ресурсов из коробки. Однако, он использует 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) учитывается при хранении ресурса в кэше. Еще одно соображение-HTML - метатеги. здесь - хороший ресурс для кэширования.

вы также можете рассмотреть систему управления файлами cookie в дополнение к этой системе управления кэшем.