Использование технологий WWW для доступа к базам данных

         

Администрирование Cold Fusion


Для администрирования в Cold Fusion предусмотрен специальный интерфейс администратора.

Этот интерфейс позволяет изменять различные параметры настройки Cold Fusion по четырем категориям:

Data Sources - используется для настройки источников данных ODBC,

для использования их с Cold Fusion.

Чтобы добавить источник данных, нужно нажать на кнопку "Add...",

выбрать один из установленных в системе драйверов ODBC

и задать определенные для него настройки. Переопределить эти настройки

можно воспользовавшись кнопкой "Setup...",

предварительно выделив конкретный источник данных. Если нужно

определить способы взаимодействия Cold

Fusion с источником данных, то нужно нажать на кнопку "Preferences..."

и определить такие атрибуты как имя пользователя, пароль,

допустимые операции с базой данных и др.

Templates - используется

для настройки логических путей до директорий в которых расположены

файлы с шаблонами Cold Fusion.

Debugging - используется

для настройки отладочных сообщений и сообщений об ошибках.

Mail - используется для настройки параметров SMTP mail

и позволяет просматривать журнал сообщений и ошибок.





Адреса


В HTML есть средство для оформления адресов (адрес будет, по возможности,

выделен шрифтом). Конечно, никто не заставляет пользоваться этой возможностью, но без ее описания наша книга не была бы полной.

Адрес оформляется с помощью тега
<ADDRESS> ... </ADDRESS>

Браузеры обычно выделяют его курсивом, то есть строка <ADDRESS> ул. Пирогова, д. 2 </ADDRESS> будет отображена как

ул. Пирогова, д. 2.



Аргументы командной строки


СGI-модуль в командной строке от сервера получает:

остаток URL после имени cgi-модуля в качестве первого параметра (первый параметр будет пуст, если присутствовало только имя cgi-модуля), и

список ключевых слов в качестве остатка командной строки

для скрипта поиска, или

чередующиеся имена полей формы с добавленным знаком равенства и соответствующих значений переменных.

Ключевые слова, имена и значения полей формы передаются декодированными (из HTTP URL формата кодирования) и перекодированными в соответствии с правилами кодирования Bourne shell так, что cgi-модуль в командной строке получит информацию без необходимости осуществлять дополнительные преобразования.



Ассоциативные массивы


Ассоциативные массивы или хэши содержат пары ``ключ'' и ``значение''.

Например:

\%map = ('red',0x00f,'blue',0x0f0,'green',0xf00);

Часто для удобства чтения между ``ключом'' и ``значением'' ставят оператор =>.

%map = (

'red' => 0x00f,

'blue' => 0x0f0,

'green' => )xf00

);



Библиотеки и функции на языке C


Одной из основных технологий создания CGI-модулей для реализации функций "преобразователя"

и "обработчика" сценариев 1-3 является язык C. Язык C - наиболее распространенный

язык программирования. В каждом ВУЗе есть специалисты, способные использовать его для создания приложений.

При решении описанных задач язык C можно использовать для создания следующих программ:

преобразователя, однократно преобразующего содержимое БД в сеть гипертекстовых

документов (рис. );

обработчика, динамически обрабатывающего запрос от WWW-сервера

к БД. (рис. );

перегрузчика из существующих БД в информационное хранилище (см.

рис. );

обработчика запросов от WWW-сервера к информационному хранилищу (рис. ).

Для поддержки этих функций создано большое количество библиотек и функций языка C,

готовых приложений в исходных текстах. В главе описывается использование языка C

для создания исполняемых CGI-программ.



Бинарные операторы


Звездочка * - умножение двух чисел. Cлэш / - деление числа на число.

Процент % - вычисляет модуль двух чисел, x - оператор повторения. В

скалярном контексте возвращает строку, состоящую из многократно повторенного

левого операнда, причем повторяется он то количество раз, которое стоит справа.

В списковом контексте он многократно повторяет список.

print 'a' x 80; напечатает букву a 80 раз.

@ones = (1) x 80; массив из восьмидесяти единиц.

@ones = (5) x @ones сделает все элементы равными пяти.

Бинарный плюс - операция сложения двух чисел.

Бинарный минус - операция вычитания двух чисел.

Бинарная точка - конкатенация строк.



Что такое progressive JPEGs и как ИХ делать


Существует возможность создавать GIF-файлы, которые отображаются черезстрочным

способом. Эта возможность является очень удобной для Web-страниц.

Не все знают, что подобная возможность имеется и в формате JPEG. Метод

этот называется progressive JPEGs. Сейчас все большее количество

программных пакетов начинает его использовать. Например для Adobe Photoshop

существует подключаемый модуль, создающий progressive JPEGs. Смотрите внимательно

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

такую функцию!



Что такое transparent/interlaced GIFs и как их делать


Графический формат GIF имеет несколько интересных возможностей, делающих его особенно привлекательным для WWW. К ним относятся возможности создавать ``прозрачные'' (transparent) изображения и изображения, проявляющиеся постепенно, по мере подкачки (interlaced). Эффект постепенного проявления достигается за счет черезстрочной отрисовки изображения: сначала появляются каждые четвертые строчки растра, затем каждые четвертые строчки со сдвигом на одну строку вниз и т.д. Таким образом, картинка появляется как бы в четыре приема. Эффект прозрачности состоит в том, что один из индексов палитры объявляется прозрачным, то есть при отображении вместо соответствующего цвета будет использоваться цвет ``из-под'' изображения, например, цвет фона документа.

Существует множество различных программ для большинства систем, позволяющих придать GIF-картинкам свойства прозрачности и черезстрочности. Из них

выделяются по своим возможностям и удобству использования:

для платформы MS Windows - GIF Construction Set by Alchemy Mindworks,

для UNIX-систем - git, Image Alchemy, PBMPLUS и прочие.



Цитаты и преформатированный текст


Иногда возникает ситуация, когда необходимо вставить в документ цитату,

исходный текст программы или просто текстовый документ, где формат

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

переводы строк там, где он хочет. Язык HTML имеет для возможности для

всех эти случаев.

Цитаты в HTML оформляются с помощью тега

<BLACKQUOTE> ... </BLACKQUOTE>

Браузер выделит цитату каким-либо способом, например шрифтом и/или вставит

горизонтальные отступы справа и слева.

Чтобы вставить в документ исходный текст можно воспользоваться тегом

<CODE> ... </CODE>

Текст будет выделен шрифтом фиксированной ширины.

Случай, когда в документе необходимо присутствие текста с фиксированным

форматом особенно распространен. Часто такая возможность применяется,

например, при включении в текст содержимого электронных писем или статей из

сети Usenet. Оформляется все это с помощью тега

<PRE>

текст1

...

...

текстN

</PRE>

При этом отображен он будет, по возможности, примерно так:

текст1

...

...

текстN



Cтруктуры данных


Perl поддерживает три типа данных:

скаляры массивы скаляров ассоциативные массивы скаляров (так называемые хэши).

Обычные массивы, как и в языке C, индексируются числами, начиная с нуля.

Ассоциативные массивы индексируются строками.

Простые скаляры (в дальнейшем мы будем также называть их переменными) всегда

начинаются со знака доллара: $, даже в том случае, когда мы обращаемся к

элементу массива.

?

$day простая переменная day

$day[28] 29 элемент массива day

$day{'Feb'} значение 'Feb' из хэша %day

$#day последний индекс массива @day

Простой массив начинается со знака @: ?

@day массив day - ($day[1],$day[2],...)

@day[3,4,5] то же, что и @day[3..5]

Ассоциативный массив (хэш) начинается со знака процент %:
%day (key1, val1, key2, val2, ...)

Каждый тип данных имеет свое именное пространство, поэтому вы можете использовать

одно и то же имя одновременно для скалярной переменной, массива или

хэша (а также для подпрограммы или метки) без опасения, что произойдет ошибка.

Perl различает большие и маленькие буквы: FOO, foo и Foo будут

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

знака подчеркивания, могут в дальнейшем содержать в себе цифры или знаки подчеркивания.

Имена,

начинающиеся с цифры, могут в дальнейшем содержать только цифры. Имена, начинающиеся не с буквы, цифры или подчерка должны состоять только из одного символа.

Большинство таких имен зарезервировано, например $$ является

идентификатором текущего процесса.

Интерпретация команды или величины часто зависит от требований контекста.

Существует два основных контекста: скалярный и списковый. Некоторые операции

возвращают список величин если в контексте подразумевается список и одну величину,

если контекст скалярный.

