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

ЕВ-4791

.pdf
Скачиваний:
26
Добавлен:
07.03.2016
Размер:
3 Мб
Скачать

Функціональна модель

Функціональна модель складається з набору діаграм потоку даних, які показують потоки значень від зовнішніх входів через операції та внутрішні сховища даних до зовнішніх відходів. Функціональна модель описує зміст операції об’єктної моделі та дії динамічної моделі. Функціональна модель зображена на рис. 17.3.

Співробітник

Інтерфейс

Програма

База даних

Заява про

взяття на роботу

Вибірка всіх викладачів

Запит про інформацію

Видача на екран

Вводданих для забезпечення предметів

 

Вводданих

Внесення даних до БД

Видача

 

Запит до БД

довідкової

 

 

інформації

Дані додано до БД

 

 

 

Рис.17.3. Функціональна модель задачі

Формування бази даних

Для роботи з базою даних було обрано СУБД Firebird. — компактну, кро-платформну, вільну реляційну систему управління базами даних, що реалізує більшість функцій ANSI SQL 2003. Вона може запускатися на більшості Unix-систем (у тому числі Linux та FreeBSD) та Windows. Firebird спеціально спроектоване таким чином, щоб задовольняти вимоги «атомарності, несуперечності, ізоляції й довговічності» транзакцій. Проте в даному випадку вона обрана через те, що Firebird повністю підтримує стандарт SQL-92 та реалізує більшу частину стандартів SQL-99 i SQL-2003. Сюди входять вирази DML/DDL, об’єднання запитів, вирази

UNION, DISTINCT, підзапити (IN, EXISTS), агрегатні функції (AVG, SUM, MIN, MAX, LIST (починаючи з версії 2.1)), вбудовані функції (ABS, CEIL, REPLACE, GEN_UUID тощо), обмеження цілісності (PRIMARY KEY, UNIQUE, FOREIGN KEY), та всі загальні типи даних SQL. Головне робоче вікно зображено на рис.17.4.

Рис. 17.4. Головне робоче вікно

131

Для з’єднання з базою даних використовують jdbc-драйвер, що його постачають розроб-

ники СУБД firebird.

Опрацювання запитів

За допомогою запитів до бази даних інтерфейсна частина програмного комплексу забезпечується інформацією, необхідною для роботи з програмним продуктом та аналізу.

Запити на вибірку даних:

String query_string = new String("SELECT a.ID_SHED, b.ID_SPEC, b.COURSE, d.NAME_DIS, c.NAME_LECT " +"FROM schedule a "+"join groups b on a.id_group = b.id_group "+

"join lecturers c on a.id_lect = c.id_lect "+"join discipline d on a.id_dis = d.id_dis ");

String query_string = new String("SELECT a.ID_DIS, a.NAME_DIS "+"FROM DISCIPLINE a");

String query_string = new String("SELECT a.ID_LECT, b.NAME_DEP, a.NAME_LECT "+ "FROM LECTURERS a join DEPARTMENT b on a.ID_DEP = b.ID_DEP ");

String query_string = new String("SELECT a.ID_GROUP, a.ID_SPEC, a.COURSE FROM GROUPS a");

Запит не вставку даних:

String query_string = new String("INSERT INTO SCHEDULE (ID_SHED, ID_GROUP, ID_DIS, ID_LECT) "+

" VALUES ("+textField.getText()+", "+textField_1.getText()+", "+textField_2.getText()+", "+textField_3.getText()+")");

Інтерфейс та робоча програма

Інтерфейсна частина є однією із найважливіших частин при проектуванні програмного продукту, оскільки від нього залежить зручність користування кінцевим користувачем.

В даному випадку інфтерфейс складається з трьох вікон: головного меню, вікна перегляду бази даних та вікна з інформацією про програму.

Запуск програми відбувається за допомогою файла головного класу. Після записку отримуємо вікно (рис. 17.5).

Рис.17.5. Головне вікно інтерфейсу

Це вікно є стартовим і, як можна побачити, в цьому вікні відображено назву прогами, дві головні кнопки, а також ідентифікатор стану підключення до бази даних.

