Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Sb96664

.pdf
Скачиваний:
3
Добавлен:
13.02.2021
Размер:
1.08 Mб
Скачать

целых числа в окне консоли клиента. Данные числа отсылаются на сервер. Сервер выбирает максимальное число и отсылает его клиенту. Затем работа серверного и клиентского приложений завершается.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]