Подтвердить что ты не робот

Апплет, обслуживаемый Java Web Start, ресурсы, запрашиваемые WEB-серверу, прежде чем смотреть в файлы JAR

Я новичок здесь, и я прошу прощения за мой плохой английский.

У меня есть небольшая проблема с классом Applet, обслуживаемым технологией Java Web Start. У меня есть некоторые JAR файлы, зависящие от платформы, которые загружаются Web Start правильно, но когда я получаю контент с помощью метода getResourceAsStream(String fileName) объекта ClassLoader, сначала выполняется запрос GET для fileName на WEB-сервер, после получения 404 Not Found ответ, ресурс правильно загружен из JAR файла. Проблема в том, что у меня много файлов внутри JAR, поэтому у меня много ненужной нагрузки на WEB-сервер, и поэтому я должен ждать долгое время, прежде чем я смогу использовать апплет.

Поиск в Google Я нашел несколько дискуссий, в которых сказано, что добавлен параметр codebase_lookup со значением false, но это не решило проблему. Эта страница по отношению к параметру codebase_lookup говорит о том, что поведение Applet по умолчанию заключается в загрузке ресурсов из файла JAR, а затем из Applet codebase, в моем случае поведение противоположное.

Я также добавил атрибут eager="true" для каждого ресурса JAR в файле .jnlp, но поведение всегда одно и то же. Апплет был разработан и построен с помощью NetBeans, создаваемые файлы html и jnlp следующие.

launch.html

<applet width="300" height="300">
        <param name="jnlp_href" value="launch.jnlp"/>
        <param name="codebase_lookup" value="false"/>
</applet>


launch.jnlp

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp codebase="http://192.168.23.4/contact" href="launch.jnlp" spec="1.0+">
<information>
    <title>ContactNR</title>
    <vendor>Roberto Santini</vendor>
    <homepage href=""/>
    <description>ContactNR</description>
    <description kind="short">ContactNR</description>
</information>
<resources>
<j2se version="1.5+"/>
<jar eager="true" href="ContactNR.jar" main="true"/>
<jar eager="true" href="lib/VDK.jar"/>
<security>
    <all-permissions/>
</security>
</resources>
<resources arch="amd64" os="Linux">
    <jar eager="true" href="lib/liblinux64.jar"/>
</resources>
<resources arch="x86_64" os="Linux">
    <jar eager="true" href="lib/liblinux64.jar"/>
</resources>
<resources arch="x86" os="Linux">
    <jar eager="true" href="lib/liblinux.jar"/>
</resources>
<resources arch="i386" os="Linux">
    <jar eager="true" href="lib/liblinux.jar"/>
</resources>
<resources os="Windows">
    <jar eager="true" href="lib/libwin.jar"/>
</resources>
<resources os="MacOs">
    <jar eager="true" href="lib/libmac.jar"/>
</resources>
<applet-desc height="300" main-class="com.netresults.voip.ContactNR" name="ContactNR" width="300">
    <param name="codebase_lookup" value="false"/>
</applet-desc>
</jnlp>

Может кто-нибудь мне помочь? Спасибо,

Роберто.

4b9b3361

Ответ 1

Я решил эту проблему, добавив индекс в JAR файл. После того, как вы построили свою банку, запустите команду:

JAR -i <path/to/jar-file>

Он должен выполняться как отдельный шаг от фактического JAR-ing.

Объяснение: Когда процесс запуска встречает INDEX.LIST в META-INF, он доверяет этому и не будет искать файлы на сервере.

Ответ 2

Недавно у меня была аналогичная проблема с log4j-запросом на отсутствие ресурсов через GET. Может быть, веб-класс classpath все еще имеет некоторый приоритет над связанными банками в вашем случае? Ну, вы можете попробовать упаковать все банки в одну. Это, конечно, усложняет сборку, но вы можете попробовать это только один раз вручную, чтобы увидеть, исчезает ли проблема.