Server for Information Technologies
Сервер поддерживаетс�
Центром Информационных �ехнологий
(095) 932-9212, 932-9213, 939-0783
E-mail: [email protected]
Сервер Информационных �ехнологий содержит море(!) аналитической информации

Глава 7. Использование пакета Web - Oracle -Web (WOW)

Евгений Фаддеенков

7.1 Введение

7.2 Назначение и схема работы

7.3 Состав

7.4 Установка

7.5 Использование

7.6 Спецификаци� процедур пакета htp

7.1 Введение

В данной главе отчета описываетс� свободно - распростран�емое программное обеспечение - пакет WOW. Дл� освоени� этого материала необходимо знание �зыка SQL и его процедурного расширени� PL/SQL от фирмы Oracle. Кроме этого необходимо знание основ администрировани� сервера Oracle. Информацию по PL/SQL Вы можете получить из документации по серверу Oracle, книга "PL/SQL Users Guide and Reference". Информацию об основах администрировани� сервера Oracle можно получить из этой же документации, книга "Oracle7 Server Administration Guide".

Пакет WOW предназначен дл� использовани� под ОС Unix.

7.2 Назначение и схема работы

Пакет WOW предназначен дл� обработки запросов от WWW - сервера (Web -) к SQL - серверу Oracle (-Oracle-) с генерацией динамических HTML - документов (-Web). Разработчик приложений, использующий WOW оперирует только с родным �зыком Oracle - PL/SQL, �вл�ющимс� процедурным расширением �зыка SQL. Это обуславливает высокую эффективность разработки приложений. Обработка созданных приложений непосредственно в сервере Oracle определ�ет высокую скорость исполнени� приложений.

Основна� иде� пакета WOW - преобразование запроса к WWW - серверу в вызов определенной процедуры PL/SQL. В качестве параметров процедуры, используютс� данные из запроса к WWW - серверу. Кроме этого, �зык PL/SQL дополн�етс� функци�ми вывода различных данных в формате HTML. Сфера технологических решений пакета приведена на рис. 7-1.

7.3 Состав

Структурно, WOW состоит из р�да исполн�емых программ, соответствующих спецификации CGI и набора пакетов PL/SQL (см. рис. 7-2).

Пакет htp содержит процедуры и функции, облегчающие формирование HTML - документа. Пакет htf содержит описание различных констант и функций, используемых при формировании HTML - документов.

7.4 Установка

Дл� корректной работы пакета необходимо правильно провести процедуру установки. Пакет WOW требует около 2Mb дискового пространства. На базовом сервере должны быть установлены:

  1. операционна� система семейства Unix;
  2. WWW - сервер;
  3. сервер баз данных Oracle или сетевой стек Oracle SQL*Net с возможностью доступа к удаленному серверу баз данных Oracle.

Этап I

В случае, когда пакет поставл�етс� в виде исходных текстов, необходимо произвести компил�цию и сборку исполн�емого модул� wowstub. При сборке wowstub необходимо использовать библиотеки установленного сервера Oracle или сетевого стека SQL*Net. Компил�ци� и сборка производитс� утилитой make на основании данных файла Makefile. Вам необходимо изменить р�д параметров Makefile дл� настройки на Вашу конфигурацию Oracle и Unix:

Этап II

Независимо от сборки wowstub, необходимо создать р�д структур данных в БД Oracle.

  1. Создать пользовател�, через которого WOW будет осуществл�ть доступ к данным и исполнение рабочих процедур. Обычно используетс� им� WWW.
  2. Создать из под вышеупом�нутого пользовател� все необходимые структуры данных и примеры. Дл� этого необходимо исполнить следующие SQL файлы, идущие в дистрибутиве WOW: wow.sql, ht.sql, math.sql, emp.sql, showemp.sql, hanoi.sql. Исполнить эти файлы можно с использованием одной из следующих утилит: SQL*Plus, SQL*DBA, Server Manager, Enterprize Manager.

Этап III

Необходимо поместить модуль wowstub в каталог CGI программ Вашего WWW сервера. Необходимо переопределить р�д параметров файла wow, представл�ющего собой скрипт sh:

  1. ORACLE_HOME - в соответствии с параметром ORACLE_HOME Вашего сервера Oracle или стека SQL*Net;
  2. TWO_TASK - в соответствии с параметром TWO_TASK клиентской части Вашего сервера Oracle;
  3. WOW_UID - в соответствии с именем пользовател� и его паролем, созданными на этапе II установки.

В случае если Вы используете версию от ЦНИ� НГУ, необходимо отредактировать все 4 файла: wow.win, wow.iso, wow.alt, wow.koi8.

Отредактированный файл wow (все 4 отредактированных файлы при использовании версии от ЦНИ� НГУ) необходимо поместить в каталог дл� CGI - программ Вашего WWW сервера.

7.5 Использование

