ЛАБОРАТОРНАЯ РАБОТА 4

ПРОГРАММИРОВАНИЕ И ИСПОЛЬЗОВАНИЕ

XML WEB-СЕРВИСОВ

1. Цель работы

Целью работы является изучение программирования поставщиков и клиентов Web-сервисов.

2. Задачи

Задачами лабораторной работы являются овладение навыками программирования Web-сервисов на различных платформах, построения WSDL-описаний сервисов в автоматизированном режиме, разработки приложений, использующих веб-сервисы в качестве поставщиков данных.

3. Теоретическая часть

Веб-сервисы. Наиболее просто веб-сервис представить как интерфейс в глобальную сеть для некоторого абстрактного программного обеспечения. Этот интерфейс позволяет фактически абсолютно прозрачно выполнять какие-то функции, возложенные на это программное обеспечение на удаленном компьютере. Например, на удаленном компьютере находится база данных, например, аэрофлота, и веб-сервис по запросу может позволить получить данные обо всех изменениях в расписании полетов.

Веб-сервисы, как таковые, предназначались быть программными, а не визуальными интерактивными решениями (т. е. они предназначались для применения в рамках концепции программа–программа, а не человек–программа). Поэтому они не имеют специального пользовательского интерфейса. Однако благодаря наличию веб-методов они могут в реальном времени предоставлять информацию о чем угодно. Одним словом, веб-сервис предоставляет услуги другим приложениям, причем последние могут быть любого типа, как веб-приложениями, так и обычными приложениями с графическим интерфейсом.

Иными словами, каждый Web-сервис – это удаленная функция, к которой можно обратиться через Web, передав некоторый набор входных параметров и получив в ответ выходные значения. То есть если Web-приложение предназначено для организации пользовательского интерфейса к системе через Web-браузер, то Web-сервис нужен для программного доступа со стороны других приложений с использованием Интернет-протоколов.

НЕ нашли? Не то? Что вы ищете?

Технология веб-сервисов стандартизована, для нее разработана соответствующая спецификация корпорации W3C. Согласно приведенному в ней определению, веб-сервисом называется программная система, идентифицируемая строкой URI, чьи публичные интерфейсы и привязки определены и описаны посредством XML.

В целом разработка Web-сервиса гораздо проще, чем Web-приложения, как раз потому, что у него нет пользовательского интерфейса, а есть одна или несколько входных точек внешнего доступа. На практике мы часто используем термин «сервис-ориентированное приложение», имея при этом в виду взаимосвязанный набор Web-функций, позволяющий внешней системе реализовать выполнение на их основе достаточно сложных прикладных задач.

Структура веб-сервисов. Веб-сервисы базируются на применении открытых, утверждаемых консорциумом IT-сообщества стандартах и протоколах, ключевыми из которых являются следующие:

– SOAP (Simple Object Access Protocol) — протокол доступа к простым объектам, т. е. механизм для передачи информации между уделенными объектами на базе протокола HTTP и некоторых других Интернет-протоколов;

– WSDL (Web Services Description Language) — язык описания веб-сервисов;

– UDDI (Universal Description, Discovery and Integration) — универсальное описание, обнаружение и интеграция, упрощенного говоря, протокол поиска ресурсов в Интернет.

SOAP. Базовым протоколом, обеспечивающим взаимодействие в среде веб-сервисов, является протокол SOAP (Simple Object Access Protocol). Он позволяет приложениям взаимодействовать между собой через Internet, используя для этого XML-документы, называемые сообщениями SOAP.

Сообщение SOAP содержит конверт, который описывает содержимое, предполагаемого получателя сообщения и требования к обработке сообщения. SOAP-сообщения представляет собой иерархическую структуру вложенных XML-элементов (или узлов): SOAPMessage, SOAPPart, SOAPEnvelope, SOAPHeader, SOAPBody и содержимое передаваемого сообщения в формате XML (XML content).

UDDI. Спецификация UDDI (UDDI (Universal Description, Discovery and Integration – универсальное описание, расположение и интеграция)) описывает базирующийся на протоколе SOAP веб-сервис, в задачи которого входит определение местоположения и описание протокола взаимодействия любого веб-сервиса. По сути, это каталог доступных веб-сервисов.

