|
Сервер поддерживаетс� Центром Информационных �ехнологий (095) 932-9212, 932-9213, 939-0783 E-mail: [email protected] | |
|
Сервер Информационных �ехнологий содержит море(!) аналитической информации
|
|
|---|---|
7.1 Введение
7.3 Состав
7.4 Установка
7.5 Использование
7.6 Спецификаци� процедур пакета htp
В данной главе отчета описываетс� свободно - распростран�емое программное обеспечение - пакет WOW. Дл� освоени� этого материала необходимо знание �зыка SQL и его процедурного расширени� PL/SQL от фирмы Oracle. Кроме этого необходимо знание основ администрировани� сервера Oracle. Информацию по PL/SQL Вы можете получить из документации по серверу Oracle, книга "PL/SQL Users Guide and Reference". Информацию об основах администрировани� сервера Oracle можно получить из этой же документации, книга "Oracle7 Server Administration Guide".
Пакет WOW предназначен дл� использовани� под ОС Unix.
Пакет WOW предназначен дл� обработки запросов от WWW - сервера (Web -) к SQL - серверу Oracle (-Oracle-) с генерацией динамических HTML - документов (-Web). Разработчик приложений, использующий WOW оперирует только с родным �зыком Oracle - PL/SQL, �вл�ющимс� процедурным расширением �зыка SQL. Это обуславливает высокую эффективность разработки приложений. Обработка созданных приложений непосредственно в сервере Oracle определ�ет высокую скорость исполнени� приложений.
Основна� иде� пакета WOW - преобразование запроса к WWW - серверу в вызов определенной процедуры PL/SQL. В качестве параметров процедуры, используютс� данные из запроса к WWW - серверу. Кроме этого, �зык PL/SQL дополн�етс� функци�ми вывода различных данных в формате HTML. Сфера технологических решений пакета приведена на рис. 7-1.
Структурно, WOW состоит из р�да исполн�емых программ, соответствующих спецификации CGI и набора пакетов PL/SQL (см. рис. 7-2).
Пакет htp содержит процедуры и функции, облегчающие формирование HTML - документа. Пакет htf содержит описание различных констант и функций, используемых при формировании HTML - документов.
Дл� корректной работы пакета необходимо правильно провести процедуру установки. Пакет WOW требует около 2Mb дискового пространства. На базовом сервере должны быть установлены:
В случае, когда пакет поставл�етс� в виде исходных текстов, необходимо произвести компил�цию и сборку исполн�емого модул� wowstub. При сборке wowstub необходимо использовать библиотеки установленного сервера Oracle или сетевого стека SQL*Net. Компил�ци� и сборка производитс� утилитой make на основании данных файла Makefile. Вам необходимо изменить р�д параметров Makefile дл� настройки на Вашу конфигурацию Oracle и Unix:
Независимо от сборки wowstub, необходимо создать р�д структур данных в БД Oracle.
Необходимо поместить модуль wowstub в каталог CGI программ Вашего WWW сервера. Необходимо переопределить р�д параметров файла wow, представл�ющего собой скрипт sh:
В случае если Вы используете версию от ЦНИ� НГУ, необходимо отредактировать все 4 файла: wow.win, wow.iso, wow.alt, wow.koi8.
Отредактированный файл wow (все 4 отредактированных файлы при использовании версии от ЦНИ� НГУ) необходимо поместить в каталог дл� CGI - программ Вашего WWW сервера.
Рассмотрим простейший пример с использованием пакета WOW. При обращении к WWW - серверу www.cnit.nsu.ru по URL:
http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test?answer=no
происходит следующа� цепочка действий (см. рис. 7-3):
URL, обращающийс� к процедуре PL/SQL должен быть построен по определенным правилам и содержать р�д элементов:
Например:
http://www.cnit.nsu.ru/cgi-bin/wow.win
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>&<название_параметра2>= <значение_параметра2>
Название параметра должно совпадать с названием параметра вызываемой процедуры. Число параметров должно в точности соответствовать числу параметров процедуры. Если хот� бы одно из этих требований не соблюдено, Вы получите сообщение об ошибке. Пор�док указани� параметров значени� не имеет. Большие и маленькие буквы в названии параметров равнозначны.
Число реально передаваемых параметров может и не совпадать с числом параметров, указанных в спецификации процедуры. В этом случае, все опускаемые параметры должны иметь значени� по умолчанию.
Пример:
http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test?answer=no
Исход� из описанного механизма работы пакета WOW можно сформулировать основные требовани� к PL/SQL - процедурам, обрабатывающим запросы от WWW - сервера.
Пример пакета 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>
| 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 | - окончание форматированного текста.
| | ||