【问题标题】:Caching in JavaFX WebViewJavaFX WebView 中的缓存
【发布时间】:2012-08-11 16:46:50
【问题描述】:

我们正在开发一个 JavaFX 2.x 应用程序,它需要提供一些 GIS 支持。我们得出结论,通过嵌入式 WebView 使用 GoogleMaps 是最快的选择。它的问题是每次我们的应用程序启动时,都会下载相应的 JavaScript 库。这使得开发变得非常困难,因为在 WebView 面板上进行任何交互操作需要几秒钟的时间。

首先想到的是拥有某种缓存,如 Web 浏览器所做的那样,以便存储库并在需要时在本地读取它们。使用 WebView 如何实现这一点?在我们的案例中,是否有缓存的替代方案?

谢谢。

【问题讨论】:

    标签: webview javafx-2


    【解决方案1】:

    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 管理系统来补充这个缓存管理系统。

    【讨论】:

      猜你喜欢
      • 2016-01-16
      • 2013-04-19
      • 2012-02-26
      • 2018-06-23
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 2015-08-14
      相关资源
      最近更新 更多