WSDL. После того как нужный веб-сервис найден в одном из каталогов UDDI, нужна информация о том, как собственно обратиться к веб-сервису и какие конкретно условия или правила необходимо соблюсти, чтобы сделать это правильно. Для этого используется WSDL (Web Service Description Language – язык описания веб-сервиса), который предназначен, как и следует из его названия, для описания веб-сервисом своих возможностей, своего интерфейса и некоторых метаданных предназначенных для использования теми, кто будет использовать этот веб-сервис.

Описание веб-сервиса на языке WSDL содержит описание функций этого сервиса, кому этот сервис принадлежит (компания, адрес и другие данные), формальное описание процесса вызова функций. Это описание полностью самодостаточно и позволяет использовать веб-сервис, пользуясь только этой информацией.

Схема работы веб-сервиса. В общем виде схему взаимодействия клиента с веб-сервисом можно представить следующим образом (рис. 1).

Рисунок 1 – Схема работы веб-сервиса

Под «запросом» подразумевается вызов метода (процедуры, функции), под «ответом» – результат выполнения вызванного метода.

Веб-сервисы в ASP.NET. Создание веб-службы похоже на создание веб-страницы. Платформа. NET предоставляет оболочку WebMethods, которая позволяет преобразовывать SOAP-сообщения в классы. NET. В результате веб-методы, объявляемые в веб-сервисе, почти не отличаются от функций, которые программируются при разработке веб-форм.

Однако есть ряд требований, которыми следует руководствоваться при разработке веб-сервисов. Во-первых, файл веб-сервиса должен иметь расширение asmx. Во-вторых, файл веб-сервиса должен начинаться с директивы WebService. В-третьих, метод, вызываемый через веб, должен иметь атрибут WebMethod. Это делается путем аннотирования методов атрибутом [WebMethod], находящемся в пространстве имен System. Web. Services.

Среда Microsoft Visual Studio, в которой традиционно создаются как веб-приложения, так и веб-сервисы, позволяет максимально автоматизировать процесс разработки веб-сервиса. Достаточно создать новое веб-приложение и выбрать его тип ( Web Services). Кроме того, Visual Studio позволяет протестировать веб-сервис. Для его отображения используется файл DefaultWsdlHelpGenerator. aspx, размещенный в системной папке CONFIG.

Использование Visual Studio также упрощает разработку клиентов веб-сервисов. Для этого к Windows- или веб-приложению нужно добавить веб-ссылку на сервис. При этом необязательно знать точный URL-адрес сервиса – Visual Studio предоставляет UDDI-интерфейс для поиска доступных веб-сервисов.

Веб-сервисы в PHP. Наиболее распространенными способами создания и использования веб-сервисов в PHP являются библиотека NuSOAP и PHP-расширение SOAP Extension. В лабораторной работе предлагается использовать первый из них.

NuSOAP – представляет из себя набор PHP-классов, позволяющих разработчикам создавать и использовать веб-сервисы на SOAP. NuSOAP может также генерировать WSDL-описание веб-сервиса и использовать его., поддерживает различные виды сервисов (rpc/encoded и document/literal). В то же время необходимо учитывать, что поддержка SOAP и WSDL в NuSOAP реализована не полностью по сравнению с другими реализациями, например, .NET или Apache Axis.

Для использования NuSOAP достаточно скачать его (например, с официального сайта SourceForge), а потом разместить копию файла nusoap. php в дерево своей программы, чтобы можно было подключать ее в PHP-код.

Ключевым классом, который используется при создании веб-сервиса, является soap_server. Методы сервиса представляют собой обычные PHP-функции, которые с помощью метода register преобразуются в веб-методы веб-сервиса.

NuSOAP предоставляет несколько возможностей, полезных для отладки веб-сервиса. В NuSOAP при отладке можно просмотреть посланный запрос и ответ сервера. Класс soapclient содержит атрибуты request и response, которые позволяют отобразить соответственно запрос и ответ.

Кроме того, NuSOAP позволяет автоматически генерировать WSDL для сервиса, используя дополнительные аттрибуты и методы класса soap_server. Информация о сервисе указывается при помощи метода configureWSDL. Информация о каждом методе определяется указанием дополнительных параметров методу register.

