2012-08-15 78 views
6

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

首先想到的是为了存储库并在需要时在本地读取它们,需要像浏览器那样进行某种缓存。 WebView如何实现这一点?在我们的案例中是否有其他缓存方式?

Thanx。

回答

8

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头返回的缓存策略(如ETags),因此您应该使用应该使用。另一个考虑因素是HTML元标记。 Here是一个很好的缓存资源。

您可能还想考虑一个cookie管理系统来补充这个缓存管理系统。