Подписаться на получение новых статей на почту:

Апплет. Преобразовываем приложение. Основы и ошибки. Шаг №55

Всем привет. В прошлой статье мы с Вами рассмотрели более менее законченное Java -приложение с интегрированной базой данных на движке SQLite.  Данные, последней, мы организовали с контроллера сбора данных в симуляторе Proteus. Попробуем переделать приложение в апплет, рассмотрим что это, с чем его «едят», произведем запуск в браузере и др. Вот этим мы с Вами сегодня и займемся.

Как  вступление хочется сказать, что на сегодняшний день данная технология не популярна. Причин много, основная это то, что плагин java почти не поддерживается браузерами. Историю данного конфликта Вы можете найти в Википедии. Но все же в личных разработках, а также для понимания основ данной технологии будет нелишне вооружится дополнительными знаниями.  К тому же, выходят новые версии java-плагина. О апплете пишут в новых книгах. Так что пока он еще живет. Итак вкратце что же такое апплет?  Это прикладная java-программа в форме байт кода, которая выполняется в браузере с помощью JVM или AppletViewer (для испытания). Апплет был придуман в помощь HTML, для интерактивных возможностей. Сам апплет это байт-код, который браузер загружает с веб-сервера. Вкратце все. Теперь ниже мы рассмотрим переделку приложения в апплет, как его вставить в HTML-страницу и какие теги для этого использовать.

Итак, друзья, ниже приведены основные пункты для преобразования:
— Создание HTML страницы для загрузки апплета;
— Определить подкласс класса JApplet /Applet, вместо JFrame. Доступ public;
— Инициализацию перенести из конструктора окон фрейма в метод апплета init ();
— Удалить метод setSize (). Размеры задаются в HTML-форматах width () и height ();
— Удалить метод закрытия окна, т.к. апплет нельзя закрыть. Завершение работы происходит с закрытием браузера;
— Удалить вызов метода setTitle – апплеты не имеют заголовков;
— Удалить метод setVisible – апплеты отображаются автоматически

Все, общие рекомендации закончились – переходим к практике. Попробуем переделать код из статьи №51(без чтения COM-порта). Я переимининовал файл readLog.java в MyApplet.java+ 2 файла, они не меняются. Ниже код:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JApplet;
 import javax.swing.JScrollPane;
import javax.swing.JTable;