Для создания клиента веб-сервиса используется класс soapclient, в качестве параметра которому передается URL-адрес сервиса. Вызов веб-метода выполняется с помощью метода call того же класса soapclient.

Веб-сервисы в JSP. Разработка Web-сервисов в JSP основана на создании Java-классов, реализующих ту функциональность, которая должен предоставлять веб-сервис. Каждая функция, определенная в составе Java-класса представляет собой веб-метод веб-службы.

В лабораторной работе программирование JSP-приложений выполняется с помощью визуальной среды Eclipse Europe. Для программирования веб-сервисов эта среда предоставляет полезный инструментарий – мастер Web Service. Он позволяет оформить Java-класс в виде веб-службы, в частности, автоматически генерирует ее WSDL-описание.

При разработке JSP-клиента Web-сервиса достаточно разместить WSDL-файл веб-службы в каталоге с приложением. Файлы клиента сервиса нужно представить в форме объектов Web Service Client. В результате будет сгенерирован прокси-класс, соответствующий веб-сервису, и переносящий его функциональность в клиентское приложение.

Технология ASP.NET и СУБД Microsoft SQL Server

1. Программирование Web-сервиса

1. Создать новый Web-сервис:

Пуск | Microsoft Visual Studio 2005 | Microsoft Visual Studio 2005

ф. Microsoft Visual Studio | File → New → Web Site… → ф. New Web Site → Visual Studio Installed Templates → выбр. Web Service →

Location → выбр. HTTP → http://имя_сервера(например, localhost)/WebService

Language → выбр. Visual C#

2. Открыть вкладку (если она не открылась автоматически) App_Code/Service. cs. Установить курсов в программный код, отображенный на экране.

3. Добавить подключение библиотек для работы с базами данных (System. Data, System. Data. SqlTypes и System. Data. SqlClient) и обработки XML-данных (System. Xml):

using System. Data;

using System. Data. SqlTypes;

using System. Data. SqlClient;

using System. Xml;

4. Создать новый Web-метод GetFaculty, возвращающий в XML-формате список факультетов, полученный в результате запроса к базе данных:

[WebMethod]

public DataSet GetFaculty()

{

}

Весь последующий код из этого пункта вводить между открывающей и закрывающей угловыми скобками.

4.1 Создать строковую переменную sql и занести в нее SQL-код запроса к базе данных:

string sql = "select '0' as id, 'Выбор факультета...' as name from Faculty union select * from Faculty";

4.2 Установить соединение с базой данных. Для этого создать экземпляр класса SqlConnection, а конструктору этого класса в качестве параметра передать параметры соединения с базой данных

University:

SqlConnection conn = new SqlConnection("Data Source=имя_сервера;Initial Catalog=University;Integrated Security=True");

4.3 Открыть соединение с помощью метода Open:

conn. Open();

4.4 Создать новый набор данных (экземпляр класса DataSet). Присвоить набору данных название Faculty:

DataSet ds = new DataSet("Faculty");