Рассмотрим простейший пример с использованием пакета WOW. При обращении к WWW - серверу www.cnit.nsu.ru по URL:

http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test?answer=no

происходит следующа� цепочка действий (см. рис. 7-3):

  1. WWW - сервер интерпретирует это обращение как запуск CGI - программы wow.win.
  2. Программа wow.win интерпретирует параметры как вызов процедуры test пакета example с параметром answer имеющим значение no, созданной в схеме WWW сервера Oracle.
  3. Сервер Oracle исполн�ет эту процедуру и все процедуры и функции, вызываемые из нее. Выходные данные, представл�ющие динамически созданный HTML - документ, передаютс� программе wow.win.
  4. Программа wow.win перекодирует выходной документ в кодировку Microsoft CodePage 1251, используемую в Windows - приложени�х, и передает его WWW - серверу.
  5. WWW - сервер возвращает созданный документ, как результат запроса, WWW - клиенту.

URL, обращающийс� к процедуре PL/SQL должен быть построен по определенным правилам и содержать р�д элементов:

  1. Указатель на модуль пакета WOW, наход�щийс� в каталоге CGI - программ. Расширение программы wow - .koi8, .win, .iso, .alt определ�ет кодировку WWW - клиента:

Например:
http://www.cnit.nsu.ru/cgi-bin/wow.win

  1. Им� процедуры PL/SQL, к которой происходит обращение. Модули пакета используют схему и регистрационные данные пользовател� www БД Oracle. �аким образом, вызываема� PL/SQL - процедура должна быть доступна пользователю www на исполнение. Если процедура (test) создана пр�мо в схеме www, необходимо просто указать ее им�:

http://www.cnit.nsu.ru/cgi-bin/wow.win/test

Если процедура входит в состав пакета (example), созданного в схеме www, необходимо добавить им� пакета и им� процедуры:

http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test

Когда пакет создан в другой схеме Oracle, необходимо указывать и им� схемы. Например, дл� схемы fancy получим:

http://www.cnit.nsu.ru/cgi-bin/wow.win/fancy.example.test

Пользователь www должен иметь права на исполнение этой процедуры, �вно предоставленные оператором GRANT �зыка SQL.

  1. После имени процедуры, через разделитель '?', начинают перечисл�тьс� параметры процедуры и их значени� в виде пар:

<название_параметра> = <значение_параметра>

между собой, различные параметры раздел�ютс� амперсандом '&':

<название_параметра1>=<значение_параметра1>&<название_параметра2>= <значение_параметра2>

Название параметра должно совпадать с названием параметра вызываемой процедуры. Число параметров должно в точности соответствовать числу параметров процедуры. Если хот� бы одно из этих требований не соблюдено, Вы получите сообщение об ошибке. Пор�док указани� параметров значени� не имеет. Большие и маленькие буквы в названии параметров равнозначны.

Число реально передаваемых параметров может и не совпадать с числом параметров, указанных в спецификации процедуры. В этом случае, все опускаемые параметры должны иметь значени� по умолчанию.

Пример:
http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test?answer=no

Исход� из описанного механизма работы пакета WOW можно сформулировать основные требовани� к PL/SQL - процедурам, обрабатывающим запросы от WWW - сервера.

  1. Все входные переменные, передающиес� через WOW в процедуру всегда имеют тип varchar2. Если Вы хотите использовать какой - либо другой тип данных, необходимо использовать функции преобразовани� из varchar2.
  2. В пакете htp отсутствуют функции вывода начала и конца HTML - документа. Поскольку многие современные броузеры интерпретируют текст без обрамл�ющих тегов <HTML> ... </HTML> как преформатированный, необходимо пр�мо задавать эти теги в начале и конце документа.

Пример пакета example:
Create or Replace package example is
procedure test(answer in Varchar2);
end;
/
Create or Replace package body example is
procedure test(answer in Varchar2) is
ответ varchar2(3);
cursor c_man(ans in varchar2) is select Фамили� from Результаты_опроса where Ответ=ans order by Фамили�;
begin
-- Начало документа
htp.p('<HTML>');
-- Вывод названи� страницы и заголовка
if answer = 'no'
then
ответ:='НЕ�';
htp.htitle('Фамилии людей, ответивших отрицательно');
else
ответ:='ДА';
htp.htitle('Фамилии людей, ответивших положительно');
end if;
htp.olistopen;
-- Начало нумерованного списка
for man in c_man(Ответ) loop
-- Элемент списка
htp.item(man.Фамили�);
end loop;
-- Конец нумерованного списка
htp.olistclose;
-- Конец документа
htp.p('</HTML>');
end;
end;
/

При этом подразумеваетс� что в схеме WWW Oracle находитс� таблица примерно следующей структуры:

Create table Результаты_опроса(Фамили� varchar2(30),
Им� varchar2(14),
Отчество varchar2(20),
Ответ varchar2(3));

