Кэширование в 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 в дополнение к этой системе управления кэшем.