Опубликован: 04.12.2009 | Доступ: свободный | Студентов: 8414 / 657 | Оценка: 4.30 / 3.87 | Длительность: 27:27:00
Лекция 10:

Введение в сетевое программирование

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >

10.2. Апплеты

Напомним некоторые вещи, о которых рассказывалось в "Общие представления о языке 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 устанавливается на сервере, и проводятся все необходимые настройки и тестирования. После чего вместо старой версии системы наружу показывается новая.

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >
Полетаев Дмитрий
Полетаев Дмитрий
Не очень понятно про оболочечные Данные,ячейки памяти могут наверно размер менять,какое это значение те же операции только ячейки больше,по скорости тоже самое
Максим Старостин
Максим Старостин

Код с перемещением фигур не стирает старую фигуру, а просто рисует новую в новом месте. Точку, круг.