Вікно перегляду бази даних викладачів викликається з меню кнопкою «База даних викладачів», у ньому зображені кнопки доступу до довідників, а також повний перелік курсів і спеціальностей, те, які викладачі за ними закріплені, а також є поля введення даних, за допомогою яких виконується забезпечення дисципліни штатними викладачами (рис.17.6).

132

Рис.17.6. База даних викладачів

Якщо заповнити поля на формі і натиснути кнопку Додати, то можна закріпити за групою ще одного викладача:

Продовження. Рис.17.6. База даних викладачів

Продовження. Рис.17.6. База даних викладачів

133

Довідники виглядають та виводяться на екран наступним чином:

Продовження. Рис.17.6. База даних викладачів

Продовження. Рис.17.6. База даних викладачів

Продовження. Рис.17.6. База даних викладачів

134

Друге вікно, яке викликається із меню, — це вікно інформації про програму та автора створеного програмного продукту:

Закінчення. Рис.17.6. База даних викладачів

Рекомендована література [6; 7; 10-14].

135

Тема 18. ЗАСОБИ ПРОГРАМУВАННЯ СЕРВЛЕТІВ І JSP

Вивчивши матеріал теми, студенти знатимуть:

зовнішні та внутрішні прояви сервлетів;

характеристики простого сервлета;

яким чином відбувається опрацювання сеансів;

технологію серверних сторінок Java (JSP);

елементи сценаріїв сторінок JSP;

директиви сторінок JSP;

процеси витягування полів та значень HTML-форм. Вивчення матеріалу теми допоможе студентам:

використовувати класи Cooke, Session;

запускати сервлети;

формувати сторінки JSP і маніпулювати сеансами;

залучати стандартні вбудовані об’єкти JSP;

використовувати параметри і області бачення сторінок JSP;

створювати і модифікувати файли cooke.

18.1.Навчальні завдання для виконання практичної роботи

Мета роботи: закріпити теоретичні погляди на фундаментальні механізми програмування сервлетів і визначати їхню практичну доцільність.

План

1.Перший сервлет: побудова сторінки HTML.

2.Сервлети: опрацювання параметрів форми.

3.Елементи Cooke.

4.Процеси відстежування сеансів.

5.Генерування документів у формі із сервлета.

6.Інтеграція HTML із Java: JSP.

7.Використання сервлетів у JSP.

8.Оптимізація коду JSP за допомогою компонента JavaBean.

18.2.Завдання і технологія виконання лабораторної роботи Лабораторна робота

«Створення і використання сервлетів у клієнтських додатках»

Мета роботи. Поглибити знання і закріпити вміння:

класифікувати вхідні та вихідні потоки даних у сервлетах;

аналізувати взаємодію подій у сервлетах;

виявити недоліки і можливости класів обпрацювання сеансів;

запускати приклади-сервлети;

формувати серверні сторінки Java.

Шляхи досягнення мети

1.Провести десятихвилинне опитування, з’ясувати рівень засвоєння студентами термінів

іпонять цієї теми.

2.Розробити фрагмент сервлета для конкретної прикладної задачі.

3.Проаналізувати виконання запропонованого викладачем сервлета.

4.Скласти звіт з лабораторної роботи і захистити його.

Інформаційне забезпечення

1.Перелік завдань для виконання лабораторної роботи.

2.Серверне програмне середовище.

136

Приклад завдання для виконання лабораторної роботи

(Реалізація нагляду за сеансами за допомогою бібліотеки сервлетів) import java.io.*;

import java.util.*; import java.servlet.*; import java.servlet.http.*;