4.5 Создать экземпляр класса SqlDataAdapter для извлечения информации из базы данных. В качестве параметров конструктору класса передать текст запроса (переменная sql и объект соединения conn:

SqlDataAdapter adapt = new SqlDataAdapter(sql, conn);

4.6 Создать в объекте DataSet (с именем Faculty) новую таблицу данных (DataTable) под именем f и заполнить ее результатом запроса к базе данных:

adapt. Fill(ds, "f");

4.7 В качестве возвращаемого методом значения указать объект ds:

return ds;

5. Аналогичным образом создать Web-методы GetSpec и GetGr, возвращающие в формате XML списки специальностей и групп соответственно.

6. Создать Web-метод University_DataSet, который на основании кодов факультета, специальности и группы возвращает данные об успеваемости студентов. Входные параметры указать при объявлении метода после его имени:

public DataSet University_DataSet(string faculty, string spec, int gr)

Текст запроса задать в виде:

string sql = "select rtrim(fio) as fio, rtrim(subject) as subject, rtrim(ocenka) as ocenka, CONVERT(CHAR(25),data,104) as data from Faculty inner join Speciality on Faculty. id=Speciality. faculty inner join Groups on Speciality. id=Groups. spec inner join Student on Groups. id=Student. gr inner join Uspev on Student. zk=Uspev. student where Faculty. id='"+faculty+"' and Speciality. id='"+spec+"' and Groups. id="+gr;

2. Использование Web-сервиса

1 Создать новый Web-сайт:

Пуск | Microsoft Visual Studio 2005 | Microsoft Visual Studio 2005

ф. Microsoft Visual Studio | File → New → Web Site… → ф. New Web Site → Visual Studio Installed Templates → выбр. Web Site →

Location → выбр. HTTP → http://имя_сервера(например, localhost)/Lab4_ASP

Language → выбр. Visual C#

2 Перейти на страницу ввода программного кода:

ф. Lab1_ASP → Default. aspx → Source | удалить весь код, расположенный между открывающим и закрывающим тегами элемента BODY

3 Скопировать элемент BODY вместе со всеми вложенными элементами из файла Default. aspx первой лабораторной работы.

4 Подключить к Web-приложению Web-сервис WebService:

ф. Solution Explorer | пр. кн. мыши на Lab4_ASP → выбр. Add Web Reference…

ф. Add Web Reference | стр. URL ← ввести "http://localhost/WebService/Service. asmx" | нажать на кн. Add Reference.

5 Импортировать в Web-приложение подключенный Web-сервис как библиотеку классов и методов. Для этого после описания библиотек, подключаемых по умолчанию, ввести следующий код:

<%@ Import Namespace="localhost" %>

6 Ввести обработчик события загрузки страницы:

<script language="C#" runat="server">

void Page_Load(object sender, EventArgs e)

{

}

</script>

7 Создать экземпляр сервиса (класс Service) для использования методов Web-сервиса:

Service s = new Service();

8 Создать экземпляр класса DataSet и заполнить его с помощью метода GetFaculty Web-сервиса:

DataSet ds_f = s. GetFaculty();

9 Заполнить раскрывающийся список факультетов (элемент с ID="faculty") данными из DataSet:

faculty. DataSource = ds_f. Tables["f"].DefaultView;

faculty. DataTextField = "name";

faculty. DataValueField = "id";

faculty. DataBind();

10 Аналогичным образом заполнить списки групп и специальностей.

11 Создать файл Browse. aspx (см. п. 2). Заменить весь код созданной страницы на код одноименного файла из первой лабораторной работы.

12 В соответствии с пп. 5–10 заполнить таблицу на странице Browse. aspx с помощью метода University_DataSet Web-сервиса.

13 Проверить работоспособность созданного Web-приложения. Для этого перейти на страницу Lab3_ASP - Microsoft Visual Studio | Default. aspx и нажать сочетание клавиш [Ctrl+F5].

Технология PHP и СУБД MySQL

1. Программирование Web-сервиса

1. Создать папку, в которой будут размещены все файлы Web-приложения, и назвать ее, к примеру, Lab4_PHP.

2. Создать папку, в которой будут размещены файлы Web-сервиса, и назвать ее, к примеру, server.

3. Скопировать в папку server файл nusoap. php (размещен на диске D в папке Student) – библиотеку для работы с сообщениями SOAP.

4. В папке server создать новый файл и назвать его, к примеру, index. php. Открыть файл с помощью любого редактора.

5. Ввести открывающий тег сценария <?php

6. Подключить код сценария nusoap. php:

require_once('nusoap. php');

7. Установить соединение с базой данных MySQL University

7.1 Задать объект link соединения с базой данных

$link = @mysql_connect("localhost", "root") or die("Невозможно соединиться с сервером");

7.2 Выбрать базу данных University

$db=@mysql_select_db("university") or die("Нет такой базы данных");

7.3 Установить кириллическую кодировку (cp-1251) для корректной передачи и получения данных из базы данных. Для этого в сценарий PHP из предыдущего пункта ввести следующий код:

@mysql_query("SET SESSION character_set_results = cp1251;");

@mysql_query("SET SESSION Character_set_client = cp1251;");

@mysql_query("SET SESSION Character_set_results = cp1251;");

@mysql_query("SET SESSION Collation_connection = cp1251_general_ci;");

@mysql_query("SET SESSION Character_set_connection = cp1251;");

8. Создать экземпляр SOAP-сервера:

$server = new soap_server;

9. Зарегистрировать метод faculty (извлечения информации о факультетах)

9.1 Вызвать метод register объекта server

$server->register(

9.2 Задать название метода – faculty:

'faculty',

9.3 Указать выходные параметры метода:

array('return' => 'xsd:string'),

9.4 Задать используемое пространство имен:

'uri:facultyquery',

9.5 Задать заголовок SOAPAction

'uri:facultyquery/faculty',

9.6 Задать вид сервиса rpc/encoded

'rpc',

'encoded'

);

10. Определить метод faculty как функцию PHP.

10.1 Задать имя функции (faculty) и открывающую фигурную скобку:

function faculty() {

10.2 Создать переменную f_query для хранения текста запроса к базе данных для извлечения информации о специальностях факультета

$f_query="select * from `faculty`";

10.3 Выполнить запрос к базе данных:

$f=mysql_query($f_query);

10.4 Создать строковую переменную facOptions для хранения XML-представления информации о факультетах. Записать в нее открывающий тег корневого элемента faculties

10.5 Сформировать цикл while по всем строкам результирующего набора f:

while ( $fac = mysql_fetch_array( $f ) )

{

}

10.6 Сформировать XML-элемент faculty, соответствующий одной записи из таблицы Faculty. В элементе задать атрибуты ID и name, которые соответствуют одноименным полям в таблице базы данных. Для этого между открывающей и закрывающей фигурными скобками цикла ввести следующий код:

$facOptions = $facOptions."<faculty ID='".$fac['ID']."' name='".$fac['name']."'/>";

10.7 В качестве значения, возвращаемого функцией faculty, указать текстовую переменную facOptions, дополненную закрывающим тегом элемента faculties:

return $facOptions.'</faculties>';

}

11. Аналогичным образом (см. п. 9) зарегистрировать метод spec, формирующий XML-список специальностей.

12. Определить метод spec как функцию PHP (см. п. 10).

13. Зарегистрировать метод gr, формирующий XML-список групп и определить его как функцию PHP.

14. Зарегистрировать метод usp (успеваемость) с входным параметром name (номер группы). Для этого ввести следующий код:

$server->register(

'usp',

array('group' => 'xsd:string'),

array('return' => 'xsd:string'),

'uri:uspquery',

'uri:uspquery/usp',

'rpc',

'encoded'

);

15. Определить метод usp как функцию PHP:

function usp($group){

$usp_query="SELECT `fio`, `subject`, `ocenka`, `data`

FROM `uspev`, `student`

WHERE `uspev`.`student`= `student`.`zk` AND `gr`=".$group;

$usp=mysql_query($usp_query);

$usp_count = mysql_num_rows($usp);

$usOptions = '<uspev>';

while ( $u = mysql_fetch_array( $usp ) )

{

$usOptions = $usOptions."<usp fio='".$u['fio']."' subject='".$u['subject']."' ocenka='".$u['ocenka']."' data='".$u['data']."'/>";

}

return $usOptions.'</uspev>';

}

16. Вызвать сервис с помощью HTTP-запроса

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';

$server->service($HTTP_RAW_POST_DATA);

17. Ввести закрывающий тег сценария?>.

2. Использование Web-сервиса

1. В папку Lab4_PHP скопировать файл nuSOAP (из предыдущего пункта) и файлы Index. php и Browse. php из первой лабораторной работы.

2. Открыть в любом редакторе файл Index. php.

3. Ввести открывающий тег сценария <?php

4. Подключить код сценария nusoap. php:

require_once('nusoap. php');

5. Создать экземпляр SOAP-клиента.

5.1 Создать переменную client

5.2 Инициализировать конструктор класса soapclient и передать ему в качестве параметра URL SOAP-сервера (из предыдущего пункта):

$client = new soapclient('http://localhost/denwer/Lab4_PHP/server/index. php');

6. Вызвать SOAP-метод faculty:

$faculty = $client->call('faculty');

7. Аналогичным образом вызвать SOAP-методы spec и gr:

$spec = $client->call('spec');

$gr = $client->call('gr');

8. Записать результаты в экземпляры DOM-объектов

8.1 Создать экземпляр DOM-объекта и записать его в переменную fac_dom:

$fac_dom = new DOMDocument();

8.2 Задать кириллическую кодировку DOM-объекта:

$fac_dom -> encoding = "windows-1251";

8.3 Загрузить в DOM-объект XML-данные о факультетах, полученные в результате вызова SOAP-метода faculty:

$fac_dom->loadXml(iconv("windows-1251", "utf-8", $faculty));

8.4 Аналогичным образом создать DOM-объекты spec_dom (для XML-данных о специальностях) и gr_dom (для XML-данных о группах).

9. Ввести закрывающий тег сценария?>

10. В раскрывающийся список факультетов (HTML-элемент select с атрибутом name = "faculty") добавить данные из XML-списка факультетов. Для этого после строки

<option value="0">Выберите факультет</option>

10.1 Ввести открывающий тег сценария:

<?php

10.2 Построить цикл по элементам DOM-объекта fac_dom:

foreach ($fac_dom->documentElement->childNodes as $item) {

10.3 Создать строковую переменную value и занести в нее значение XML-атрибута ID:

$value = iconv("utf-8", "windows-1251", $item->getAttribute('ID'));

10.4 Создать строковую переменную text и занести в нее значение XML-атрибута name:

$text = iconv("utf-8", "windows-1251", $item->getAttribute('name'));

10.5 Вывести HTML-код элемента списка option со значением из переменной value и отображаемым текстом из переменной text.

echo "<option value='".$value."'>".$text."</option>";

}

10.6. Ввести закрывающий тег сценария?>

11. Аналогичным образом заполнить раскрывающиеся списки специальностей (из DOM-объекта spec_dom) и групп (из DOM-объекта gr_dom).

12. Открыть в любом редакторе файл Browse. php.

13. Подключить код сценария nusoap. php:

require_once('nusoap. php');

14. Создать строковую переменную gr и занести в нее значение параметра gr, переданного методом POST со страницы Index. php:

$gr = $_POST['gr'];

15. Создать экземпляр SOAP-клиента (см. п. 5) client.

16. Вызвать метод usp и в качестве входного параметра передать ему значение строковой переменной gr:

$result = $client->call('usp', array('group' => $gr));

17. Записать результаты в экземпляр DOM-объекта usp_dom:

$usp_dom = new DOMDocument();

$usp_dom -> encoding = "windows-1251";

$usp_dom->loadXml(iconv("windows-1251", "utf-8", $result));

18. Заполнить таблицу TABLE со стилем textborder данными из XML-набора записей об успеваемости студентов

18.1 Ввести открывающий тег сценария:

<?php

18.2 Построить цикл по элементам DOM-объекта usp_dom:

foreach ($usp_dom->documentElement->childNodes as $item)

{

18.3 Занести в переменные fio, subject, ocenka и data значения одноименных XML-атрибутов:

$fio= iconv("utf-8", "windows-1251", $item->getAttribute('fio'));

$subject = iconv("utf-8", "windows-1251", $item->getAttribute('subject'));

$ocenka = iconv("utf-8", "windows-1251", $item->getAttribute('ocenka'));

$data = iconv("utf-8", "windows-1251", $item->getAttribute('data'));

18.4 Ввести закрывающий тег сценария?>

18.5 Ввести открывающий тег элемента TR:

<TR>

18.6. Ввести открывающий тег первого столбца (шириной 30% от общей ширины таблицы). Задать стиль представления текста в столбце tabletext:

<TD width="30%"><SPAN class="tabletext">

18.7 Вывести значение переменной fio

<?php

echo $fio;

?>

18.8 Закрыть элементы SPAN и TD:

</SPAN></TD>

18.9 Аналогичным образом построить столбцы для представления данных из переменных subject, data и ocenka соответственно.

19. Протестировать полученное Web-приложение (см. лабораторную работу 1).

Технология JSP и СУБД MySQL

1. Программирование Web-сервиса

1. Запустить визуальную среду Eclipse Europe

Пуск | Программы | Eclipse

2. Создать новый Web-проект:

File → New → Project

Выбр. Web → Dynamic Web Project → кн. OK при запросе разрешения возможности Web Development

Ввести soap_server в качестве названия проекта

3. Создать Java-класс, работающий на сервере как Web-служба:

Ф. Package Explorer | развернуть soap_server | пр. кн. мыши на Java Resources → New → Class

Ввести University в качестве имени файла | кн. Finish → откроется окно для ввода кода с уже введенными строками

public class University {

}

4. Подключить библиотеки для работы с базами данных и обработки данных. Для этого до описания класса ввести следующий код:

import java. sql.*;

import java. io.*;

import java. util.*;

5. Создать функцию установки соединения с базой данных University

5.1 Ввести название функции con

public Connection con()

{

}

Весь последующий код этого пункта вводить между открывающей и закрывающей фигурными скобками.

5.2 Создать пустой объект соединения (Connection)

Connection conn = null;

5.3 Создать экземпляр класса драйвера взаимодействия с СУБД MySQL

try {

Class. forName("com. mysql. jdbc. Driver").newInstance();

5.4 Задать текстовую переменную для хранения параметров соединения с базой данных

String connectionURL = "jdbc:mysql:/виртуальный путь к базе данных?user=пользователь;password=пароль";

5.5 Создать пустой объект запроса (Statement):

Statement statement = null;

5.6 Установить соединение с базой данных MySQL:

conn = DriverManager. getConnection(connectionURL, "root", "");

5.7 Создать и настроить объект запроса:

statement = conn. createStatement();

conn. setReadOnly(true);

}

catch (Exception e) {

System. out. println(e. getMessage());

}

5.8 Указать в качестве возвращаемого функцией значения объект соединения:

return conn;

}

6. Создать функцию faculties, формирующую строку XML-набора данных о факультетах, полученных по запросу к базе данных

6.1 Задать имя функции:

public String faculties(){

}

Весь последующий код этого пункта вводить между открывающей и закрывающей фигурными скобками.

6.2 Создать строковую переменную res и занести в нее открывающий тег корневого элемента faculties:

String res = "<faculties>";

6.3 Создать объект соединения с помощью функции con():

try {

Connection conn = con();

6.4 . Выполнить запрос к таблице Faculty (Факультет) для получения данных о факультетах из базы данных. Для этого ввести в сценарий PHP следующий код:

ResultSet rs =

conn. createStatement().executeQuery("SELECT * FROM faculty");

6.5 Для каждой строки результата запроса сформировать XML-элемент faculty с атрибутами ID и name:

while (rs. next())

{

res = res + "<faculty ID='"+rs. getString("id")+"' name='"+rs. getString("name")+"'/>";

}

}

catch (Exception e) {

System. out. println(e. getMessage());

}

6.6 Дополнить полученное содержимое переменной res закрывающим тегом элемента faculties:

res = res + "</faculties>";

6.7 В качестве возвращаемого функцией значения указать переменную res

return res;

}

