Sb96664
.pdfцелых числа в окне консоли клиента. Данные числа отсылаются на сервер. Сервер выбирает максимальное число и отсылает его клиенту. Затем работа серверного и клиентского приложений завершается.
4.4. Содержание отчета
Отчет должен содержать: титульный лист; цель работы; основные теоретические положения; вариант задания; краткое описание выполнения работы, сопровождаемое рисунками; полученные результаты; выводы.
4.5.Контрольные вопросы
1.На основе какого протокола чаще всего осуществляется клиентсерверное взаимодействие?
2.Что такое сокет?
3.Что такое конечная точка?
4.Для чего используется примитив Bind?
5.По схеме взаимодействия клиента и сервера с использованием сокетов описать процесс, происходящий на стороне сервера.
5.РАЗРАБОТКА КЛИЕНТ-СЕРВЕРНОГО ПРИЛОЖЕНИЯ
СГРАФИЧЕСКИМ ПОЛЬЗОВАТЕЛЬСКИМ ИНТЕРФЕЙСОМ
Цель работы: изучение теоретического материала о платформе JavaFX и Сascading style sheets (CSS), формирование практических навыков разработки клиент-серверного Graphical User Interface (GUI) приложения с использованием сокетов на языке программирования Java.
5.1. Общие сведения
JavaFX – это платформа на базе Java, которая обеспечивает создание мощного GUI для кросс-платформенных многофункциональных клиентских приложений. Она содержит богатый набор элементов управления, графиче-
ский и медийный Application Programming Interface (API) с аппаратным уско-
рением графики. Последней версией JavaFX является JavaFX 8 [20], [21]. JavaFX API содержит более 30 пакетов: javafx.application, javafx.stage,
javafx.scene и др. Основная метафора, воплощаемая JavaFX, называется подмостками (stage). По аналогии с театром на подмостках ставится сцена (scene). Подмостки определяют некоторое пространство, а сцена – то, что происходит в данном пространстве. Таким образом, подмостки являются
31
контейнером для сцен, а сцена – контейнером для узлов, которые составляют данную сцену. Под узлами понимаются элементы GUI, например элементы управления или текст. Набор всех узлов в сцене создает граф сцены, который является деревом. Любое JavaFX-приложение имеет как минимум одни подмостки и одну сцену, включенную в данные подмостки. Подмостки и сцена инкапсулированы в JavaFX API посредством классов Stage и Scene соответственно. Любое JavaFX-приложение при запуске автоматически получает доступ к одним подмосткам. После создания сцены и добавления в нее элементов она устанавливается на подмостки [21], [22].
JavaFX-приложение должно наследоваться от класса Application, который упакован в javafx.application. Класс Application определяет три метода, которые могут быть переопределены, – init( ), start( ) и stop( ). Метод init( ) вызывается, когда приложение начинает выполняться и используется для осуществления различных инициализаций. Метод start( ) вызывается после метода init( ) и используется для создания и установки сцены. Когда приложение завершает работу, вызывается метод stop( ) [21], [22].
CSS – это язык, который используется для описания представления элементов GUI в приложении. Внешний вид JavaFX-приложений настраивается с использованием CSS, который предоставляет синтаксис для написания правил, устанавливающих визуальные свойства. Правило состоит из селектора и набора пар «свойство»–«значение». Селектор – это строка, которая идентифицирует элементы GUI, к которому применяются правила. Пара «свой- ство»–«значение» состоит из имени свойства и его значения, которые разделены двоеточием (:). Две пары «свойство»–«значение» разделены точкой с запятой (;). Набор пар «свойство»–«значение» заключается в фигурные скобки ({}), которым предшествует селектор [21], [23].
5.2. Задание
Разработать клиент-серверное GUI-приложение, используя сокеты, согласно номеру варианта из табл. 4.2 в п. 4.3. Пример внешнего вида приложения для вывода максимального числа представлен на рисунке.
Клиент-серверное приложение должно удовлетворять следующим требованиям:
1. Если в поля разрешено вводить только цифры, необходимо предусмотреть соответствующую проверку.
32
2. При успешном выполнении операции в клиентском приложении должно появляться уведомление с полученным результатом, а поля для ввода – очищаться от ранее введенных значений. Пользователь должен иметь возможность выполнять операции любое количество раз.
Клиент-серверное приложение для вывода максимального числа
Кроме того, необходимо предусмотреть, чтобы при закрытии серверного приложения в клиентском приложении появлялось уведомление о возникшей ситуации. Затем клиентское приложение должно закрываться. Аналогичные действия необходимо выполнить при закрытии клиентского приложения. Если клиентское приложение запущено раньше серверного приложения, то следует вывести сообщение об ошибке подключения к серверу. Затем клиентское приложение должно закрываться.
5.3. Порядок выполнения работы
Установить плагин JavaFX для Eclipse, выполнив следующие действия. Запустить Eclipse, в раскрывшемся списке меню Help выбрать Install New Software. В открывшемся окне нажать на Add. В поле Name ввести e(fx)clipse,
в поле Location – http://download.eclipse.org/efxclipse/updates-nightly/site/ (те-
кущей версией плагина является Eclipse e(fx)clipse 3.0.0, ссылка на сайте http://projects.eclipse.org/projects/technology.efxclipse/downloads). Нажать на
OK. В дереве устанавливаемых компонент отметить только элементы, соответствующие вашей версии: e(fx)clipse-IDE. Пройти через мастера установки и перезагрузить Eclipse после запроса [24].
33
Перед запуском JavaFX-приложения необходимо подключить JavaFX библиотеки времени исполнения. В Eclipse в раскрывающемся списке меню
Window выбрать Preferences и затем в появившемся окне – Java=>Installed JREs. Нажать на Add. В JRE type выбрать Standard VM и нажать на Next.
В поле JRE home указать путь к домашней директории Java (например,
C:\Program Files\Java\jdk1.8.0_121) и нажать на Finish. Сделать данный JDK
по умолчанию, поставив галочку на нем. Аналогичное действие выполнить в Compatible JREs, выбрав в дереве слева Java=>Installed JREs=>Execution Environments и затем JavaSE-1.8 в области справа от дерева.
В Eclipse выбрать File=>New=>Project=>JavaFX=>JavaFX Project. Ука-
зать имя проекта – Lab_5_JavaFX, нажать на Next и затем на Finish. Нажать правой кнопкой мыши на src и выбрать New=>Package. Задать имя пакета – ru.eltech.javafx.
5.3.1. Создание GUI-сервера
Щелкнуть правой кнопкой мыши на пакет ru.eltech.javafx и выбрать
New > Class. Задать имя класса – Server: package ru.eltech.javafx;
import javafx.*;
public class Server extends Application {
private final String WAITING_FOR_CONNECTION = "Server is waiting for connection...";
private final String SERVER_TITLE = "Server"; private final int GAP = 10;
private final int OFFSET = 25; private final int WIDTH = 350;
private final int HEIGHT_SCENE = 275; private final int HEIGHT_DIALOG = 100; private Text connectionWait;
public static void main(String[] args) { launch(args);
}
private void initialize(Stage stage) { stage.setTitle(SERVER_TITLE); final GridPane grid = new GridPane(); grid.setAlignment(Pos.CENTER);
34
grid.setHgap(GAP);
grid.setVgap(GAP);
grid.setPadding(new Insets(OFFSET, OFFSET, OFFSET, OFFSET)); connectionWait = new Text();
grid.add(connectionWait, 0, 0); connectionWait.setFill(Color.DARKBLUE); connectionWait.setText(WAITING_FOR_CONNECTION);
final Scene scene = new Scene(grid, WIDTH, HEIGHT_SCENE); scene.getStylesheets().add(Server.class.getResource("form_style.css"). toExternalForm());
stage.setScene(scene);
stage.show();
}
private void showAlertDialog(String title, String text, AlertType type) { final Alert alertDialog = new Alert(type); alertDialog.getDialogPane().setPrefSize(WIDTH, HEIGHT_DIALOG); alertDialog.setTitle(title);
alertDialog.setHeaderText(null);
alertDialog.setContentText(text);
alertDialog.showAndWait();
}
@Override
public void start(Stage stage) { initialize(stage);
}
5.3.2. Создание GUI-клиента
Щелкнуть правой кнопкой мыши на пакет ru.eltech.javafx и выбрать
New > Class. Задать имя класса – Client: package ru.eltech.javafx;
import javafx.*;
public class Client extends Application { private final String CLIENT_TITLE = "Client";
private final String SCENE_TITLE = "Calculate of the maximum number"; private final String FIRST_NUMBER_LABEL = "First Number:";
private final String SECOND_NUMBER_LABEL = "Second Number:";
35
private final String TOOLTIP_NUMBER_FORMAT = "Enter an integer number";
private final String BUTTON_LABEL = "Calculate"; private final int GAP = 10;
private final int OFFSET = 25; private final int WIDTH = 350;
private final int HEIGHT_SCENE = 275; private Button button;
TextField firstTextField; TextField secondTextField;
public static void main(String[] args) { launch(args);
}
private void initialize(Stage stage) { final GridPane grid = new GridPane(); grid.setAlignment(Pos.CENTER); grid.setHgap(GAP); grid.setVgap(GAP);
grid.setPadding(new Insets(OFFSET, OFFSET, OFFSET, OFFSET)); stage.setTitle(CLIENT_TITLE);
Text sceneTitle = new Text(SCENE_TITLE); sceneTitle.setFont(Font.font("Arial", FontWeight.BOLD, 14)); grid.add(sceneTitle, 0, 0, 2, 1);
Tooltip tooltipFormat = new Tooltip(); tooltipFormat.setText(TOOLTIP_NUMBER_FORMAT);
Label firstNumberLabel = new Label(FIRST_NUMBER_LABEL); grid.add(firstNumberLabel, 0, 2);
firstTextField = new TextField(); firstTextField.setTooltip(tooltipFormat); grid.add(firstTextField, 1, 2);
Label secondNumberLabel = new Label(SECOND_NUMBER_LABEL); grid.add(secondNumberLabel, 0, 3);
secondTextField = new TextField(); secondTextField.setTooltip(tooltipFormat); grid.add(secondTextField, 1, 3);
button = new Button(BUTTON_LABEL);
36
HBox hBox = new HBox(10); hBox.setAlignment(Pos.BOTTOM_RIGHT); hBox.getChildren().add(button); grid.add(hBox, 1, 4);
final Scene scene = new Scene(grid, WIDTH, HEIGHT_SCENE); scene.getStylesheets(). add(Client.class.getResource("form_style.css").toExternalForm()); stage.setScene(scene);
stage.show();
}
@Override
public void start(Stage stage) { initialize(stage);
} }
5.3.3.Создание css-файла
ВEclipse щелкнуть правой кнопкой мыши на пакет ru.eltech.javafx и выбрать New > File. Задать имя файла – style.css. Файл фона необходимо пред-
варительно сохранить в C:\Users\<User Name>\workspace\Lab_5_JavaFX
\bin\ru\eltech\javafx. Установка фонового изображения, стили надписей и кнопок представлены в файле style.css:
.root {
-fx-background-image: url("blue_background.jpg");
}
.label { -fx-font-size: 12px;
-fx-font-weight: bold; -fx-text-fill: #333333;
-fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 );
}
.button {
-fx-text-fill: #333333; -fx-font-weight: bold;
-fx-background-color: linear-gradient(#a0e6f2, #0ad0ea);
-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );
}
37
5.4. Содержание отчета
Отчет должен содержать: титульный лист; указание цели работы; основные теоретические положения; вариант задания; краткое описание выполнения работы, сопровождаемое рисунками; полученные результаты; выводы.
5.5.Контрольные вопросы
1.Что представляет собой JavaFX?
2.Что такое подмостки и сцена в терминах JavaFX?
3.Что такое узел в терминах JavaFX?
4.Дайте описание методам init(), start() и stop().
5.Что такое CSS?
6.РАЗРАБОТКА КЛИЕНТ-СЕРВЕРНОГО ПРИЛОЖЕНИЯ
СГРАФИЧЕСКИМ ПОЛЬЗОВАТЕЛЬСКИМ ИНТЕРФЕЙСОМ
ДЛЯ ДОСТУПА К БАЗЕ ДАННЫХ
Цель работы: изучение теоретического материала о встраиваемой библиотеке SQLite, формирование практических навыков разработки клиентсерверного GUI-приложения с использованием сокетов на языке программирования Java для доступа к базе данных (БД).
6.1. Общие сведения
SQLite – это встраиваемая библиотека, реализующая автономную, безсерверную, автоматически конфигурируемую, реляционную БД SQL-типа. Поскольку данная библиотека является встраиваемой, она не имеет отдельного процесса сервера. Иначе говоря, SQLite находится внутри приложения, которое обслуживает, – ее код встроен в программу. Таким образом, клиент и сервер работают вместе в одном и том же процессе. Преимуществами такого подхода являются уменьшение накладных расходов, связанных с сетевыми вызовами; облегчение администрирования БД и упрощение развертывания приложения. SQLite производит запись и чтение напрямую в файл на диске. БД в полном объеме, включая таблицы, индексы, триггеры и представления, помещается в один файл кроссплатформенного формата [25]–[27].
SQLite имеет компактный размер, а именно 500 Кб, с учетом всех активированных функций. Если дополнительные функции не используются, то размер будет ниже 300 Кб. SQLite работает в случаях минимального пространства стека (4 Кб) и очень маленькой кучи (100 Кб). Данный факт предо-
38
ставляет SQLite преимущество, когда речь идет о выборе БД для устройств с ограниченным объемом памяти, например мобильных телефонах [25].
SQLite предоставляет широкий спектр функций, к которым относят следующие. Во-первых, описанные в международном стандарте ANSI SQL-92 (большое подмножество, но не все): транзакции, представления, проверочные ограничения, внешние ключи, коррелированные подзапросы, сложные запросы и так далее. Во-вторых, имеющиеся в реляционных БД: триггеры, индексы, автоинкрементируемые столбцы и операторы LIMIT/OFFSET. В-третьих, считающиеся редкими или уникальными: БД, размещенные в памяти; динамическая типизация и разрешение конфликтов [26].
Код SQLite находится в открытом доступе, распространяется без лицензии и может быть использован как в частных, так и в коммерческих целях
[25]–[27].
6.2. Задание
Разработать клиент-серверное GUI-приложение с использованием сокетов для работы с БД согласно номеру варианта, представленному в таблице. В данном практическом задании следует опираться на реализацию клиентсерверного приложения из работы 5.
№ |
Тема |
Заголовки таблиц |
|
|||||
варианта |
|
|||||||
|
|
|
|
|
|
|
||
|
|
|
|
|
||||
1 |
Поставки стоечных серверов в уни- |
Стоечные |
серверы, |
университеты, |
||||
верситеты |
поставки |
|
|
|
|
|
||
|
|
|
|
|
|
|||
2 |
Источники бесперебойного питания в |
Источники |
бесперебойного |
пита- |
||||
стойках серверных комнат |
ния, стойки, серверные комнаты |
|||||||
|
||||||||
3 |
Поставки блейд-серверов в филиалы |
Блейд-серверы, |
филиалы |
банков, |
||||
банков |
поставки |
|
|
|
|
|
||
|
|
|
|
|
|
|||
4 |
Кондиционеры в серверных комнатах |
Кондиционеры, серверные комнаты, |
||||||
аварийные ситуации |
|
|
|
|||||
|
|
|
|
|
||||
|
Установка маршрутизаторов в жилых |
Маршрутизаторы, |
жилые |
дома, |
||||
5 |
установка |
(сведения о |
компании, |
|||||
домах |
||||||||
|
специалисте и сроках) |
|
|
|||||
|
|
|
|
|||||
6 |
IP-телефоны в здании администрации |
IP-телефоны, отделы, сотрудники |
||||||
города |
||||||||
|
|
|
|
|
|
|
||
7 |
Точки доступа Wi-Fi в городских |
Точки доступа |
Wi-Fi, |
городские |
||||
парках |
парки, обслуживающие компании |
|||||||
|
||||||||
8 |
Установка коммутаторов в офисе |
Коммутаторы, |
офисы, |
установка |
||||
(сведения о специалисте и сроках) |
||||||||
|
|
|||||||
|
Доставка IP-камер видеонаблюдения |
IP-камеры видеонаблюдения, вокза- |
||||||
9 |
лы, доставка (сведения об автомо- |
|||||||
на вокзалы |
||||||||
|
биле компании и сроках) |
|
|
|||||
|
|
|
|
39
|
|
|
Окончание таблицы |
||
|
|
|
|
|
|
№ |
Тема |
|
Заголовки таблиц |
||
варианта |
|
||||
|
|
|
|
||
10 |
Системы видеоконференцсвязи в те- |
Системы видеоконференцсвязи, те- |
|||
левизионных студиях |
левизионная студия, телеканалы |
||||
|
|||||
|
Установка систем телеприсутствия |
Системы |
телеприсутствия, конфе- |
||
11 |
ренц-залы, установка |
(сведения о |
|||
для конференц-залов |
|||||
|
компании, специалисте и сроках) |
||||
|
|
||||
12 |
Поставки систем хранения данных на |
Системы |
хранения, |
предприятия, |
|
предприятия |
поставки |
|
|
||
|
|
|
БД создается с использованием визуального инструмента DB Browser for SQLite. Она должна содержать три таблицы, в каждой из которых должен быть столбец с ограничением PRIMARY KEY. В одной из таблиц необходимо создать несколько столбцов с ограничением FOREIGN KEY. Количество столбцов в каждой таблице должно быть не менее трех, количество используемых типов данных – не менее двух.
В GUI серверного приложения осуществляется просмотр содержимого таблиц из БД. Каждая таблица представлена на отдельной вкладке. В GUI клиентского приложения осуществляется ввод значения одного из столбцов таблицы и вывод полученного значения из другого столбца данной таблицы при нажатии на кнопку. Очистка полей от введенных значений должна осуществляться при нажатии на кнопку. Поле вывода значения и кнопка очистки полей должны быть заблокированы до получения данных. Поле ввода и вывода значений должны быть нередактируемыми после вывода значения, кнопка получения значения должна быть заблокирована, кнопка очистки полей – разблокирована. После очистки поле ввода и кнопка получения значения разблокированы, поле вывода и кнопка очистки полей – заблокированы.
Клиент-серверное приложение должно удовлетворять требованиям, которые сформулированы в 5.3 (за исключением п. 2). Если значение в таблице не найдено, в клиентском приложении должно появляться сообщение об этом. Все запросы к БД осуществляются в серверном приложении.
6.3. Порядок выполнения работы
Скачать последнюю версию DB Browser for SQLite с сайта http://sqlitebrowser.org/. В Eclipse выбрать пункт меню File=>New=>Project=>JavaFX=>JavaFX Project. Указать имя проекта – Lab_6_ DB, нажать на Next и затем на Finish. Нажать правой кнопкой мыши на src и выбрать New=>Package. Задать имя нового пакета – ru.eltech.db.
40