Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Апплеты > Java plug-in – что это такое ?


Автор: AntonSaburov 22.12.2005, 15:16
Java plug-in – что это такое ?

Автор статьи написал ее в ходе чтения документации по Java Plug-In и в данном случае форма изложения материала получилась несколько рваной, за что приношу свои извинения.

Java plug-in (в дальнейшем просто plugin) в первую очередь был создан для того, чтобы пользователь мог запускать Java-приложения из под разных броузеров

используя SUN JRE (Java Runtime Environment от SUN). Другими словами, если пользователю необходимо запустить апплет и этот апплет должен быть запущен из-под

Sun JRE определенной версии, то сделать это хотелось бы как можно более удобным способом.

На сегодняшний день существует два пути запуска апплета:
1. Использовать таг APPLET на HTML странице
2. Заменить таг APPLET на более современный таг OBJECT (для Internet Explorer’а) или на таг EMBED для броузера Netscape (Но для версии 6 этот таг уже не

подходит)

SUN предлагает использовать следующие правила для решения – какой таг использовать. Во-первых Вы должны определить – быдет ли использоваться апплет в

интернет или в интранет сети.
Если Интернет – используйте таг APPLET
Если же Интранет – то OBJECT или EMBED
Во-вторых Вы должны решить какой броузер будет использоваться для работы с апплетом
Если Internet Explorer – используйте OBJECT
Если же семейство Mozilla – используйте EMBED
Если Вы рассчитываете на различные броузеры – используйте APPLET


Использование тага APPLET

Для подробного ознакомления с тагом APPLET советуем заглянуть на станицу http://www.w3.org/TR/1999/REC-html401-19991224/ (W3 HTML specification.)

В HTML спецификации утверждается, что таг APPLET является устаревшим и использовать его не стоит. Но в связи с тем, что четкое описание обработки тага OBJECT

в спецификации пока нет, SUN советует использовать таг APPLET в случае кросс-платформенности и кросс-броузерности.

Достаточно простой пример использования тага:

Код

<applet code=Applet1.class width="200" height="200">
    Your browser does not support the <code>applet</code> tag.
</applet>



Использование тага OBJECT

Таг OBJECT имеет несколько аттрибутов. Мы рассмотрим самые важные.

Аттрибут classid определяет какую версию JRE надо использовать и может быть записан в двух варинатах:
1. classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
В этом случае определение используемой версии JRE определяется динамически и используется самая последняя из установленных в данный момент.
2. classid="clsid:CAFEEFAC-xxxx-yyyy-zzzz-ABCDEFFEDCBA"
В такой форме последовательности xxxx, yyyy, zzzz определяют точно, какая версия JVM будет использована. Например для использования plugin’а версии 1.5.0

classid определяется следующим образом:
classid="clsid:CAFEEFAC-0015-0000-0000-ABCDEFFEDCBA"

ЗАМЕЧАНИЕ!
Формат версий для JVM выглядит следующим образом - n1.n2.n3_n4n5
n1.n2 –major версия программы
n3 – minor версия программы
n4, n5 – версия обновления програмы

Аттрибут codebase определяет каким образом загружать необходимый plugin. Существует в двух формах:
1. codebase=<URL>
В этом случае plugin будет загружаться с указанного URL
2. codebase=<URL>#Version=major,minor,micro,update
В такой форме определяется версия необходимой JRE и если у пользователя установлена более старая версия, то броузер предложит установить ту, которая указана

в URL. В качестве примера можно посмотреть на следующее описание:
Код

<object 
    classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    width="200" height="200"
    codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0">
    <param name="code" value="Applet1.class">
</object>


Здесь http://java.sun.com/j2se/1.5.0/docs/guide/deployment/deployment-guide/autodl-files.html
Вы можете посмотреть список различных версий JRE и для каждой версии тот URL, который позволит Вам загрузить нужную версию.


Использование тага EMBED

Код