Например, операция &ora_fetch в скалярном контексте возвращает количество

выбранных строк:

$nfields = &ora_fetch($csr);

В списковом контексте она возвращает массив выбранных строк:

@array = &ora_fetch($csr);
Левый аргумент определяет контекст правого аргумента.



Деструкторы


Когда удаляется последняя ссылка на объект, этот объект автоматически удаляется.

Это может произойти даже после завершения программы, если ссылки на объект

содержались в глобальных переменных. Если необходимо контролировать процесс

удаления объекта, можно определить в объекте специальный метод, называемый

деструктором. Деструктор объекта (в отличие от C++) имеет

фиксированное имя DESTROY и вызывается перед удалением объекта. В нем можно

реализовать дополнительные процедуры, необходимые для корректного

завершения (например, удаление временных файлов, используемых объектом).

[]

[]

[]



Динамическое определение SQL выражения


В некоторых сложных приложениях может потребоваться, в зависимости

от значений параметров, определять не только содержание запроса,

но и его структуру. В Cold Fusion

предусмотрен тег DBSQL,

который может употребляться внутри тега DBQUERY,

доопределяя SQL - выражение,

в зависимости от значений параметров. Тег DBSQL

имеет единственный атрибут SQL,

значение которого будет добавляться к основному SQL

- выражению.

Пример

<DBQUERY NAME="SiteSearch"

DATASOURCE="Sites Database"

SQL="SELECT * FROM SITES

WHERE SiteType = #SiteType# ">

<DBIF #Form.City# is not "">

<DBSQL SQL=" AND City

= '#Form.City#' ">

</DBIF>

<DBIF #Form.SortOrder# is

not "">

<DBSQL SQL=" ORDER BY

#Form.SortOrder# ">

</DBIF>

</DBQUERY>



Динамическое создание гипертекстовых документов на основе содержимого БД


В этом варианте доступ к БД осуществляется специальной CGI-программой,

запускаемой WWW-сервером в ответ на запрос WWW - клиента.

Эта программа, обрабатывая запрос, просматривает содержимое БД и создает выходной HTML-документ,

возвращаемый клиенту (см.рис.1-3).

Это решение эффективно для больших баз данных со сложной структурой

и при необходимости поддержки операций поиска. Показаниями также являются частое обновление и невозможность

синхронизации преобразования БД в статические документы с обновлением

содержимого. В этом варианте возможно осуществлять изменение БД из WWW-интерфейсов.

К недостаткам этого метода можно отнести большое время обработки

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

загрузку средств поддержки БД, связанную с обработкой запросов от WWW - сервера.

Для реализации такой технологии необходимо использовать взаимодействие WWW-сервера

с запускаемыми программами CGI - Common Gateway Interface. Выбор программных

средств достаточно широк - языки программирования, интегрированные средства типа генераторов отчетов. Для СУБД со внутренними языками программирования существуют

варианты использования этого языка для генерации документов.



Для метода GET


Получить значение переменной QUERY_STRING

Декодировать имена и их значения (учитывая, что все пробелы

при декодировании сервером были заменены символом "+"

и все символы с десятичным кодом больше 128 преобразованы в символ

"%" и следующим за ним шестнадцатеричным кодом символа.)

Сформировать структуру соответствия "имя - значение"

для дальнейшего использования в cgi-модуле



Для метода POST


Получить из стандартного входного потока CONTENT_LENGTH символов

Декодировать имена и их значения (учитывая, что все пробелы

при декодировании сервером были заменены символом "+"

и все символы с десятичным кодом больше 128 преобразованы в символ

"%" и следующим за ним шестнадцатеричным кодом

символа.)

Сформировать структуру соответствия "имя - значение"

для дальнейшего использования в cgi-модуле

Очевидно, что отличие только в источнике данных. Поэтому, в принципе,

возможно создание единого модуля для методов POST и GET. Необходимо

только добавить в начало проверку значения переменной REQUEST_METHOD

для определения метода запроса. После формирования структуры "имя-значение"

можно приступить к решению задач, ради которых, собственно, создавался

cgi-модуль. Понятно, что задачи, решаемые cgi-модулем, могут быть

очень разнообразными (получение и обработка почты, доступ к базам

данных, гостевая книга и т.д.).

Следующим важным моментом является динамическое формирование cgi-модулем

HTML-документа (оформление результата работы модуля). Например,

таблицы выборки из базы данных.

Для этого cgi-модуль должен выдать в стандартный выходной поток

заголовок состоящий из строки:

Content-type: text/html и пустой строки (двух символов

CR)

После этого заголовка можно давать любой текст в формате HTML.



Дополнительные функции


Дополнительные возможности предоставляются функциями
&ora_titles()
&ora_length()

&ora_types()
&ora_autocommit()
&ora_commit()

&ora_rollback()
&ora_version()


&ora_titles

@titles = &ora_titles($csr)

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

&ora_title. Эта функция имеет один параметр - курсор. Заголовки обрезаются

до длины поля.


&ora_length

@length = &ora_length($csr)

Программа может определить длину каждого из полей, возвращенных запросом,

с помощью вызова функции &ora_length. Она имеет только один параметр - курсор и

возвращает массив целых чисел.


&ora_types

@types = &ora_types($csr)

Программа может определить тип каждого из полей, возвращенных запросом,

с помощью вызова функции &ora_types. Она имеет один параметр - курсор и возвращает

массив целых чисел. Эти типы определяются в документации по OCI и в файле

oraperl.ph для Oracle v6.


&ora_autocommit

&ora_autocommit($lda,$on_or_off)

Режим автоматического завершения транзакций можно установить или отменить

вызовом функции &ora_autocommit. Эта функция имеет два параметра:

идентификатор регистрации и булевскую переменную, которая указывает

действие, которое нужно выполнить. Если значение переменной ненулевое, то

режим включается, если нулевое, то отключается. По умолчанию режим не включен.

Режим включается на продолжительность пребывания в системе. Если есть

необходимость включать его только для одного оператора, то лучше делать

несколько регистраций и использовать для каждого оператора отдельный

идентификатор регистрации.


&ora_commit, &ora_rollback

&ora_commit($lda)

&ora_rollback($lda)

Изменения в базе данных могут быть сохранены или отменены вызовом этих

функций. Они имеют один параметр - идентификатор регистрации в системе.

Транзакции, результат которых уже был сохранен не могут быть отменены

&ora_rollback. Эти функции также действуют на все время пребывания в

системе, а не на отдельные операторы.


&ora_version

&ora_version()

Эта функция печатает версию и информацию об авторских правах, касающуюся

Oraperl. Она не возвращает ничего.



Дополнительные команды SQL


В теге DBOUTPUT, кроме выражения

SELECT языка SQL,

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

источника данных, SQL - команд,

включая:

INSERT - добавление записи

в таблицу.

UPDATE - модификация записи в таблице.

DELETE - удаление записи из таблицы.

Использование непосредственно команд SQL

вместо тегов DBINSERT и

DBUPDATE в некоторых случаях

может обеспечить большую гибкость и эффективность. Например, при

модификации или создании новой записи, появляется возможность

использовать все параметры и переменные доступные в шаблоне в

том числе и результаты определенных в шаблоне запросов.

Пример использования команды UPDATE

в теге DBQUERY приведен

в

[]

[]

[]



Дополнительные замечания по созданию DBML - шаблонов


В шаблонах DBML, для комментариев, используется три тире (<!---),

в отличие от двух в HTML (<!--).

Эта специальная форма синтаксиса для комментариев позволяет Cold

Fusion игнорировать теги и текст, содержащиеся внутри этого

комментария.

Ссылки на другие файлы (графические, HTML

и CGI программы), содержащиеся

в DBML шаблоне, должны использовать

полный путь, начиная с корневого каталога сервера.

Так как символ '#' является

специальным символом в Cold Fusion,

то чтобы включить его в область вывода, определяемую тегом DBOUTPUT,

нужно в шаблоне использовать два символа '#'

вместо одного. Это же правило относится и к двойной кавычке,

если этот символ нужно вставить, например, в атрибут SQL

(см. следующий абзац).

Cold Fusion не поддерживает

имена полей, содержащих пробелы, внутри тега DBOUTPUT.

Если в имени поля все же встречаются пробелы, то при определении

SQL выражения в теге DBQUERY,

для каждого такого поля следует задать псевдоним. Например,

SQL="select ""Full

Name"" as FullName from Persons"

Псевдонимы бывает, также, полезно применять для удобства, в случаях,

если имя поля велико.



Форматирующие теги