Обращатьс� к пакету WOW можно и из форм HTML. Ниже приведен пример обращени� к тому же пакету example из простейшей формы.

<HTML>
<HEAD>
<TITLE>�естова� форма</TITLE>
</HEAD>
<BODY>
<H1>�естова� форма</H1>
<FORM ACTION="http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test">
Введите ответ:<INPUT NAME="answer">
<INPUT VALUE="Найти" TYPE="SUBMIT">
</FORM>
</BODY>
</HTML>

7.6 Спецификаци� процедур пакета htp

procedure title(ctitle in varchar2) - выводит название документа (теги <TITLE>)
procedure htitle(ctitle in varchar2) - выводит название документа и повтор�ет его в заголовке первого уровн� (теги <TITLE>, <H1>)
procedure header(nsize in integer, cheader in varchar2) - выводит заголовок уровн� nsize (теги <H1> ... <H6>)
procedure url(curl in varchar2, cname in varchar2) - формирует cname как гипертекстную св�зь, указывающую на curl (теги <A HREF>).
procedure gif(curl in varchar2) - включает в документ картинку, путь до которой curl (теги <IMG>).
procedure gif(curl in varchar2, calign in varchar2) - включает в документ картинку, путь до которой curl с выравниванием, определ�емым параметром calign (теги <IMG>).
procedure bold(ctext in varchar2) - выводит текст ctext жирным шрифтом (теги <B>).
procedure italic(ctext in varchar2) - выводит текст ctext шрифтом italic (теги <I>)
procedure item(cval in varchar2) - выводит cval как элемент списка (теги <ITEM>).
procedure formOpen(curl in varchar2) - создает форму с действием curl (теги <FORM>).

procedure formHidden(cname in varchar2, cvalue in varchar2) - создает скрытое поле формы дл� хранени� значени� cvalue переменной с именем cname.
procedure formPassword(cname in varchar2),
procedure formPassword(cname in varchar2, cvalue in varchar2)
- создает поле формы дл� ввода значени� переменной - парол� с именем cname и значением по умолчанию cvalue.
procedure formField(cname in varchar2, nsize in integer),
procedure formField(cname in varchar2),
procedure formField(cname in varchar2, cvalue in varchar2)
- создает поле формы дл� ввода значени� переменной с именем cname длиной nsize со значением по умолчанию cvalue.
procedure formText(cname in varchar2, nrow in integer, ncol in integer) - создает многострочное поле формы (длиной ncol, высотой nrow) дл� ввода значени� переменной с именем cname.
procedure formCheckbox(cname in varchar2) - создает элемент checkbox дл� ввода значени� логической переменной cname.
procedure formRadio(cname in varchar2, cval in varchar2) - создает элемент radiobutton дл� ввода одного из значений cval переменной cname.
procedure formSelectOpen(cname in varchar2) - создает список значений дл� переменной с именем cname.
procedure formSelectOption(cval in varchar2) - добавл�ет значение cval в список значений переменной, описанной в formSelectOpen.
procedure formSelectClose - заканчивает список значений, открытый formSelectOpen.
procedure formDo(cname in varchar2) - создает кнопку типа SUBMIT текущей формы с именем cname.
procedure formDo - создает кнопку типа SUBMIT текущей формы с именем 'Submit'.
procedure formUndo(cname in varchar2) - создает кнопку типа RESET текущей формы с именем cname.
procedure formUndo - создает кнопку типа RESET текущей формы с именем 'Reset'.
procedure formClose - закрывает текущую форму.
Процедуры вывода:
procedure print (cbuf in varchar2),
procedure print (dbuf in date),
procedure print (nbuf in number)
- вывод�т значение различных типов.
Синонимы дл� процедуры print - p:
procedure p (cbuf in varchar2),
procedure p (dbuf in date),
procedure p (nbuf in number).
 
Процедуры, вывод�щие посто�нные значени�:
procedure line - разделительна� лини� (тег <HR>).
procedure para - начало параграфа (тег <P>).
procedure nl - перевод строки (тег <BR>).
procedure item - элемент списка (тег <LI>).
procedure ulistOpen - начало ненумерованного списка (тег <UL>).
procedure ulistClose - окончание ненумерованного списка (тег </UL>).
procedure olistOpen - начало нумерованного списка (тег <OL>).
procedure olistClose - окончание нумерованного списка (тег </OL>).
procedure dlistOpen - начало списка определений (тег <DL>).
procedure dlistClose - окончание списка определений (тег </DL>).
procedure dterm - термин списка определений (тег <DT>).
procedure ddef - определение термина (тег <DD>).
procedure preOpen - начало форматированного текста.
procedure preClose - окончание форматированного текста.

[Назад] [Содержание] [Вперед]


Comments: [email protected]
Copyright © CIT