<embed code="Applet1.class"
    width="200" height="200"
    type="application/x-java-applet;version=1.5.0"
    pluginspage="http://java.sun.com/j2se/1.5.0/download.html"/>


Наиболее интересными в данном таге являются два аттрибута.
type – определяет, какая версия JRE необходима. Здесь разработчик может определить версию двумя путями
1. type="application/x-java-applet;version=1.5.0"
В этом случае на компьютере пользователя должна быть устанволена JRE не ниже 1.5.0. В случае, если это не так, то ползователь будет перенаправлен на

страницу, указанную в URL для загрузки нужной версии
2. type="application/x-java-applet;jpi-version=1.5.0_01
В такой ситуации требуется точное совпадение версии. И если даже версия на компьютере пользователя выше, будет производиться загрузка точной версии.


Что делать в случае, если надо использовать несколько броузеров

Разработчик может использовать два варианта для установки JRE.
1. Использование чистого HTML
2. Использование JavaScript

Если Вы используете HTML, то надо помнить несколько правил:
Internet Explorer – распознает таг OBJECT и игнорирует таг COMMENT
Семейство Mozilla - игнорирурет таг OBJECT с аттрибутом classid и обрабатывает таг COMMENT.

Вот пример кода, который позволяет загружать нужные плагины при использовании разных броузеров:
Код

<object 
  classid="clsid:CAFEEFAC-0015-0000-0000-ABCDEFFEDCBA"
  <param name="code" value="Applet1.class">
    <comment>
      <embed code="Applet1.class"
        type="application/x-java-applet;jpi-version=1.5.0">
        <noembed>
          No Java Support.
        </noembed>
      </embed>
    </comment>
  </param>
</object>

Если Вы предпочитаете использовать JavaScript то нижеприведенный пример достаточно ясно показывает, что Вы должны делать.

Код

<html>
<script language="Javascript">

  var _app = navigator.appName;

  if (_app == 'Netscape') {
    document.write('<embed code="Applet1.class"',
            'width="200"',
            'height="200"',
            'type="application/x-java-applet;version=1.5.0">');
    }
  else if (_app == 'Microsoft Internet Explorer') {
    document.write('<OBJECT ',
            'classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"',
            'width="200"',
            'height="200">',
            '<PARAM name="code" value="Applet1.class">',
            '</OBJECT>');
    }
  else {
    document.write('<p>Sorry, unsupported browser.</p>');
  }

</script>
</html>


Вышеприведенный код имеет недостаток в плане того, что в Netscape 6 таг EMBED не поддерживается. Кроме того каждый раз писать такой код Вам само собой

надоест и Вы бы предпочли что-то автоматическое. Для такого случая SUN создал специальные конверторы, которые позволяют изменить уже готовые HTML файлы.

Результатом изменения файла будет новый файл, в котором таги APPLET будут заменены на более современный код.


Конфигурирование прокси

Большинство корпоративных пользователей подключены к сети, которая для выхода «наружу» используют прокси.
Plugin позволяет настроить необходимые параметры. Для Windows необходимо зайти в Панель Управления (Control Panel) и запустить Java Plug-In Control Panel.
В появившемся окошке выберите закладку Proxies. Plugin можно настроить в трех видах:
1. Использовать настройки броузера
2. Ручное конфигурирование
3. Ввести URL для автоматической настройки. Вы должны ввести URL для вызова файла с JavaScript где находится функция FindProxyForURL.


Кэширование апплетов

Панель управления плагином содержит в себе закладку, в которой можно настроить параметры кэша. Но кроме того разработчик может настроить параметры

кэширования апплета с помощью указания аттрибутов для тагов OBJECT и EMBED.
cache_archive – содержит список файлов, которые надо клсть в кэш.
<PARAM NAME="cache_archive" VALUE="a.jar,b.jar,c.jar">
cache_version – содержит список версий апплета, которые надо кэшировать
<PARAM NAME="cache_version" VALUE="1.2.0.1, 2.1.1.2, 1.1.2.7">
cache_archive_ex – используется для того, чтобы делать предварительную загрузку некоторых файлов
<PARAM NAME =”cache_archive_ex” VALUE= "<jar_file_name>;<preload(optional)>;<jar_file_version(optional)>,..."