Если теперь набрать внутри тела документа несколько строк текста,

а потом просмотреть его в браузере (мы будем использовать этот англоязычный

термин вместо длинного ``программа просмотра''), то в окне появится текст, написанный простым мелким шрифтом, причем имеющиеся в исходном тексте переводы строк не сохранятся. Браузеры сами ``заливают'' текст на страницу, исходя при этом из доступной

ширины окна. Для того чтобы вставить ``насильный'' перевод строки, необходимо

воспользоваться тегом <BR> . При отображении браузер переведет строку

на месте появления этого тега.


ВНИМАНИЕ! ТЕГ <BR> ИСПОЛЬЗУЕТСЯ БЕЗ ЗАКРЫВАЮЩЕГО ЭЛЕМЕНТА </BR>. В HTML есть еще несколько тегов, обладающих подобным свойством. Их обычно называют пустыми, так как они не содержат ``внутреннего'' наполнения.

Если вам необходимо сделать так, чтобы в определенном месте текст НЕ МОГ быть разорван, напишите в этом месте тег <NOBR>

Для разбивки текста на параграфы используется тег
<P параметры>

Точнее, параграф помещается внутрь тега <P>...</P>, но так как вложенных параграфов не бывает, можно пропускать закрывающий тег

перед любым другим тегом, вызывающим вертикальный разрыв в тексте (такие теги

мы в дальнейшем будем называть блочными).

Тег <P> имеет один параметр ALIGN, указывающий на способ

выравнивания текста внутри параграфа: текст может быть выровнен по правому (RIGHT), левому (LEFT) краям или отцентрирован (CENTER). Если

параметр опущен, текст выравнивается по левому краю.

Чтобы отцентрировать параграф можно также пользоваться тегом
<CENTER>...</CENTER>

Еще одним способом разделения текста на части можно назвать горизонтальную линию. Линия является элементом языка HTML

и вставляется в текст посредством тега
<HR параметры>,

где параметры могут быть следующими:

WIDTH - задает ширину линии. Единицей измерения в HTML считается точка устройства вывода, то есть, указав в качестве параметра тегу <HR> WIDTH=100, вы создадите линию шириной 100 точек. Очевидно, что такой способ не очень удобен, так как документ может быть отображен на устройствах с различной разрешающей способностью (количеством точек по горизонтали и по вертикали) по-разному. По этой причине в HTML существует возможность задавать ОТНОСИТЕЛЬНЫЕ размеры элементов, то есть процент от общей ширины области отображения (окна браузера или листа бумаги).

Пример: указав в качестве параметра тегу <HR> WIDTH=50%, вы получите линию в половину области отображения документа.

SIZE - задает толщину линии.

- если этот параметр задан, линия не будет иметь тени.



Функции вывода в DBML


Для отображения, данные в нужном формате, в Cold

Fusion предусмотрены специальные функции. При использовании

такой функции, примененной к конкретному параметру, она заключается

в символ '#', например, #DateFormat(Form.LastUpdate)#.

Список основных функций

Функция

Описание

Пример

DateFormat

Отображает поле базы данных типа 'дата/время' или 'дата' в формате DD/MM/YY.

12/01/96

TimeFormat

Отображает поле базы данных типа 'дата/время' в формате HH:MI AM/PM..

10:22 AM

NumberFormat

Отображает числовые значения как целые числа, разделяя разряды запятой.

10,256
DecimalFormat

То же, что и NumberFormat, плюс отображаются два знака после десятичной точки.

10,256.3

DollarFormat

То же, что и DecimalFormat, плюс добавляется символ $ и вместо знака минус перед отрицательным значением оно помещается в скобки.

$10,256.73

YesNoFormat

Отображает данные логического типа как Yes или No. Все ненулевые значения интерпретируются как Yes, нуль - как No.

Yes
ParagraphFormat

Применяется при отображении данных введенных в поле TEXTAREA. Преобразует символ перевода строки в пробел, два перевода строки подряд - в тег параграфа HTML (<P>).

HTMLCodeFormat

