logo
Методичка Java

Апплеты

Напомним некоторые вещи, о которых рассказывалось в первой главе.

Апплет – это специализированная программа Java с ограниченными возможностями, работающая в окне WWW-документа под управлением браузера. Как правило, апплеты встраивают в HTML-документы (наиболее распространённый вид WWW-документов).

Между приложениями (applications) и апплетами (applets) Java имеется принципиальное различие: приложение запускается непосредственно с компьютера пользователя и имеет доступ ко всем ресурсам компьютера наравне с любыми другими программами. Апплет же загружается из WWW с постороннего сервера, причём из-за самой идеологии WWW сайт, с которого загружен апплет, в общем случае не может быть признан надёжным. А вот сам апплет имеет возможность передавать данные на любой сервер в WWW – всё зависит от алгоритма, заложенного создателем апплета. Поэтому для того, чтобы избежать риска утечки конфиденциальной информации с компьютера пользователя или совершения враждебных действий, у апплетов убраны многие возможности, имеющиеся у приложений.

Поддержка работы с апплетами осуществляется стандартной библиотекой классов (core library), расположенной в пакете java.applet для обычных апплетов, а также классом javax.swing.JApplet для апплетов, использующих компоненты Swing и/или библиотеку Sun JFC (Java Foundation Classes).

Для создания обычного апплета требуется задать класс, являющийся наследником класса java.applet.Applet, который сам является наследником класса java.awt.Panel.

В классе апплета требуется переопределить ряд методов:

public class Applet1 extends java.applet.Applet{

public void init(){

//Инициализация перед началом работы.

//Вызывается один раз после загрузки апплета

//перед первым выполнением метода start()

}

public void start(){

//Обеспечивает основную функциональность аплета.

//В первый раз вызывается после загрузки апплета

//и его инициализации методом init().

//Затем вызывается каждый раз при заходе пользователя

//на HTML-страницу с апплетом.

}

public void update(java.awt.Graphics g){

//Форсирование перерисовки апплета с выполнением кода метода

}

public void paint(java.awt.Graphics g){

//Исполняется каждый раз при перерисовке апплета.

//Обеспечивает всю визуализацию в апплете

}

public String getAppletInfo(){

return "Справочная информация об апплете";

}

public void stop(){

//Приостанавливает выполнение апплета.

//Исполняется каждый раз сразу после того, когда пользователь

//покидает HTML-страницу с апплетом.

}

public void destroy(){

//Обычно не требует переопределения.

//Предназначен для высвобождения ресурсов, захваченных апплетами.

//Исполняется через негарантированный промежуток времени

//каждый раз после вызова метода stop()

//перед разрушением объекта апплета сборщиком мусора.

}

}

Кроме методов, нуждающихся в переопределении, в классе Applet имеется некоторое количество методов, позволяющих проверять и задавать его состояние во время выполнения:

getSize() – возвращает размер апплета. Ширину и высоту можно получить как getSize().width и getSize().height

showStatus(String s) – показ в строке статуса браузера сообщения s.

AppletContext getAppletContext() – получение апплетом информации об документе, из которого был вызван апплет, а также о других апплетах того же документа.

add(Component comp) – добавление компонента в апплет.

AudioClip getAudioClip(URL url) - получение апплетом аудиоклипа по заданному WWW-адресу url. Создаётся объект Java, ссылающийся на данный аудиоклип.

URL getDocumentBase() - получение апплетом адреса WWW-документа, из которого был вызван апплет.

Имеется большое количество других методов для работы с апплетами, большинство которых унаследовано от класса Panel.

Ряд примеров апплетов с исходными кодами приведён в JDK в папке demo/applets.

Пример апплета:

import java.awt.*;

public class Applet1 extends java.applet.Applet{

public void paint(java.awt.Graphics g){

g.setColor(Color.green);

g.fillRect(0,0,getSize().width - 1, getSize().height - 1);

g.setColor(Color.black);

g.drawString("Вас приветствует апплет!",20,20);

this.showStatus("Это пример апплета");

}

}

Пример HTML-документа, в который встроен апплет:

<html>

<body>

Это пример апплета<p>

<object

codebase="."

code="Applet1.class"

width=200

height=150

>

Альтернативный текст, который будет виден в браузерах, не поддерживающих

работу с апплетами

</object>

Если данный HTML-документ имеет имя example.html, то для запуска апплета следует расположить файл Applet1.class в той же папке, что и example.html. После чего открыть в браузере файл example.html. Обычно проще всего это сделать двойным щелчком мыши по имени файла в окне навигации по файлам и папкам.

Если в открывшемся окне браузера апплет не будет показан, его можно просмотреть в программе appletviewer. Для этого надо перейти в папку с файлами example.html и Applet1.class, и запустить appletviewer с параметром example.html. Например, для Windows® в командной строке надо набрать

appletviewer.exe example.html

Замечание: на домашнем компьютере с Windows XP SP1 и браузером MS Internet Explorer 6.0 автору не удалось запустить ни одного апплета, в том числе из примеров JDK. Хотя поддержка Java была включена, и автор пытался менять самые разные установки системы. Но в appletviewer всё работало. Это является хорошей иллюстрацией того, почему крупные фирмы предпочитают при работе в сетях использовать не апплеты, а заниматься обработкой со стороны сервера и отсылать результаты на компьютер клиента в готовом виде. Ведь у клиентов, работающих в WWW, могут быть компьютеры с различными версиями JDK, операционными системами и браузерами. И гарантировать работоспособность одного и того же апплета в таком разнообразном окружении практически невозможно. Если же обработка идёт со стороны сервера, всё упрощается. Со стороны клиента нужен только браузер, работающий со ставшими совершенно стандартными языками HTML и JavaScript (после версии HTML 4.01 и JavaScript 1.3 они перестали изменяться). Браузер передаёт запрос с клиентского компьютера на сервер, и там формируется новый HTML-документ для клиентского компьютера, при необходимости – со сформированными на сервере графическими файлами.

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