Java-апплет не кешируется - PullRequest
8 голосов
/ 23 апреля 2010

У меня проблема с развернутым Java-апплетом, который отказывается кэшироваться в «липком» кеше jvm (или браузером). По какой-то причине каждый раз, когда пользователь загружает страницу, на которой работает этот апплет, jvm повторно загружает файл jar с сервера, что вызывает длительную задержку.

Доступ к веб-странице, содержащей апплет, осуществляется через Интернет, поэтому согласно документации Java-апплета Sun я использую тег <applet> вместо тега <object> или <embed>.

Любая помощь отладки или выявления проблемы будет принята с благодарностью.

Ниже приведен полный тег апплета, который я использую:

<applet alt="Scanning Applet failed to load" archive="scanning.jar"
        code="scanning.scanlet.class" codebase="/java/" codetype="application/java"
        height="30" mayscript="True" name="scanlet" width="200">
    <param name="domain" value="192.168.12.23" />
    <param name="publishName" value="scan_attachment" />
    <param name="publishURL" value="http://192.168.12.23/draft/update/52" />
    <param name="curURL" value="http://192.168.12.23/draft/edit/52" />

Your browser is unable to process the Java &lt;APPLET&gt; tag needed to display this applet
<br />
One solution would be to download a better web browser like
<a href="http://www.mozilla.com/firefox">Mozilla's Firefox</a>

</applet>

Ответы [ 4 ]

4 голосов
/ 09 июля 2010

У меня была та же проблема, и я нашел хитрость, которую нужно применить на стороне сервера. Кажется, что банки не кэшируются, если их тип MIME неверен. Пожалуйста, проверьте ваш ответ сервера, используя mime-тип application / java-archive.

Еще одна проблема, которую я обнаружил, связана с конкретной банкой. Мой параметр архива перечислял много jar-файлов, но только некоторые из них были кэшированы. Я обнаружил, что все банки до определенного, где кэшированы, все остальные банки не были кэшированы вообще. При загрузке апплета я нажал «5» в его консоли java и обнаружил это сообщение сразу после последнего кэшированного jar: cache: в jar отсутствует подписанная запись. Я до сих пор не знаю, что не так с этим файлом, но я переместил эту банку в конец списка параметров архива. Это «исправило» проблему.

2 голосов
/ 23 апреля 2010

Лично я решил проблемы с кэшированием, используя параметры cache_archive и cache_version, о которых говорилось в http://java.sun.com/javase/6/docs/technotes/guides/plugin/developer_guide/applet_caching.html

Моя версия cache_version основана на фактической дате изменения файла, например,

val archive = libs.map("/" + _.getPath).mkString (", ")
val version = libs.map(_.getUpdated / 1000 / 20 - 59281420).mkString (", ")

и для работы с MSIE это выглядит так:

if (msie) {
  cms write <OBJECT
    classid="clsid:CAFEEFAC-0016-0000-0000-ABCDEFFEDCBA"
    codebase="http://java.sun.com/update/1.6.0/jinstall-6-windows-i586.cab"
    width="100%" height="100%">
    ...
    <PARAM name="cache_archive" value={archive}/>
    <PARAM name="cache_version" value={version}/>
  </OBJECT>
} else {
  cms write <applet ...
    cache_archive={archive} cache_version={version}></applet>
}
1 голос
/ 13 июля 2010

Мне пришлось удалить файлы Jar из тега Archive и просто указать его в параметре cache_archive, а также указать версии таким образом, чтобы он не возвращался на сервер для даты последнего изменения

Исправлено в Firefox для меня

1 голос
/ 23 апреля 2010

В этой официальной статье описывается, как изменить тег APPLET для увеличения кеширования:

http://java.sun.com/products/plugin/1.3/docs/appletcaching.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...