7. Аналогичным образом создать функции specialities, groups (без входных параметров) и uspev (с входным параметров gr – группа), возвращающие соответственно XML-наборы данных о специальностях, группах и успеваемости студентов.

8. Создать Java Web-службу UniversityService:

пр. кн. мыши на University. class → New → Other

ф. New Wizard → разв. Web Services → выбр. Web Service → кн. Next

выбр. Тип Web-службы ← Java Bean Web → кн. OK

9. Просмотреть сгенерированное WSDL-описание созданной Web-службы UniversityService. wsdl.

2. Использование Web-сервиса

1. Создать Web-проект для клиентского приложения.

File → New → Web → Dynamic Web Project

name → Lab4_JSP

2. Добавить в проект новую JSP-страницу

ф. Project Explorer | Lab4_JSP | кл. пр. кн. мыши → выбр. New → JSP |

ф. New JavaServer Page | File name ← Default | удалить весь код элемента HTML

3. Скопировать в полученный файл весь код из файла Index. jsp из первой лабораторной работы.

4. Скопировать WSDL-файл из soap_server в папку Lab4_JSP / WebContent

5. Сгенерировать клиента Web-службы из скопированного WSDL-файла.

пр. кн. мыши на UniversityService. wsdl → New → Other

ф. New Wizard | разв. Web Services | выбр. Web Service Client → кн. Next → кн. OK