public class MyApplet extends JApplet{ 
       public void init (){
             JTable table;
             modelMySQL model;
             conMySQL baza; /*Создаем объект базы*/
             String bufer = «\0»;
             Button myButton = new Button («Мониторинг»);
             final Label myLabel = new Label («Данные логгера»);
             add (myLabel, BorderLayout.NORTH);
             add (myButton, BorderLayout.SOUTH);
             baza = new conMySQL («com.mysql.jdbc.Driver», «jdbc:mysql://127.0.0.1:3306/logger», «root», «root»);
             model = new modelMySQL ();
             model.setTableData (baza.getNomen («SELECT * FROM log»));
             table = new JTable (model);
             add (new JScrollPane (table), BorderLayout.CENTER);
             table.getColumnModel ().getColumn (2).setMaxWidth (50);
             myButton.addActionListener (new ActionListener () {
                     @Override
                     public void actionPerformed (ActionEvent e) {
                                myLabel.setText (System.getProperty («java.vm.version»));
                                System.getProperty («java.vm.version»);
                     }   /*Выводим версию JVM по нажатию на кнопку*/
              });
        }
 }

Как видите здесь мы выполнили общие рекомендации, можете сравнить коды. Давайте для начала попробуем запустить в Eclipse как Applet. Ниже результат с загруженными даными базы.

Апплет в Eclipse

Теперь попробуем запустить в браузере. Для этого скомпилированный файл MyApplet.class и нами созданный MyApplet.html (создаем как текстовый файл и сохраняем с расширением .html ) должны находится в одной папке (что б не путаться).+ библиотека mysql-connector-java-5.1.38-bin. На рисунке ниже файлы размещенРазмещение файла апплетаные в папке.

 

 

Итак в файле MyApplet.html напишем следующий код:
<applet code="MyApplet.class" archive="mysql-connector-java-5.1.38-bin.jar" codebase="." width=400 height=300></applet>
Где <applet></applet>  -  тег , который вставляет класс в страницу.
!!!!!Хочется сказать, что на сегодняшний день данный тег не поддерживается в html5,необходимо использовать  <object> или <embed>.
Параметр codebase задает директорию, где лежит класс. Мы могли и не указывать его, по умолчанию считается , что класс расположен там же где и .html.
Width и height – размеры окна.
Archive – файл библиотеки с которым работаем.
Вроде бы все. Бери и запускай! А не тут то было. Здесь мы сталкиваемся с агрессивной политикой безопасности по отношению к апплету, не только со стороны браузеров, но и со стороны самого плагина java.  Если мы попробуем запустить в браузере файл, то получим следующие сообщениеБлокирование апплета:

Нам необходимо уведомить плагин о размещении безопасного апплета. Для чего вызывается программа Java ее панель Control Panel и в закладке Security выбираем  Edit Site List, где у нас откроется окошко, где нажимаем на кнопочку Add и добавляем путь к расположению безопасного апплета (file:/// далее путь). Как на рисунке ниже.Добавление безопасного апплета

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

 

Предупреждение запуска апплета

Да был большой соблазн в качестве эксперимента подтянуть данные из базы в апплет. Естественно чисто из любопытства. Т.к. такой метод не рекомендуется в плане безопасности.  Но все же были произведены разные попытки подключения к базе данных. В итоге после подписания апплета как доверенного, добавления информации в java.policy, изменения информации в файле manifest в jar архиве нашей библиотеки результат свелся от  того что сначала апплет не находил базу данных рис ниже слева к следующем увиду на рисунке ниже справа, где выводится следующая строка CacheEntry[file:/C:/Documents%20and%20Settings/…………/MyAppletMySQL/bin/mysql-connector-java-5.1.38-bin.jar]: updateAvailable=true,lastModified=Wed Feb 10 01:22:41 EET 2016,length=983960Апплет - отсутствие драйвераАпплет - CacheEntry

 

 

 

 

 

На этом интерес исчерпался. Несколько слов о проделанных попытках. Для того что б апплет увидел драйвер необходимо было внести изменения в SocketPermissions в файле \lib\security\java.policy, для того что бы апплет имел возможность без препятствий конектится к бд через указанный порт. Где java.policy – файл для предотвращения вывода предупреждений, где прописан производитель ПО и апплет якобы получает права. Но этого не произошло. Также была произведена подпись архива. На рисунке выше где расположены файлы в папке Вы можете увидеть файл .keystore – это и есть подпись. Ниже строки которые были добавлены в файл:
keystore"file:C:/DocumentsandSettings/Администратор/Рабочий стол/Рабочая папка/Контроллер сбора данных ПОJAVA/ПО/программа/MyAppletMySQL/bin/.keystore";
permission java.net.SocketPermission "127.0.0.1:3306", "connect,resolve", signedBy "Log";

Также добавил драйвер к серверу БД в каталог Java_home\lib\ext\. После этого вроде как драйвер нашелся. Ну и последнее сообщение при запуске в консоли выводилось сообщение Missing Application-Name manifest attribute for: file:/C:/Documents and Settings/Администратор/Рабочий стол/Рабочая папка/Контроллер сбора данных ПО JAVA/ПО/программа/MyAppletMySQL/bin/mysql-connector-java-5.1.38-bin.jar. Что говорит о том, что в архиве в файле манифест не хватает информации. Добавим  Application-Name: JDBC. Рисунок нижеФайл manifest.

Все. На этом подбиваем итог. Выше были рассмотрены основы переделки приложения в апплет, также вопросы безопасности, попытка подтянуть базу данных и варианты решения данной задачи. Рассмотрели способ интерактивности веб-ресурса с помощью апплета, где можно сделать вывод что на сегодняшний день данная технология теряет свою значимость. Но знания ни когда ни бывают лишними. Все на этом мы закончили с апплетами, и пока с приложением на стороне компьютера, к нему вернемся по позже. Также добавлю, что альтернатив на сегодняшний день куча, например html5, java script, dhtml, Microsoft Silverlight, Adobe flash, Java WebStart и многое др. Чем займемся далее? Давайте вспомним в статье 31, где мы спланировали проектирование контроллера без внимание остался последний пункт, а именно подключение телефона и передачу данных через GSM. Его мы пока заменим на wi-fi-модуль.  Так вот попробуем передать информацию с помощью него, написать небольшой веб-интерфейс под контроллер сбора данных. Начнем знакомится с технологией Интернет вещей (IoT). Что ж  на этом сегодня и остановимся. Всем пока.

Просмотрено 1492 раз.

Я на Google+

Добавить комментарий

Ваш e-mail не будет опубликован.

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe without commenting