public class SessionPeek extends HttpServlet { public void service (HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

//Отримуємо об’єкт-сеанс перед відправкою

//відповіді клієнту

HttpSession session=req.getSession(); res.setContentType(“text/html”); PrintWriter out=res.getWriter();

out.println(“<HEAD><TITLE> Приклад SessionPeek”); out.println(“ </TITLE></HEAD><BODY>”); out.println(“<h1> Приклад SessionPeek </h1>”);

// Простий лічильник відвідувань для цього сеансу

Integer ival =(Integer) session.getAttribute(“sesspeek.cntr”);

if (ival==null)

ival = new Integer(1);

else

ival = new Integer(ival.intValue() +1); session.getAttribute(“sesspeek.cntr”, ival); out.println(“Ви відвідали цю сторінку <b>” + ival + “</b> разів.<p>”);

out.println(“<h2>”) ;

out.println (“Збережені дані сеансу < h2>”); // Зміщуємося за всіма даними цього сеансу

Enumeration sesNames =

session.getAttributeNames();

while (sesNames.hasMoreElements()) {

String name = sesNames.nextElement().toString();

Object value = session.getAttribute(name);

out.println (name + “ = ” +

value + “<br>” );

}

 

out.println (“<h3> Статистика сеансу < /h3>”);

out.println (“Ідентифікатор сеансу : ”

+ session.getId() + “<br>”);

out.println (“Новий сеанс:

+ session.isNew() + “<br>”);

out.println (“Час створення: “ + session.getCreationTime());

out.println (“<I>(“ +

new Date(session.getCreationTime()) + ”)</I><br>”) ;

out.println (“Час останнього доступу: ” + session.getLastAccessedTime());

out.println (“<I>(“ +

new Date(session.getLastAccessedTime()) + ”)</I><br>”) ;

) ;

out.println (“Інтервал бездії сеансу: ” + session.getMaxInactiveInterval());

out.println (“Ідентифікатор сеансу в запиті: “ + req.getRequestedSessionId() + < br>”) ;

out.println (“Ідентифікатор отриманий із cookie: “

137

+ req.isRequestedSessionIdFromCookie() + “< br>”);

out.println (“Ідентифікатор, який отриманий з URL: “ + req.isRequestedSessionIdFromURL() + “< br>”);

out.println (“Правільний ідентифікатор сеансу: “ + req.isRequestedSessionIdValid() + “< br>”);

out.println (“< /BODY>”);

out.close ();

 

}

getServletInfo() {

public String

return

“Сервлет, що спостерігає за сеансом”;

}

 

}

 

Методичні вказівки до виконання лабораторної роботи

Уметоді service() викликається метод getSession() об’єкта-запиту, який повертає об’єктсеанс Session, що асоційований із цим запитом. Об’єкт Session не передається мережею; замість цього він зберігається на сервері та зв’язується з клієнтами і його запитами.

Уметоді getSession() є дві форми: одна без параметрів і друга — getSession(boolean). Виклик getSession(true) — це те саме, що й виклик простої форми методу getSession(). Параметр Boolean вказує тільки на створення об’єкта-сеансу, якщо його не існує.

Об’єкт-сеанс Session повідомить дані про клієнта, зібрані впродовж попередніх сеансів. Якщо об’єкт-сеанс новий, програма починає збирання інформації про клієнта та його дії. Збирання інформації виконують методи setAttribute() і getAttribute() об’єкта-сеансу java.lang.Object getAttribute(java.lang.String) void setAttribute(java.lang.String name, java.lang.Object value).

Об’єкт-сеанс Session використовує для завантаження інформації прості пари «ключзначення». Ключем є рядок String, а значенням буде будь-який об’єкт, успадкований від класу Object. Сервлет SessionPeek слідкує за кількістю повернень на сторінку під час свого перебування на сайті. Для цього використовується об’єкт — ціле число Integer з іменем sesspeek.cntr. Якщо ім’я відсутнє в списку, створюється новий об’єкт Integer із початковим значенням 1. В іншому випадку значення об’єкта Integer збільшується на 1. Лічильник з новим значенням розміщується в об’єкт-сеанс Session.

Метод setAttributeNames() стисло пов’язаний із методами getAttribute() і setAttribute(); він повертає послідовність імен-ключів для тих об’єктів, які приєднані до об’єкта Session. Цикл while у класі SessionPeek демонструє використання цього методу.

18.3.Завдання для опрацювання самостійної роботи

Навчальні завдання

