Программирование Web-сервиса. 1. Создать папку, в которой будут размещены все файлы Web-приложения, и назвать ее, к примеру, Lab4_PHP.
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. Ввести закрывающий тег сценария?>.
Использование 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-приложение
Вариант В. Технология JSP и СУБД MySQL