Удаляет символ перевода строки и пропускает все специальные символы (>, <, ", &), применяя к тексту тег преформатирования HTML (<PRE>).

 
HTMLEditFormat

То же, что и HTMLCodeFormat, только без добавления тега <PRE>.

 

Кроме вышеперечисленных есть еще несколько

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

параметрами в шаблоне:

ParameterExists

Эта функция проверяет, доступен ли в шаблоне параметр с заданным

именем, возвращая Yes или

No. Например, чтобы проверить

был ли отправлен из формы параметр UserId,

используется следующее выражение:

<DBIF #ParameterExists(Form.UserId)#

is Yes>

PreserveSingleQuotes

Эта функция обычно используется в SQL

выражениях для устранения из значений параметров одиночных

кавычек, которые являются специальным символом в




SQL. Приведем пример

использования этой функции:

SELECT * FROM Persons WHERE

FullName Like '#PreserveSingleQuotes(Form.FullName)#%'

URLEncodedFormat

Функция заменяет пробелы на символ "+"

и все не латинские символы и цифры - шестнадцатеричным эквивалентом,

что позволяет использовать результат в строке URL.

IncrementValue и DecrementValue

Эти функции возвращают переданный им параметр, прибавив или отняв

от него единицу соответственно. Например, чтобы увеличить параметр

'OrderCount' можно воспользоваться

следующим выражением:

<DBSET #OrderCount# = #IncrementValue(OrderCount)#

ValueList и QuotedValueList

Используя в качестве аргумента имя поля конкретного запроса, эти

функции возвращают разделенный запятыми список значений этого

поля для каждой записи, возвращенной в результате выполнения запроса.

Например, если запрос возвращает четыре записи, то результат функции

ValueList будет иметь вид

11,22,33,44, а результат функции

QuotedValueList, примененной

к этим же данным, будет возвращать '11','22','33','44'.

Эти функции могут применятся для использования результата одного

запроса в операции IN последующего

запроса, например:

<DBQUERY NAME="Customers"

...определение запроса...>

<DBQUERY

NAME="CustomerOrders" DATASOURCE="EXAMPLE"

SQL="SELECT * FROM Orders

WHERE Customer_ID

IN ( #ValueList(Customer.CustomerID)#

)">


Гипертекстовые ссылки


 

Одной из самых мощных возможностей WWW является возможность организации

гипертекстовых связей между документами. Прежде чем описывать средства

языка HTML для организации таких связей, следует рассказать об идентификации

ресурсов в Internet. Объемы информации в Internet огромны, и существует

множество способов доступа к ним. Для указания местоположения отдельного

ресурса используется запись под названием URL (Uniform Resource Locator). Она описывает способ доступа к ресурсу и его местоположение.

URL имеет вид:

метод://[имя-пользователя@][хост][:порт][имя-ресурса],

где

метод идентифицирует метод обращения к ресурсу,

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

хост указывает сетевое имя (или сетевой адрес) хоста, на котором содержится ресурс.

порт: номер порта для доступа к сервису.

имя-ресурса идентифицирует ресурс на хосте и зависит от метода доступа.

Существуют идентификаторы способов доступа к ресурсам для большинства сервисов

Internet. Обозначения таковы:

http - для доступа по протоколу HTTP, используемому в WWW.

ftp - для доступа по протоколу FTP.

telnet - для доступа по протоколу telnet, эмуляция терминала.

gopher - для доступа к Gopher-серверам.

wais - для доступа к WAIS (Wide Area Information System).

news - для доступа к новостям Usenet.

file - для доступа к локальным файлам.

Чтобы оформить какой-либо элемент документа в качестве гипертекстовой

ссылки, достаточно лишь заключить его внутрь тега <A> (anchor).

Полный синтаксис тега таков:

<A параметры>

....

</A>

где параметры могут быть следующими:

HREF - обязательный параметр, определяет или URL или файл, на который мы ссылаемся. Если мы ссылаемся на файл, то поле HREF содержит имя файла в файловой системе Web-сервера.

NAME - если этот параметр указан, то ссылка никуда не ссылается.

Неочевидно, но в этом случае тег <A> указывает именованную метку в документе, на которую потом можно будет сослаться используя символ # в параметре HREF.

target - параметр, указывающий имя окна или рамки в которой будет отображен документ. Если окна или рамки с таким именем не существует, будет открыто новое окно.



Использование CGI при создании интерактивных интерфейсов


Сергей Нужин

4.1

4.2


4.2.1


4.2.2


4.2.3


4.2.4

4.3


4.3.1


4.3.2

4.4

Приложение 1:

При написании данной главы использовались материалы



Использование пакета Cold


5.1

5.2

5.3

5.4

5.5

5.6

5.7

5.8

5.9

5.10

5.11


5.11.1


5.11.2


5.11.3


5.11.4


5.11.5

5.12


5.12.1


5.12.2

5.13


5.13.1


5.13.2


5.13.3


5.13.4

5.14


5.14.1


5.14.2


5.14.3


5.14.4


5.14.5

При подготовке данной главы отчета использовались материалы

" Cold Fusion User Guide " (Руководство пользователя пакета Cold Fusion).



Основы использования WWW - технологий для доступа к существующим базам данных


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

1.1.

1.2.

1.3.


1.3.1.


1.3.2.


1.3.3.

1.4.

1.5.


1.5.1.


1.5.2.


1.5.3.


1.5.4.


1.5.5.


1.5.6.

1.6.



Подготовка гипертекстовых документов для World Wide Web


Михаил Родионов

2.1 Введение

2.2 Язык HTML


2.2.1 Структура HTML-документов


2.2.2 Теги HTML


2.2.2.1 Заглавные теги


2.2.2.2 Форматирующие теги


2.2.2.3 Комментарии


2.2.2.4 Заголовки


2.2.2.5 Шрифты


2.2.2.6 Списки


2.2.2.7 Цитаты и преформатированный текст


2.2.2.8 Адреса


2.2.2.9 Гипертекстовые ссылки


2.2.2.10 Верстка таблиц


2.2.2.11 Картрированные изображения


2.2.2.12 Специальные символы


2.2.3 Расширения программ просмотра


2.2.3.1 Обзор расширений


2.2.3.2 Расширения Netscape Navigator


2.2.3.3 Расширения MS Internet Explorer


2.2.3.4 Рамки (фреймы)



Установка и администрирование WWW -сервера


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

3.1

3.2


3.2.1


3.2.2


3.2.3


3.2.4


3.2.5

3.3


3.3.1


3.3.2


3.3.3


3.3.4


3.3.5


3.3.5.1


3.3.5.2


3.3.5.3


3.3.6



Графические изображения


Графические вставки являются наиболее объемными элементами обычных

Web-страниц. По этой причине большинство приемов оптимизации ориентировано

именно на изображения. В WWW используются (в основном) два типа форматов

хранения графики: GIF(Graphics Interchange Format) и JPEG(Joint Photographic

Experts Group). Оба они имеют свои достоинства и недостатки и имеют немного

различные области применения. Формат GIF имеет ограничение на количество

одновременно используемых в одном изображении цветов, их не может быть

больше 256. При этом достигается довольно неплохой коэффициент сжатия

без потерь (то есть, упакованное изображение полностью соответствует оригиналу)

так как используется алгоритм LZW, отчасти используемый во многих популярных

программах сжатия данных (ZIP, ARJ, LHA). Формат JPEG всегда использует

так называемую ``полную'' цветовую модель, позволяя иметь в одном изображении

очень много цветов (а именно - до ). Обычно такая

обширная цветовая гамма необходима для хранения цифровых фотографий.

Однако при таком великолепии цветов формат имеет один ``недостаток'',

одновременно являющийся его достоинством: использование алгоритма сжатия с

потерями. Это означает, что при упаковке изображение будет ИЗМЕНЕНО для

достижения нужного коэффициента сжатия. На фотографиях такие изменения,

связанные с устранением избыточной информации, почти не воспринимаемой

глазом, почти не заметны, тогда как схему или график алгоритм может просто

изувечить. Тем не менее, при хранении многоцветных изображений типа

фотографий формат является предпочтительным, так как обеспечивает

очень высокую степень сжатия.

Таким образом мы пришли к основополагающему моменту оптимизации размера -

выбору формата хранения данных. Как уже говорилось выше, если нужна

точность сохранения каждого пиксела (точки изображения) и ограничение

на количество цветов не так уж важно, используйте формат GIF. Если же

необходимо иметь в изображении больше чем 256 цветов, не используя

никаких технологий смешивания, придется остановиться на формате JPEG,


обеспечив с помощью подбора коэффициента сжатия оптимальное соотношение

качества и байтового размера. Итак, первое правило:

Правильно выбирайте формат хранения изображения.

Помните, чем больше цветов имеет изображение, тем больше оно занимает места.

Очень часто при сохранении даже очень простых картинок в формате GIF выбирается

палитра из 256 цветов (8 битов на точку). Это не всегда оправдано, так как

иногда изображение содержит гораздо меньше цветов и может быть сохранено

с гораздо более низким цветовым разрешением (количеством бит на точку).

Например, если в изображении используется, скажем, 50 цветов, оно может быть

сохранено с палитрой в 64 цвета (6 битов на точку). Это может стоить

почти 30-ти процентной экономии размера! К сожалению, этот трюк не применим

к изображениям в формате JPEG, так как этот формат всегда использует

полную цветовую модель.

Итак, второе правило:

Сохраняйте изображения с цветовым разрешением, соответствующим количеству

цветов.


Труднее всего алгоритмам сжатия даются плавные цветовые переходы (у плавных

цветовых переходов имеются также и другие недостатки). Посему старайтесь

ими не злоупотреблять, если этого можно избежать. Кроме того, существует

проблема ограничения числа одновременно отображаемых цветов на устройствах

вывода (не у всех есть супер-гипер-термоядерные графические адаптеры с 16-ю

мегабайтами видеопамяти и ускорителями трехмерной графики!). То, что на одних

системах выглядит не миллион долларов, может повергнуть пользователей

старых добрых 256-ти цветных систем в состояние мрачного уныния.

Проверяйте вновь созданные Web-страницы на как можно более широком спектре

систем с различными возможностями.

Третье правило:

Избегайте сложных цветовых эффектов, они могут вызвать сильный рост

объема получаемых файлов.


Не все графические пакеты сами хорошо оптимизированы. Этот факт хорошо

иллюстрируется тем, что сохраняемые GIF-файли все еще имеют в себе избыток

информации. Окончательно ``выжать'' из них все лишнее (например, устранить



неоптимальности сжатия и устранить комментарии) помогают специальные

утилиты. Одной из таких утилит является свободно распространяемая

программа giflite для системы DOS. Она поистине творит чудеса, уменьшая

GIF-файлы на 10-50 процентов, не изменяя при этом хранящихся в них

изображений. Аналогом этой программы для систем семейства UNIX является

утилита gifblast (свободно распространяется в исходных текстах).

Обе эти программы можно найти на многих крупных FTP-серверах (воспользуйтесь

системой archie или одной из крупных поисковых систем по свободному

программному обеспечению вроде

или Jumbo.

Полученное нами четвертое правило гласит:

Используйте программы оптимизации GIF-файлов, они могут творить чудеса!

Всем известен способ делать GIF-файлы постепенно появляющимися (interlaced),

что позволяет достичь эффекта ускорения загрузки. Но далеко не все знают,

что при этом файлы становятся больше...Этот печальный факт вызван принципом

работы алгоритма LZW, используемого в формате GIF. Дело в том, что при

кодировании черезстрочного изображения строки его обрабатываются в порядки их

последующего отображения, то есть: первая, четвертая, седьмая и т.д. Это

эквивалентно сжатию другого изображения, состоящего из тех же строк, что и

исходное, только в другом порядке. Представьте, что оно из себя представляет!

Изображение становится сложнее с точки зрения наличия повторяющихся элементов.

Следствие -- увеличение размера.

Таким образом, Пятое правило говорит нам:

Не потеряйте желаемого эффекта ускорения загрузки, используя interlaced

GIF-файлы. Они могут намного сильно больше, чем раньше.


В последних версиях Netscape Navigator появился новый параметр тега <IMG>

под названием LOWSRC, который позволяет задать изображение низкого цветового

разрешения (обычно и вовсе черно-белое), которое должно быстро передаваться

и отображаться в то время, пока настоящее изображение (обычно большого размера)

подкачивается браузером. Не обманывайтесь! Добавляя в вашу страницу еще одно



изображение, вы только увеличите ее объем. Лучше сделайте более информативную

запись в параметре ALT тега <IMG>.

Шестое правило:

Параметр LOWSRC -- не спасение от медленных каналов связи а,

скорее, наоборот.


Иногда приходится вставлять в документ однотонное изображение, вроде

одноцветной разделительной полосы. При этом можно очень сильно сэкономить

в размерах, используя параметры WIDTH и HEIGHT тега <IMG>. Если указать

в них размеры, отличающиеся от реальных размеров растра изображения,

то изображение будет смасштабировано (увеличено или уменьшено) до указанных

размеров. Естественно, что сложные картинки при этом сильно испортятся, тогда

как простые однотонные вовсе не пострадают. Таким образом, можно создать

совсем небольшое изображение и, указав нужные размеры, достичь необходимого

эффекта с гораздо меньшими затратами.

Седьмое правило будет таким:

Используя параметры WIDTH и HEIGHT тега <IMG>, можно масштабировать

изображения, экономя, таким образом, на размерах.



Хороший и плохой стили


За годы существования WWW выработалось множество рекомендаций

относительно ``хорошего стиля'' Web-документов.

Большое количество информации доступно по ссылкам с Web-сервера

.

Здесь приводится лишь краткий перечень правил, которые рекомендованы

к использованию при создании Web-страниц.

Не делайте слишком длинных страниц. Слишком длинные страницы, содержащие

много текста и мало иллюстраций, непривлекательны для пользователей.

Не вставляйте в документ слишком больших изображений. Не все любят ждать, и

не у всех есть быстрые линии связи! Обычный человек теряет интерес к

странице после ожидания ее содержимого в течение 10 секунд. Опытные

пользователи Internet могут ждать до 15 секунд, но не испытывайте их терпения!

Позаботьтесь о навигации на страницах, то есть предусматривайте содержание,

горизонтальные и вертикальные ссылки в иерархии страниц, тщательно планируйте

топологию страниц. Ни в коем случае не создавайте ``страниц-сирот'', на

которые нельзя попасть ниоткуда, кроме спрятанных ссылок.

Размещайте наиболее важную информацию в начале страниц. Не все любят

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

Тщательно прочитывайте страницы перед выкладыванием их на всеобщее обозрение,

дабы избежать досадных ошибок и опечаток. Проверяйте правильность HTML документов

и корректность ссылок.

Не рассчитывайте, что у всех, кто будет смотреть сделанные вами страницы,

будут экраны высокого разрешения, избегайте слишком широких изображений и

таблиц.

Если вы хотите сделать страницу с темным фоном и светлым текстом, обязательно

задайте с помощью параметра BGCOLOR темный фоновый цвет. Если фоновое

изображение по каким-либо причинам не будет отображено, светлый текст все

равно будет читаться.

Указывайте URL страницы внизу самой страницы. Это помогает пользователям

передавать друг другу информацию о вашей странице.

Осторожно используйте рамки: будучи примененными неправильно, они затрудняют

навигацию, делают невозможным корректную запись URL в базу закладок,


сильно затрудняют распечатку страниц на принтерах.

Не переусердствуйте при вставлении в ваши страницы анимации. Пользователь

будет постоянно отвлекаться на мелькание. Сосредоточивайте внимание

пользователя на том, что вы хотите, чтобы он для себя отметил. В этом

отношении тег BLINK - сущее зло.

Не пытайтесь привлечь пользователя фразами о ``новейших Web-технологиях'',

использованных в ваших страницах, сосредоточтесь на информационном

наполнении. Если хоть один из них найдет на ваших страницах ошибку, будьте

уверены: он больше сюда не вернется. Не делайте ``петушащихся'' страниц,

их время уже прошло.

Если вы переопределяете цвета для документа, позаботьтесь о том, чтобы ссылки

выделялись на фоне остального текста.

При составлении иерархии ваших страниц, позаботьтесь о том, чтобы имена

файлов и каталогов несли в себе хоть какую-нибудь смысловую нагрузку и были

понятны не только вам. Пользователям, возможно, придется набирать URL на

клавиатуре, поэтому избегайте использования специальных символов. Некоторые

пользователи не знают даже как набрать на клавиатуре тильду (~).

После выкладывания страниц позаботьтесь (или уговорите вашего нанимателя

позаботиться) о поддержании их в ``свежей'' форме,

не оставляйте под знаком ``Новое! Все сюда!'' информацию годовалой давности.

Это создает эффект запущенности, и пользователи быстро потеряют интерес к

вашим страницам.

Всегда используйте параметр ALT тега IMG для указания текста, отображаемого

вместо изображения в случае невозможности его отображения. Это сильно

помогает пользователям браузеров, работающих в алфавитно-цифровом режиме, а также

пользователям с медленными каналами связи.

Всегда используйте параметры WIDTH и HEIGHT тега IMG для указания точечных

размеров изображений. Это помогает браузерам корректней отображать страницы

по мере их получения по сети и облегчает пользователям оценку времени появления

изображения, так как большинство браузеров отображает рамку вокруг места, где

будет отображено изображение.

Не создавайте interlaced GIF-изображений с прозрачностью. Некоторые браузеры

не могут их корректно отображать.


HTTP Cookies


Cookies - это механизм, позволяющий

приложениям о стороны сервера сохранять и использовать параметры

на стороне клиента. Этот механизм поддерживается всеми версиями

Netscape Navigator, MS

Internet Explorer начиная с версии 2.0, и будет поддерживаться

остальными Web - браузерами

в ближайшем будущем.

Для сохранения параметров в Cookies.

Используется тег DBCOOKIE,

имеющий следующий синтаксис:

<DBCOOKIE NAME="Имя_параметра"

VALUE="Значение параметра" EXPIRES="Срок действия"

SECURE>

В атрибутах NAME и VALUE

определяются имя и значение параметра соответственно. Атрибут

EXPIRES определяет, когда

закончится срок действия этого параметра. Этот атрибут может быть

задан как дата т.е. '10/09/97',

количество дней (т.е. 10, 100), NOW

(удаляет параметр) или NEVER.

Наличие необязательного атрибута SECURE

запрещает отправлять параметр браузеру, если тот не поддерживает

стандарт SSL.

К параметрам, хранимым в cookies

можно обращаться внутри любого тега DBML,

добавляя префикс 'Cookies.', например:

<DBOUTPUT>

#Cookies.User_Id#

</DBOUTPUT> .



Интерфейс CGI


Помимо доступа к статическим документам сервера существует возможность

получения документов как результата выполнения прикладной программы.

Такая возможность реализуется на сервере WWW благодаря использованию

интерфейса CGI (Common Gateway Interface). Спецификация CGI описывает

формат и правила обмена данными между ПО WWW сервера и запускаемой

программой.

Для инициирования CGI необходимо,

чтобы в запрашиваемом URL был указан путь до запускаемой программы.

ПО WWW сервера исполняет эту программу, передает ей входные параметры

и возвращает результаты ее работы,

как результат обработки запроса, клиенту. CGI - программой может

являться любая программа локальной операционной системы сервера

- в двоичном виде или в виде программы для интерпретатора (Basic,

SH, Perl и т.д.).

С целью облегчения администрирования CGI - программ, а также для

удовлетворения требованиям безопасности CGI - программы группируются

в одном или нескольких явно указанных серверу каталогах. По умолчанию

это каталог cgi-bin в иерархии серверных каталогов,

однако, его имя и положение

могут отличаться.

Например:

клиент, обращающийся к CGI - программе test-query, будет использовать

URL http://<имя_сервера>/cgi-bin/test-query

Интерфейс CGI позволяет расширить границы применения WWW - технологии.

CGI - программа может обрабатывать сигналы с датчиков установок,

взаимодействовать с мощным сервером баз данных, переводить и т.п.

Полное описание интерфейса и требований к приложениям,

использующих его, приведены

в главе 4 настоящего отчета.



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


Рассмотрим простейший пример с использованием пакета WOW.

При обращении к WWW - серверу

www.cnit.nsu.ru

по URL:

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

происходит следующая цепочка действий

(см. ):

WWW - сервер интерпретирует

это обращение как запуск CGI - программы

wow.win.

Программа wow.win

интерпретирует параметры как вызов процедуры test

пакета example

с параметром answer

имеющим значение no,

созданной в схеме WWW

сервера Oracle.

Сервер Oracle исполняет

эту процедуру и все процедуры и функции,

вызываемые из нее. Выходные

данные, представляющие динамически

созданный HTML - документ,

передаются программе wow.win.

Программа wow.win перекодирует

выходной документ в кодировку Microsoft

CodePage 1251, используемую в Windows

- приложениях, и передает

его WWW - серверу.

WWW - сервер возвращает

созданный документ, как результат

запроса, WWW - клиенту.

URL, обращающийся к процедуре

PL/SQL должен быть построен

по определенным правилам и содержать ряд элементов:

Указатель на модуль пакета WOW,

находящийся в каталоге CGI

- программ. Расширение

программы wow

- .koi8, .win, .iso,

.alt определяет кодировку WWW

- клиента:

КОИ-8

Microsoft Code Page 1251

ISO 8859-5

Microsoft Code Page 866

Например:

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

Имя процедуры 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>&<название_параметра2>=

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

Название параметра должно совпадать с названием параметра вызываемой

процедуры. Число параметров

должно в точности соответствовать числу параметров процедуры.

Если хотя бы одно из этих требований не соблюдено,

Вы получите сообщение об ошибке.

Порядок указания параметров значения не имеет.

Большие и маленькие буквы в названии параметров равнозначны.

Число реально передаваемых параметров может и не совпадать с числом

параметров, указанных в спецификации

процедуры. В этом случае,

все опускаемые параметры должны иметь значения по умолчанию.

Пример:

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

Исходя из описанного механизма работы пакета WOW

можно сформулировать основные требования к PL/SQL

- процедурам, обрабатывающим

запросы от WWW - сервера.

Все входные переменные, передающиеся

через WOW в процедуру всегда

имеют тип varchar2. Если Вы

хотите использовать какой - либо другой тип данных,

необходимо использовать функции преобразования из varchar2.

В пакете 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>


Использование результатов выполнения запросов


После выполнения запроса, результат его выполнения может быть

использован в качестве динамического параметра для спецификации

другого запроса. Например, если создан запрос с именем 'FindUser',

который возвращает идентификатор записи, расположенный в поле

'USER_ID', то можно использовать

этот идентификатор в другом запросе, используя имя запроса как

префикс к имени поля, разделяя их точкой (т.е. #FindUser.UserId#).

Каждый запрос, описанный тегом DBQUERY,

после выполнения имеет два специальных атрибута,

RecordCount и CurrentRow,

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

запроса записей и о текущей записи, обрабатываемой тегом DBOUTPUT,

соответственно. Используются эти атрибуты так же как и

поля запроса (#FindUser.RecordCount#).



Использование результатов запроса для динамического создания HTML - документа


Для вывода данных возвращаемых в результате выполнения запроса

определенного в DBQUERY применяется тег DBOUTPUT. Внутри этого

тега, связанного с конкретным запросом, может находиться обычный

текст, теги HTML, ссылки на поля определенные в запросе. При обработке шаблона, содержимое

тега DBOUTPUT отправляется клиенту для каждой записи, возвращаемой в результате выполнения

запроса, с подстановкой соответствующих значений параметров и полей.

Тег DBOUTPUT имеет следующий

синтаксис:

<DBOUTPUT QUERY="имя

запроса" MAXROWS=n>

Текст, теги HTML,

ссылки на поля и параметры (т.е.

#Name#)

</DBOUTPUT>

Атрибут QUERY применяется

для указания имени запроса DBQUERY,

результат выполнения которого будет использоваться, а атрибут

MAXROWS определяет максимальное

количество записей этого запроса, которые будут переданы для вывода

в тег DBOUTPUT.

Пример

Для вывода результата выполнения запроса с именем 'AllPersons',

отображая имя персоны и телефон, и разделяя записи горизонтальной

линией, может использоваться следующая конструкция:

<DBOUTPUT QUERY="AllPersons"

MAXROWS=50>

<HR>

#FullName# (Телефон: #Phone#

) <BR>

</DBOUTPUT>

Результат обработки этого тега будет иметь вид:

<HR>

Иванов Иван Иванович (Телефон:

222-22-22 ) <BR>

<HR>

Петров Петр Петрович (Телефон: 444-44-44 ) <BR>



Использование списочных полей с множественным выбором


Если HTML - форма содержит

поле типа SELECT с множественным

выбором, либо поля с одинаковыми именами (например, поля типа

checkbox), то данные будут

переданы в шаблон в виде, разделенных запятыми, списка значений.

Такая форма представления наиболее удобна для использования в

операторе IN языка SQL.

Пример

Предположим, что в форме содержится поле:

<SELECT NAME="SelectedPersons"

MULTIPLE SIZE="3">

<OPTION VALUE="1">Иванов

И.И.

<OPTION VALUE="2">Петров

П.П.

<OPTION VALUE="3"

SELECTED>Сидоров С.С.

</SELECT>

Этот параметр, переданный в шаблон, может быть использован в следующем

SQL - выражении:

SQL="SELECT * FROM Persons

WHERE Person_ID IN ( #SelectedPersons#

)

Следует обратить внимание на то, чтобы параметр, который используется

в операторе IN, был не пуст.

Для этого можно пользуясь стандартными средствами Cold

Fusion описать поле как требуемое, либо использовать поле

типа HIDDEN с тем же именем

и с заведомо неверным значением. Например, предыдущий пример можно

дополнить следующим полем:

<INPUT TYPE="HIDDEN"

NAME="SelectedPersons" VALUE="-1">



Язык программирования Perl


Язык Perl был создан для повышения эффективности обработки текстовых документов.

Он ориентирован на обработку строк. В настоящее время язык получил большое распространение

как инструмент создания исполняемых модулей WWW-сервера. Существующие пакеты расширения

обеспечивают доступ к SQL-серверам непосредственно из Perl-программы.

Это позволяет использовать его для решения всех задач, возникающих при обеспечении WWW-доступа

к базам данных. Perl эффективен также при обработке произвольных структур данных:

существующих отчетов, списков, карточек в электронном виде.

В главе приведены примеры использования его для создания HTML

- документов, доступа к SQL-серверам, dbf-ориентированным базам данных. В Приложении описаны

все основные конструкции языка.



Экспоненциальный оператор


В Perl-е двойная звездочка ** является экспоненциальным оператором. Он

требует к себе даже больше внимания, чем унарный минус: -2**4 это -(2**4), но

не (-2)**4.



ЭтаI


В случае, когда пакет поставляется

в виде исходных текстов, необходимо

произвести компиляцию и сборку исполняемого модуля wowstub.

При сборке wowstub необходимо

использовать библиотеки установленного сервера Oracle

или сетевого стека SQL*Net.

Компиляция и сборка производится утилитой make

на основании данных файла Makefile.

Вам необходимо изменить ряд параметров Makefile

для настройки на Вашу конфигурацию Oracle

и Unix:

ORACLE_HOME - должен совпадать

с каталогом, определенным

переменной ORACLE_HOME сервера

Oracle.

DEST_DIR - должен указывать

на каталог, хранящий CGI

модули Вашего WWW сервера.

DOC_ROOT - должен указывать

на каталог в котором будет размещена документация по WOW.

Каталог должен быть доступен для WWW

сервера.



ЭтаII


Независимо от сборки wowstub,

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

Создать пользователя, через

которого WOW будет осуществлять

доступ к данным и исполнение рабочих процедур.

Обычно используется имя WWW.

Создать из под вышеупомянутого пользователя все необходимые

структуры данных и примеры. Для

этого необходимо исполнить следующие 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:

ORACLE_HOME - в соответствии

с параметром ORACLE_HOME Вашего

сервера Oracle или стека SQL*Net;

TWO_TASK - в соответствии

с параметром TWO_TASK клиентской

части Вашего сервера Oracle;

WOW_UID - в соответствии

с именем пользователя и его паролем,

созданными на этапе

II установки.

В случае если Вы используете версию от ЦНИТ НГУ,

необходимо отредактировать все 4 файла:

wow.win, wow.iso, wow.alt,

wow.koi8.

Отредактированный файл wow (все

4 отредактированных файлы при использовании версии от ЦНИТ НГУ)

необходимо поместить в каталог для CGI

- программ Вашего WWW сервера.



Как сделать так, чтобы изображения были гладкими?


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


Рис. П1.1.2: Устранение зазубренности: увеличенное изображение

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



Картрированные изображения


Очень мощным средством организации гипертекстовых ссылок является

так называемые ``картрированые изображения'' (imagemaps). Они представляют

собой изображения с чувствительными областями, то есть, выделение различных

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

гипертексту в различных ``направлениях''.

Картрированные изображения бывают двух типов: обрабатываемые на сервере

(server-side) или на клиенте (client-side).

Для создания карт на стороне клиента используется тег HTML под названием

<MAP>. Синтаксис тега таков:

<MAP NAME=``имя карты''>

<AREA параметры>

...

<AREA параметры>

</MAP>

где параметры тега <AREA> могут быть такими:

SHAPE - определяет форму активной области для карты. Может принимать значения RECT, CIRCLE, POLY, DEFAULT, соответствующие областям

прямоугольной, круглой, многоугольной и области по умолчанию соответственно.

Все типы областей, кроме DEFAULT, требуют указания координат в атрибуте

COORDS.

COORDS - определяет координаты областей. В зависимости от типа области может иметь вид: для прямоугольной--значения координат верхнего левого

и правого нижнего углов, (``x1,y1,x2,y2''); для круговой--координаты

центра и радиус (``x,y,r''); для многоугольной--список координат вершин

(``x1,y1,x2,y2,x3,y3,...'');

HREF - определяет URL, на который ссылается данная область.

NOREF - указывает, что область ``мертва'', то есть за ней не скрывается ссылка.

Чтобы использовать локальную карту на изображении в параметре USEMAP

тега <IMG> необходимо указать имя карты.

Например:

<MAP NAME="mymap">

<AREA SHAPE="RECT" COORDS="420,220,520,260" HREF=\\

"http://www.some.com/rect/">

<AREA SHAPE="CIRCLE" COORDS="320,150,30" HREF=\\

"http://www.some.com/circle">

<AREA SHAPE="POLY" COORDS="150,450,300,450,225,240" \\

HREF="http://www.some.com/poly">


<AREA SHAPE="DEFAULT" HREF="http://www.some.com/">

</MAP>

......

<IMG SRC="picture.gif" ALT="Imagemap" BORDER="0" WIDTH="640" \\

HEIGHT="480" USEMAP="#mymap">

даст примерно слежующую карту на изображении:



Рис. 2.2.1: Пример карты на изображении

Для того, чтобы создать карту, обрабатываемую на сервере, необходимо

административное вмешательство, так как на сервере придется изменять

файл конфигурации для CGI-модуля обработки информации от карты.

При использовании различных Web-серверов формат описания карты

на сервере может варьироваться. Два наиболее распространенных формата

произошли от HTTP-серверов NCSA и CERN. Приведем пример использования

карты с сервером NCSA httpd.

На стороне сервера, файл (например) /usr/local/etc/httpd/conf/imagemap.conf:

# This is a map for NCSA server

test_map : /home/joe/public_html/maps/test.map

Использовать эту карту можно примерно таким образом:

<A HREF="http://www.myhost.domain/cgi-bin/imagemap/test_map">

<IMG SRC="test_img.gif" ALT="Server-side imagemap" WIDTH="320" \

HEIGHT=200 ISMAP></A>

Ключевым в данном примере является слово ISMAP, которое указывает браузеру,

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

о координатах курсора указательного устройства относительно изображения,

после чего ждать от сервера ответа в виде URL, на который браузер должен

``перейти''.

Видно, что для реализации карты, обрабатываемой сервером, требуется

больше шагов, но иногда без карт такого рода просто не обойтись: например,

когда требуется ТОЧНО знать координаты внутри изображения (скажем, когда

обрабатывается какая-либо шкала).

Для создания карт существует множество программ для различных OS,

например ImageMap компании .

Эта программа существует в версиях для MS Windows и для Linux.


Классы


В Perl 5 нет специального синтаксиса для описания классов, но пакеты могут

функционировать как классы, если они содержат подпрограммы функционирующие как

методы. Такие пакеты могут также брать некоторые методы из других пакетов-классов.

Для этого необходимо перечислить имена других пакетов в массиве @ISA.


В отличие от C++, Perl не имеет специального синтаксиса для описания

классов. Классом является пакет, чьи подпрограммы выступают в качестве методов.

Для каждого пакета определен специальный массив @ISA, в котором перечислены

пакеты, подключенные к данному пакету. Таким образом в Perl реализован механизм

наследования методов. Метод, принадлежащий другому объекту, подключается как

подпрограмма.



и во всяком языке программирования,


Как и во всяком языке программирования, в HTML есть способ закомментировать
часть текста так, чтобы она не обрабатывалась программами просмотра.
Комментарии заключаются между последовательностями <! - -  и - - >.
Пример комментария:
<!-- этот текст закомментирован -->

Конфигурационные файлы Режимы работы сервера


Главный файл конфигурации (ГКФ) сервера содержит все параметры,

необходимые серверу для начала работы, а также пути других конфигурационных

файлов. По умолчанию, главный файл конфигурации сервера находится

в подкаталоге conf/ каталога и имеет имя httpd.conf.

При запуске серверу можно указать другой путь, используя ключ

-f.

Например:

/usr/local/sbin/httpd -f /etc/httpd.config

Ниже приведены параметры, указываемые в главном файле конфигурации

сервера, с необходимыми пояснениями. Значения параметров отделяются

от названия одним или несколькими пробелами или табуляциями. Если

одному параметру соответствуют несколько значений, они разделяются

запятыми.

Параметры запуска серверных процессов

ServerType

Определяет способ запуска сервера:

ServerType inetd

серверный процесс запускается в ответ на каждое обращение клиента

через механизм inetd. После обработки запроса, сервер прекращает

свою работу.

ServerType standalone

серверный процесс запускается один раз и находится в состоянии

ожидания запросов клиентов. После обработки запроса, сервер остается

запущенным.

Port

Определяет порт tcp, по которому сервер принимает запросы клиентов.

Этот параметр используется только для сервера типа standalone.

При механизме старта inetd порт определяется конфигурационным

файлом сервера inetd - inetd.conf.

Стандартный порт для WWW - сервера - 80.

Пример:

Port 80

StartServers и MaxServers

Для режима standalone определяют количество процессов сервера

при многопоточной обработке. StartServers - указывает

число процессов сервера, создаваемых при запуске httpd. MaxServers

определяет максимальное число одновременно работающих процессов

сервера.

Пример:

StartServers 3

MaxServers 5

TimeOut

Определяет время (в секундах), которое серверный процесс, запущенный

в режиме standalone, будет

ожидать повторного обращения клиента. По умолчанию используется

1200 секунд.

Пример:

TimeOut 3600

User и Group

Определяют имя пользователя и группу, права которого получает


сервер при запуске в режиме standalone. Изменение прав сервера

производится с целью предотвращения доступа WWW - клиентов к файлам

операционной системы, не являющимися общедоступными. Например:

User nobody

Group nobody



Информационные параметры для WWW - клиентов

ServerName

Определяет имя сервера, которое пересылается клиенту вместе с

другими параметрами запроса. Используется в случае, если сервер

имеет несколько имен (синонимов).

Например:

ServerName Indy.cnit.nsu.ru



ServerAdmin

Определяет адрес электронной

почты администратора сервера. При возникновении каких - либо ошибок

в работе сервера, он выдает клиенту сообщение с просьбой проинформировать

о них администратора сервера по указанному Email.

Например:

ServerAdmin fancy@nsu.ru

Расположение необходимых файлов и каталогов

ServerRoot

Определяет местоположение каталога ServerRoot. По

умолчанию, это /usr/local/etc/httpd

или измененное значение параметра HTTPD_ROOT файла src/config.h.

Например:

ServerRoot /var/httpd

ErrorLog

Определяет местоположение файла - журнала ошибок, в который заносятся

все сообщения об ошибках, возникающих в процессе работы сервера.

Если значение не начинается со slash (/), подразумевается путь

относительно ServerRoot.

Например:

ErrorLog logs/errlog

Журналом ошибок является файл /var/httpd/logs/errlog

TransferLog

Определяет местоположение файла - журнала доступа, в который заносятся

данные обо всех передачах данных между WWW - клиентом и WWW -

сервером. Если значение не начинается со slash (/), подразумевается

путь относительно ServerRoot.

Например:

TransferLog logs/translog

Журналом доступа является файл /var/httpd/logs/translog



AgentLog

Определяет местоположение файла - журнала клиентов, в который

заносятся данные о программном обеспечении, используемом WWW клиентами

при доступе к данному серверу. Если значение не начинается со

slash (/), подразумевается путь относительно ServerRoot.

Например:

TransferLog logs/agentlog



Журналом клиентского программного обеспечения является файл /var/httpd/logs/agentlog



RefererLog

Определяет местоположение файла в который записываются все факты

обращений к данным сервера в виде ссылок от клиентов к данным.

Если значение не начинается со slash (/), подразумевается путь

относительно ServerRoot.

Например:

RefererLog logs/reflog

Журналом ссылок является файл /var/httpd/logs/reflog



PidFile

Определяет местоположение файла, хранящего номер процесса запущенного

WWW - сервера. Используется для остановки работы сервера путем

посылки сигнала командой kill. Если значение не

начинается со slash (/), подразумевается путь относительно ServerRoot.

Например:

PidFile logs/httpd.pid

Номер процесса - сервера записывается при старте в файл /var/httpd/logs/httpd.pid



AccessConfig

Определяет местоположение файла управления доступом. Если значение

не начинается со slash (/), подразумевается путь относительно

ServerRoot.

Например:

AccessConfig conf/access.conf



TypesConfig

Определяет местоположение файла, содержащего список соответствий

расширений файлов ОС типам MIME. По умолчанию используется файл

conf/mime.types в каталоге, определяемом ServerRoot. Если не начинается

с backslash (/), подразумевается путь относительно ServerRoot.

Например:

TypesConfig /etc/mime.types



CoreDirectory

Определяет местоположение каталога, в который записывается файл

дампа памяти при возникновении сбоя.

Например:

CoreDirectory /tmp



Параметры протоколирования

LogOptions

Определяет, будут ли несколько протоколов записываться в один

файл (Combined) или каждый будет записан в свой

файл (Separate).

Например:

LogOptions Separate



RefererIgnore

Определяет имена серверов, обращения от которых не будут протоколироваться.

Например:

RefererIgnore Indy.cnit.nsu.ru



Другие режимы работы

DNSMode

Определяет интенсивность обращений WWW сервера к серверу имен

Интернет. Minimum означает,

что сервер будет обращаться к DNS только при необходимости проверить



ограничения доступа по домену. Standard означает,

что сервер будет обращаться к серверу имен каждый раз при обработке

запроса клиента. Maximum означает, что сервер будет

дважды обращаться к серверу имен при каждой обработке запроса.

Например:

DNSMode Standard



Процедура определения конфигурации сервера

После запуска основного серверного процесса сервер пытается открыть

главный конфигурационный файл. Этот файл ищется по умолчанию в

каталоге /usr/local/etc/http/conf с именем httpd.conf.

Умолчание можно изменить при сборке системы редактированием файла

src/config.h. За каталог отвечает параметр HTTPD_ROOT,

за имя файла - параметр SERVER_CONFIG_FILE. Изменить значения

по умолчанию можно при запуске сервера, указав ключи -h

и-f (см. выше).

Местоположение файлов конфигурации доступа, документов, типов

MIME, а также файлов журналов сервер получает из главного конфигурационного

файла. Если каких - либо параметров там нет, их значения берутся

по умолчанию (см. src/config.h).

Конфигурация ресурсов

Расположение файлов данных, их интерпретация сервером и поведение

сервера при обращении к разным типам файлов определяются параметрами

файла конфигурации ресурсов. Ниже приведен список основных параметров

с пояснениями.

DocumentRoot

Определяет каталог локальной файловой системы,

от которого начинается отсчет виртуального пути URL.

Например:

DocumentRoot /apply/www



UserDir

Определяет название публичного подкаталога пользователей. ПО WWW

- сервера позволяет обеспечить внешний доступ к гипертекстовым

документам пользователей базовой операционной системы. Для этого

пользователям необходимо создать в своем домашнем каталоге подкаталог

с именем, определяемым параметром UserDir. После

этого все обращения по URL:

http://<имя_сервера>/~<имя_пользователя_ОС>

будут транслироваться в реальный путь до подкаталога, определенного

параметром UserDir в домашнем каталоге пользователя <имя_пользователя_ОС>.

Например:

UserDir public_html



при этом при обращении по URL

http://www.nsu.ru/~fancy/index.html

сервер будет искать файл Index.html в подкаталоге

public_html/ домашнего каталога пользователя fancy.

Redirect

Переадресует запрос к одной иерархии в запрос к другой иерархии,

возможно расположенной на другом сервере.

Например:

Redirect /HTTPd/ http://hoohoo.ncsa.uiuc.edu/



Alias

Определяет синоним для документа или каталога на локальном сервере.

Пример:

Alias /icons /var/opt/images



ScriptAlias

Определяет синоним для каталогов, содержащих CGI - программы.

Пример:

ScriptAlias /hrv-cgi /var/opt/cgi



DirectoryIndex

Определяет имена файлов, трактующихся сервером как индексные.

Их содержимое выдается сервером при обращении к данному каталогу.

Пример:

DirectoryIndex index.html index.htm index.cgi



AccessFileName

Определяет имя файла, трактующегося сервером как файл управления

доступом (см. раздел ).

Пример:

AccessFileName .htaccess


Конструкторы и деструкторы пакетов


Существует две функции специального вида - конструкторы и деструкторы. Это

BEGIN и END программы в их описании необязательно использование sub. Подпрограмма

BEGIN исполняется сразу, как только это возможно, то есть в момент, когда

она полностью определена, даже перед тем как обрабатывается остаток содержащего

файла. В файле может быть несколько блоков BEGIN. Они исполняются в порядке

определения.

Подпрограмма END исполняется в самом конце. В файле может содержаться несколько

END блоков, они исполняются в обратном порядке.



Контроль работоспособности сервера


Проверка работоспособности сервера может осуществляться различными

способами. На Unix - платформе, в режиме standalone, можно посмотреть

список процессов, выделив среди них процессы с именем httpd:

#

ps -aef | grep httpd

root

28816 1 0 Nov 14 ? 7:42 /usr/local/sbin/httpd

nobody 28817 28816 0 Nov

14 ? 5:50 /usr/local/sbin/httpd

nobody 28818 28816 0 Nov

14 ? 5:32 /usr/local/sbin/httpd

nobody 28819 28816 0 Nov

14 ? 4:49 /usr/local/sbin/httpd

nobody 28820 28816 0 Nov

14 ? 5:24 /usr/local/sbin/httpd

nobody 28821 28816 0 Nov

14 ? 5:42 /usr/local/sbin/httpd

root 19150 19145 0 14:57:58

pts/4 0:00 grep httpd

#

Мы увидим несколько процессов, у одного из которых собственником

является root, а у других - пользователь, определенный

параметром User главного конфигурационного файла

(ГКФ). Процесс с собственником root запускается

первым. Он контролирует работу остальных процессов - серверов.

По использованному процессорному времени (колонка 8

примера) можно судить о загруженности серверов.

Если сервер работает в режиме inetd или необходимо

проверить работоспособность сервера извне, нужно выполнить команду

telnet, указав ей имя машины - сервера и номер порта.

После установления соединения наберите команду GET /.

Сервер должен выдать содержимое корневого каталога документов

или индексного файла, находящегося в этом каталоге. Номер порта

обычно равен 80. В режиме standalone он определяется параметром

Port ГКФ. Для режима inetd он определяется парой файлов - services

и inetd.conf, определяющих соответствие между входными

tcp - портами и сервисами Unix.

Например:

$ telnet www.cnit.nsu.ru

80

Trying 193.124.209.70...

Connected to Indy.

Escape character is '^]'.

GET /

<HTML>

<HEAD>

<TITLE>Novosibirsk Center

of New Information Technologies</TITLE>

</HEAD>

<BODY

. . .

</BODY>

</HTML>

Connection closed by foreign host.

$



Логическое И и логическое ИЛИ


Бинарное && - логическое И. Если левый аргумент FALSE, то правый

не проверяется.

Бинарное - логическое ИЛИ. Если левый аргумент TRUE, то правый

аргумент не проверяется.

''и && отличаются от подобных операторов в \verbC| тем, что вместо 0 или

1 они возвращают последнюю обработанную величину.

Таким образом, наиболее удобным способом определить домашний каталог

пользователя из переменной окружения HOME будет (на практике такой способ

определения домашнего каталога пользователя не рекомендуется):

$home = $ENV{'HOME'} $ENV{'LOGDIR'}

(getpwuid($<))[7] die "You're homeless!\n";

В качестве более удобной для чтения альтернативы Perl поддерживает операторы and и

or, которые будут описаны далее. Их приоритет ниже, однако их можно с

удобством использовать, не расставляя скобки,

после операторов, аргументами которых являются списки:

unlink "alpha", "beta", "gamma"

or gripe(), next LINE;

Если писать в стиле C, то это может быть записано так:

unlink("alpha", "beta", "gamma")

(gripe(), next LINE);



Логическое И, ИЛИ и Исключающее ИЛИ


and возвращает конъюнкцию двух выражений. Он эквивалентен &&, за

исключением более низкого приоритета.

or возвращает дизъюнкцию аргументов. Он эквивалентен , за исключением

более низкого приоритета.

xor (eXclusive OR) - исключающее ИЛИ, возвращает истину, если истинен

ровно один из аргументов.



Логическое НЕ


Унарное NOT возвращает отрицание аргумента. Оно эквивалентно !, за

исключением более низкого приоритета.