«Молчаливая» установка

Инсталляционный пакет JRE построен с помощью программы InstallShield, которая базируется в свою очередь на Microsoft Windows Installer. Он позволяет

производить так называемую «молчаливую» установку.

<jre>.exe /s /v"/qn ADDLOCAL=jrecore[,extra][,other_US] | ALL ]
[IEXPLORER=1] [NETSCAPE6=1] [MOZILLA=1] [INSTALLDIR=<drive>:\<install_path>]
[PRIVATE=1][REBOOT=Suppress]"

Где
jre.exe – исполняемый файл
ADDLOCAL – значение локализации
IEXPLORER, NETSCAPE6, MOZILLA – подключать ли JRE к этим броузерам


Основы безопасности апплетов

1. Все неподписанные апплеты работают в стандратной «песочнице»
2. Если в файле java.policy НЕ ОПРЕДЕЛЕН usePolicy, то подписанные апплеты получают AllPermissions (полные права) если: Java Plug-In может проверить подпись

и выдает приглашение, которое пользователь может принять и дать апплету такие права или отклонить.
3. Если в файле java.policy ОПРЕДЕЛЕН usePolicy, то апплет получает те права, которые прописаны в файле java.policy и не происходит запроса на подтверждение

пользователя.

Апплеты могут быть подписаны с помощью алгоритма RSA. Для того, чтобы plugin мог проверить подпись, в него встроен провайдер криптографии (не знаю как хорошо

перевести Cryptographic Service Provider – CSP). CSP поддерживает алгоритмы подписи MD2-RSA, MD5-RSA, SHA-RSA.

Более подробную инофрмацию по подписи апплетов можно получить в другой статье: http://vingrad.ru/JAVA-JAV-000116


Отладка апплетов с помощью Java Plug-in

Для того, чтоы иметь возможность отлаживать Ваше приложение Вам необходимо установить Java 2 SDK. Как установить – можете посмотреть статью:

http://vingrad.ru/JAVA-JAV-000126
Также убедитесь, что Ваше приложение было откомпилировано с ключом –g.
Теперь начнем отладку.
1. Запустите Java Plug-in Control Panel (как это сделать см. Выше). В закладе Advanced установите параметры:
Код

-Djava.compiler=NONE -Xnoagent -Xdebug -Xrunjdwp:transport=dt_shmem,address=<connection-address>,server=y,suspend=n

<connection-address> - это строка, которая указывает коннект к JVM. Например это может быть так:
Код

-Djava.compiler=NONE -Xnoagent -Xdebug -Xrunjdwp:transport=dt_shmem,address=2502,server=y,suspend=n


2. Также в закладке Advanced установите нужную версию JDK, которая будет указывать на установленную Вами
3. Запустите Internet Explorer или Netscape и загрузите страницу, которая содержит отлаживаемый апплет.
4. Запустите команду jdb – attach <connection-address>. Для параметров, которые были установлены в пункте 1 можно использовать запуск
Код

jdb -attach 2502

Основные сведения по использованию jdb Вы моежет найтипо адресу http://java.sun.com/j2se/1.5.0/docs/guide/jpda/jdb.html
5. Как только дебаггер подконнектится к JVM Вы можете начинать отладку


Представленная информация само собой существует на официальном сайте Sun Microsystems и Вы можете использовать оригинальные описания Java Plug-In.
Все замечания по поводу статьи автор примет с большим удовольствием.

Автор: ShurikA 19.2.2008, 00:53
Приветствую всех!
Очень понраволась эта статья.  Спасибо.
После некоторого копания в нете отыскал очень интересную штуку, и хотелось бы поделиться.
"штука" называется HTML Converter. Зачем она нужна?

