【问题标题】:Caching in Java AppletsJava Applet 中的缓存
【发布时间】:2012-04-11 09:41:52
【问题描述】:

有哪些方法可用于在 Java 小程序中进行缓存?

我认为组成小程序的 .jar 将被大多数浏览器缓存。

  • 对于小程序使用的任何依赖 .jar 是否都是这种情况?
  • 如果小程序在运行时从远程 URL 加载资源,是 正确假设这不会被浏览器缓存?如果它 不被浏览器缓存,是否能够实现缓存 通过写入本地存储?

【问题讨论】:

    标签: java http caching applet lwjgl


    【解决方案1】:

    对于小程序使用的任何依赖 .jar 是否都是这种情况?

    是的,假设依赖的 JAR 是可缓存的。

    如果小程序在运行时从远程 URL 加载资源,假设浏览器不会缓存这些资源是否正确?

    可能是的。 JVM 可能会直接连接到远程服务器,而浏览器将看不到 HTTP 请求。此外,JVM 可能不知道浏览器的缓存组织或位置。但是,这完全取决于平台。

    JVM 也有可能实现自己的 HTTP 缓存。 AFAIK,当前一代的 Oracle JVM 没有,但未来的可能并非不可想象。

    如果不被浏览器缓存,是否可以通过写入本地存储来实现缓存?

    仅当小程序已签名并且用户已接受签名时。小程序通常无法读取或写入本地存储。

    【讨论】:

    • 感谢您的回答。只是为了澄清运行时缓存行为:如果我的 Java 小程序自己发出 HTTP 请求,比如加载图像,是否会被视为浏览器自行加载的资源,或者浏览器是否被规避并且 JVM 发出请求“直接”?
    • 如果 JVM 沙箱允许 applet 执行此操作,那么我认为浏览器不会意识到请求已发出。我也认为JVM将无法直接使用浏览器的缓存......因为它不会知道它是如何组织的,甚至不知道它在哪里。
    • 感谢您的澄清。您可能想将您的第二点修改为“是”,然后我可以将您的答案标记为正确。
    • @Deejay - 我明白你的意思。我误解了你问题的那一部分。
    • 嗨,斯蒂芬,我发现另一个 StackOverflow 答案表明使用 URLConnection 将通过浏览器的缓存。请参阅下面的答案。
    【解决方案2】:

    为了更好地控制资源缓存,使用Java Web Start 部署小程序,它提供:

    ..自动更新(包括延迟下载和程序化控制更新)..

    请注意,JWS 应用程序。无需信任即可调用JNLP API 的程序化更新部分。

    【讨论】:

      【解决方案3】:

      根据How to disable http caching in appletURLConnection JavaDoc,缓存将在以编程方式请求资源时启用。

      【讨论】:

      • 请注意,setUseCaches 谈到 允许 使用缓存。我认为它指的是外部 HTTP 代理中的缓存。但是请随意尝试看看这是否确实使用了浏览器的缓存和/或 JVM 特定的缓存。
      • 是的,我认为需要一些经验修补:)
      猜你喜欢
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多