в появившемся окне уст. флажок Java proxy → кн. Finish.

Будет создан Java-прокси, который является Java-классом, способным вызывать Web-службу.

6. Открыть код файла Index. jsp

7. Подключить библиотеки для работы с базами данных и обработки XML-данных:

<%@page import="java. sql.*"%>

<%@page import="java. io.*"%>

<%@page import="java. util.*"%>

<%@ page import="javax. xml. parsers. DocumentBuilderFactory"%>

<%@ page import="javax. xml. parsers. DocumentBuilder"%>

<%@ page import="org. w3c. dom.*"%>

<%@ page import="javax. xml. parsers.*"%>

<%@ page import="javax. xml. transform.*"%>

<%@ page import="javax. xml. transform. dom.*"%>

<%@ page import="javax. xml. transform. stream.*"%>

8. Импортировать Java-прокси (UniversityProxy в папке uni), созданный для взаимодействия с Web-службой:

<%@page import="uni. UniversityProxy"%>

9. Создать экземпляр класса UniversityProxy для получения доступа к методам Web-службы:

UniversityProxy proxy = new UniversityProxy();

10. Создать экземпляр класса DocumentBuilderFactory:

DocumentBuilderFactory dbf = DocumentBuilderFactory. newInstance();

11. На основе класса DocumentBuilderFactory создать новый DOM-парсер:

DocumentBuilder db = dbf. newDocumentBuilder();

12. Создать экземпляр класса Reader и загрузить в него результат выполнения Web-метода faculties, преобразованный в массив данных:

Reader reader=new CharArrayReader(proxy. faculties().toCharArray());

13. Создать экземпляр класса Document – новый DOM-объект – и загрузить в него данные из Reader:

Document faculty = db. parse(new org. xml. sax. InputSource(reader));

14. Создать XML-элемент, соответствующий корневому элементу DOM-объекта faculty со всеми его дочерними элементами:

Element fac = faculty. getDocumentElement();

15. Аналогичным образом создать DOM-объекты, соответствующие данным о специальностях и группах, и создать XML-элементы, соответствующие их корневым элементам.

16. Заполнить раскрывающийся список факультетов данными из XML-элемента fac:

16.1 Задать цикл по дочерним элементам XML-элемента fac:

<%

NodeList childNodes = fac. getChildNodes();

if (childNodes!= null)

{

for (int x=0; x<childNodes. getLength(); x++)

{

16.2 В строковые переменные id и name занести значения одноименных XML-атрибутов:

NamedNodeMap facs = childNodes. item(x) .getAttributes();

String id = facs. item(0).getNodeValue();

String name = facs. item(1).getNodeValue();

%>

16.3 Определить значение переменной id как значение элемента раскрывающегося списка:

<option value="

<%

out. println(id);

%>

">

16.4 Определить значение переменной name как отображаемый текст элемента раскрывающегося списка:

<%

out. println(name);

%>

</option>

<%

}

}

%>

17. Аналогичным образом заполнить раскрывающиеся списки специальностей и групп.

18. Скопировать в проект файл Browse. jsp из первой лабораторной работы. Настроить файл на использование Web-службы soap_server и ее метода uspev для заполнения таблицы об успеваемости студентов выбранной группы (по аналогии с предыдущими пунктами).

19. Проверить работоспособность созданного Web-приложения. Для этого в окне визуальной среды Eclipse выбрать пункт меню

Project → Run as… → Run on Server

5. Контрольные вопросы

1. Что такое веб-сервис?

2. Из чего состоит веб-сервис?

3. Для чего используются SOAP-сообщения?

4. Что такое UDDI?

5. Как описать свойства и методы веб-сервиса?

6. Содержание и оформление отчета

Отчет должен содержать:

– титульный лист, название и цель работы;

– вариант задания;

– листинг программного кода;

– скриншоты результатов работы Web-приложения с различными вариантами запросов;

– выводы по работе.