Многие (включая меня самого) задаются вопросом как правильно вставить апплет в HTML страничку.
Во всех книгах, во всяком случае для начинающих, описывается таг APPLET, он работает везде.
Но... допустим на компьютере не установленна JVM, или установленна не правильная версия, в таком случае появится пустое окно апплета или с красным иксом в левом верхнем углу этого окна (зависит от браузера).
Есть возможность помочь конечьному пользователю с установкой JVM и воспользоваться тагами Object и/или EMBED.
Я не буду описывать то как ими нужно пользоваться. Это нам уже предоставил AntonSaburov в статье выше, за что ему огромное спасибо.
Я попытаюсь облегчить жизнь создавая эти таги правильно, в 95% случаев просто автоматический  smile 

А теперь к делу.

Компания Sun, которую мы все знаем, предоставила нам "инструмент" под названием HTML Converter. Его цель конвертировать таг APPLET в тот таг который нам нужен. На пример Object или EMBED, при этом очень простым способом.
Я опишу пример конвертирования который сам же и использовал:

1. Перво на перво нам нужно создать HTML фаил в котором будет описан таг APPLET (желательно правильный и проверенный)
У меня он выглядел вот так:
Код

<applet
        codebase = "http://iibspro.com/soft/octopusuploader/"
        code     = "octopusuploader.OctopusUploader"
        name     = "OctopusUploader"
        ARCHIVE     = "<!--{applet_url}-->"
        width    = "600"
        height   = "450"
        MAYSCRIPT >
        <PARAM NAME="type" VALUE="application/x-java-applet">
        <param name="oid" value="<!--{oid}-->">
        <param name="redUrl" value="<!--{red_url}-->">
        <param name="lang" value="<!--{lang}-->">
        <param name="maxFileSize" value="<!--{max_file_size}-->">
</applet>

сохраним его где угодно и под любым именем.

2. Запускаем HTML Converter
HTML Converter можно запустить как с командной строки так и его графический интерфайс. Но запуск в любом случае происходит с командной строки. Я предпочитаю воспользоваться GUI.
JAR фаил конвертера должен быть в дериктории установки вашей ...JDK/lib.

Command Line:
Код

"C:\\Sun\\AppServer\\jdk\\bin\\java" -jar htmlconverter.jar -gui

После этой команды поднимертя окно на подобие следующего:
user posted image

2.1 В репвом поле выбераем тот самый фаил HTML который мы создали в самом начале.
2.2 Выбераем платформу под которую нам нужно созда наш таг (в поле Template File). Я для себя быбрал Standard (IE & Navigator)...
2.3 Вуберим версию JVM под которую нам нужно прогонять наш апплет. Тут к сожалению только 2 варианта: допустим версия 1.4 или 1.4 и выше. Но это поправимо: самая низкая версия зависит от той версии JVM под которой запущен HTML Converter, так что если нужна, на пример, версия 1.5 то можно запустит HTML Converter под 1.5 и т.д.
Для свойх нужд я выбрал версию 1.5 и выше

Всё, с установками закончили.

3. Теперь просто нажимаетм "Convert". Выскочит окошко с сообщением сколько фаилов обработанно. 

Теперь давайте откроем опять тот же самый фаил HTML который мы создали в самом начале:
Код