Створити сервер, який запитує пароль, потім відкриває файл і пересилає клієнтові зміст файла, використовуючи мережеве з’єднання. Створити клієнта, який приєднається до цього сервера, передасть йому пароль, а потім отримує і зберігає файл. Виконати тестування пари програм на власній машині, використовуючи локальну IP-адресу.

1.Модифікувати сервер із вправи 2 так, щоб він використовував багатозадачність для опрацювання кількох клієнтів одночасно.

2.Створити сервлет, який додає до об’єкта-відповіді файл cooke. До сервлета додати код, який отримує і відображає зміст файла cooke на екрані. Якщо контейнер сервлетів відсутній, необхідно завантажити, встановити і запустити сервер Tomcat з сайта jakarta.apache.org.

3.Створити сервлет, який використовує об’єкт-Session для зберігання певної інформації про сеанс. У цьому самому сервлеті отримати і вивести на екран збережену інформацію про сеанс. Якщо контейнер сервлетів відсутній, треба завантажити, встановити і запустити сер-

вер Tomcat із сайта jakarta.apache.org.

4.Створити сервлет, який змінює інтервал без дії сеансу і методом getMaxInactiveInterval() встановлює його рівним 5 секундам. Протестувати сервлет і переконатися, що після 5 секунд сеанс стає недійсним.

5.Створити серверну сторінку JSP, яка роздруковує на екрані рядок тексту за допомогою тегу заголовка <H1>. Встановити колір цього тексту випадковим чином за допомогою вбудованої в JSP сторінки Java-коду.

138

6.Змінити максимальний вік у сторінці Cookies.jsp та переглянути за допомогою двох різних браузерів події, що відбуваються. Зафіксувати різницю між простим повторним переглядом сторінки і закриттям вікна браузера із повторним запуском.

7.Створити серверну сторінку JSP з полем, яке дає користувачеві змогу ввести час, упродовж якого сеанс буде дійсним, і з другим полем, яке зберігає дані, розташовані в сеансі. Кнопка «Оновити» оновлює сторінку, отримує поточний час дії сеансу і дані сеансу та розміщує ці дані у названі вище поля.

Рекомендована література [7,8,11-15].

139

Тема 19. МЕРЕЖЕВІ КЛІЄНТИ: СОКЕТИ, АПЛЕТИ ТА WEB-КЛІЄНТИ

Вивчивши матеріал теми, студенти знатимуть:

особливості прояву мережевих клієнтів;

визначення і опрацювання мережевих помилок ;

які параметри використовують при пошуку мережевих адрес;

технологію опрацювання викликів;

шляхи формування інформації про об’єкти;

механізм підтримки багатьох клієнтів;

процеси інтерактивного обміну повідомленями. Вивчення матеріалу теми допоможе студентам:

упроваджувати технології Java у web-сторінки;

програмувати аплети;

зв’язувати сервер із хостом аплета;

змушувати аплет показувати документ і запускати сценарій CGI.

19.1.Навчальні завдання для виконання практичної роботи

Мета роботи: закріпити практичні навички використання мережевих технології клієнтсервер.

План

1.Зв’язок із сервером.

2.Пошук мережевих адрес.

3.Опрацювання мережевих помилок.

4.Читання та запис текстових та двоїстих даних.

5.Читання та запис даних, перетворених на послідовну форму.

6.Дейтаграми UDP.

7.Програма: клієнт TFTP UDP.

8.Програма: клієнт Telnet.

9.Програма: клієнт для інтерактивного обміну повідомленнями.

19.2.Завдання для опрацювання самостійної роботи

Виконати навчальні самостійні завдання, дати коментар щодо кожного прикладу.

Приклад 1. Отримання ІР-адреси, коли ви підключені до Інтернету: import java.net.*;

public class WhoAmI {

public static void main (String [] args) throws Exeption {

if (args.length !=1) { System.err.println(

“Використання: WhoAmI Ім’я машини”); System.exit(1);

}

InetAddress a = InetAddress.getByName(args[0]); System.out.println(a);

}

}

Приклад 2. Простий сервер, який відображає те, що надсилає йому клієнт: import java.io.*;

import java.net.*;

public class JabberServer {

public static final int PORT =8080;

140