<!--"CONVERTED_APPLET"-->
<!-- HTML CONVERTER -->
<object
    classid = "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    codebase = "http://java.sun.com/update/1.5.0/jinstall-1_5-windows-i586.cab#Version=5,0,0,5"
    WIDTH = "600" HEIGHT = "450" NAME = "OctopusUploader" >
    <PARAM NAME = CODE VALUE = "octopusuploader.OctopusUploader" >
    <PARAM NAME = CODEBASE VALUE = "http://iibspro.com/soft/octopusuploader/" >
    <PARAM NAME = ARCHIVE VALUE = "<!--{applet_url}-->" >
    <PARAM NAME = NAME VALUE = "OctopusUploader" >
    <PARAM NAME = MAYSCRIPT VALUE = true >
    <param name = "type" value = "application/x-java-applet;version=1.5">
    <param name = "scriptable" value = "false">
    <PARAM NAME = "type" VALUE="application/x-java-applet">
    <PARAM NAME = "oid" VALUE="<!--{oid}-->">
    <PARAM NAME = "redUrl" VALUE="<!--{red_url}-->">
    <PARAM NAME = "lang" VALUE="<!--{lang}-->">
    <PARAM NAME = "maxFileSize" VALUE="<!--{max_file_size}-->">

    <comment>
    <embed
            type = "application/x-java-applet;version=1.5" \
            CODE = "octopusuploader.OctopusUploader" \
            JAVA_CODEBASE = "http://iibspro.com/soft/octopusuploader/" \
            ARCHIVE = "<!--{applet_url}-->" \
            NAME = "OctopusUploader" \
            WIDTH = "600" \
            HEIGHT = "450" \
            MAYSCRIPT = true \
            type ="application/x-java-applet" \
            oid ="<!--{oid}-->" \
            redUrl ="<!--{red_url}-->" \
            lang ="<!--{lang}-->" \
            maxFileSize ="<!--{max_file_size}-->"
        scriptable = false
        pluginspage = "http://java.sun.com/products/plugin/index.html#download">
        <noembed>
            
            </noembed>
    </embed>
    </comment>
</object>

<!--
<APPLET CODE = "octopusuploader.OctopusUploader" JAVA_CODEBASE = "http://iibspro.com/soft/octopusuploader/" ARCHIVE = "<!--{applet_url}-->" WIDTH = "600" HEIGHT = "450" NAME = "OctopusUploader" MAYSCRIPT = true>
<PARAM NAME = "type" VALUE="application/x-java-applet">
<PARAM NAME = "oid" VALUE="<!--{oid}-->">
<PARAM NAME = "redUrl" VALUE="<!--{red_url}-->">
<PARAM NAME = "lang" VALUE="<!--{lang}-->">
<PARAM NAME = "maxFileSize" VALUE="<!--{max_file_size}-->">
</APPLET>
-->
<!--"END_CONVERTED_APPLET"-->


Что мы видим? 
Закоментированный таг APPLET и таг OBJECT со встроенным в него EMBED.
Таким образом построенный таг идеально работает в IE, FF и подобных.

Ну вот вроде бы и всё. Развлекайтесь!!  smile 

Информация изначально взята с сайта Sun : http://java.sun.com/j2se/1.5.0/docs/guide/plugin/developer_guide/html_converter_more.html#running_gui


Автор: aliks 5.1.2009, 17:14
а я так и не понял, что такое Java Plug-in и чем он отличается от апплета...или это есть одно и тоже, просто по разному называется???

Автор: LSD 9.1.2009, 13:54
Цитата(aliks @  5.1.2009,  17:14 Найти цитируемый пост)
а я так и не понял, что такое Java Plug-in и чем он отличается от апплета...или это есть одно и тоже, просто по разному называется??? 

Для запуска апплета есть 2 возможности:

1. Использование тега applet. Этот способ хорош тем, что практически все браузеры его понимают. А плох тем, что он устарел и возможно в будущем перестанет поддерживаться, нельзя контролировать версию JRE на клиенте и установить ее при необходимости.

2. Использование тега object. Этот способ хорош тем, что можно указывать требуемую версию JRE и при ее отсутствии автоматически установить ее. Плюс есть возможность отлаживать апплеты в браузере. И по скольку этот тег используется для большинства внедренных объектов (типа того же Flash), то он гарантированно будет поддерживаться в будущем. Недостаток состоит в том, что этот тег по разному выглядит для разных браузеров.

Так вот Java plugin это плагин к браузеру который и отвечает за обработку тега object.

Автор: aliks 13.3.2009, 12:31
Спасибо за разжевывания вопроса smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)