Глава 5. Использование пакета Cold Fusion для MS Windows при построении WWW - интерфейсов к базам данных.Евгений Зыбарев5.1Введение 5.3Администрирование Cold Fusion 5.4Взаимодействие Cold Fusion с базами данных 5.5Передача параметров в DBML - шаблон 5.6Занесение и модификация данных с использованием тегов DBINSERT и DBUPDATE 5.7Выполнение запросов к базам данных 5.8Использование результатов запроса для динамического создания HTML - документа 5.9Вывод результата выполнения запроса в виде таблицы 5.10Дополнительные замечания по созданию DBML - шаблонов 5.11Использование параметров и переменных в шаблонах
5.12Проверка корректности данных и форматирование вывода
5.13Динамическое изменение содержимого документа
5.14Расширенные возможности
При подготовке данной главы отчета использовались материалы " Cold Fusion User Guide " (Руководство пользователя пакета Cold Fusion). 5.1 ВведениеПакет Cold Fusion фирмы Allaire - это средство для быстрой разработки интерактивных, динамических документов для Web основанное на обработке информации из баз данных, в основе которого лежит следующий набор технологий:
Разработка приложений с использованием Cold Fusion не требует программирования на таких языках как Perl, C/C++, Visual Basic или Delphi. Вместо этого вы создаете приложение, встраивая в обычный (стандартный) HTML файл специальные теги для работы с базами данных. В данной главе рассматривается Cold Fusion версии 1.5 . 5.2 Установка Cold FusionCold Fusion запускается как CGI приложение на различных Web-серверах под Windows NT и Windows 95 и должен быть совместим с любым сервером поддерживающим CGI. Cold Fusion тестировался на совместимость со следующими серверами:
Для связи с различными СУБД Cold Fusion использует 32-разрядные ODBC - драйвера. Для корректной работы с Cold Fusion ODBC - драйвер должен удовлетворять следующим требованиям:
Для установки и использования Cold Fusion система должна удовлетворять следующим требованиям:
Для установки Cold Fusion нужно запустить программу SETUP.EXE, которая должна находится на инсталляционном диске 1. Помимо копирования файлов, необходимых для работы Cold Fusion, в процессе установки, в корневой директории с документами Web сервера создается директория с именем CFPRO. Эта директория содержит:
Чтобы проверить правильность установки Cold Fusion, нужно открыть документ, URL до которого имеет вид http://myserver/cfpro/getstart.htm, где myserver - имя или IP адрес вашего Web сервера. 5.3 Администрирование Cold FusionДля администрирования в Cold Fusion предусмотрен специальный интерфейс администратора. Этот интерфейс позволяет изменять различные параметры настройки Cold Fusion по четырем категориям:
5.4 Взаимодействие Cold Fusion с базами данныхCold Fusion позволяет динамически генерировать HTML документы основанные на запросах пользователя. Эти запросы передаются в Cold Fusion CGI - скрипт (DBML.EXE), который пересылает данные в Cold Fusion Engine обрабатывающий эти данные в соответствии с заданным шаблоном, выполняя необходимые запросы и генерируя HTML документ, который отправляется пользователю. Основой динамического создания документов являются специальные теги, входящие в язык разметки DBML, ориентированные на работу с базами данных. Почти все основные возможности Cold Fusion сосредоточены в четырех тегах:
Шаблон, на основе которого генерируется HTML - документ, представляет собой комбинацию тегов HTML и DBML:
На рисунке 5-1 показывается, как Cold Fusion обрабатывает запрос, полученный от клиента:
Рисунок 5-1
5.5 Передача параметров в DBML-шаблонСуществует несколько способов передачи параметров между шаблонами. Можно передавать параметры непосредственно в URL, использовать для этого форму либо cookie. Если параметры передаются через URL, то они добавляются к адресу вызываемого шаблона через символ "&" (амперсант) в виде параметр = значение. Например, гипертекстовая ссылка, приведенная ниже, отправляет параметр с именем 'user_id' и значением 5 в шаблон 'example.dbm': <A HREF="cgi-shl/dbml.exe?Template=example.dbm&user_id=5"> При передаче параметров через форму используются поля формы, которые должны иметь имена, совпадающие с именами параметров, которые требуется передать. Ниже приведен пример передачи параметра, из предыдущего примера используя форму:
<FORM ACTION="cgi-shl/dbml.exe?Template=example.dbm">
Заметим, что при обращении к CGI - программе DBML.EXE должен быть определен стандартный параметр Template, указывающий на конкретный шаблон. Переменные, занесенные в cookie браузера и переменные окружения CGI доступны в любом шаблоне. Способы занесения информации в cookie описаны в п.5.11. |
5.13.2 Перенаправление на другой URL (DBLOCATION & DBABORT)Для перенаправления пользователя на другой URL предназначен тег DBLOCATION. Этот тег обычно применяется, если в шаблоне выполняется один или более запросов, а затем нужно сразу же перейти к другому документу, либо URL, на который нужно отправит пользователя, зависит от параметра. Приведем пример использования тега, иллюстрирующий его синтаксис:
<DBIF #NewPassword# is not
#PasswordConfirmation#>
В качестве значения атрибута URL тега DBLOCATION можно использовать параметры и переменные, допустимые в шаблоне. Например, <DBLOCATION URL=#Page#>. Для прерывания обработки шаблона в Cold Fusion используется тег DBABORT.
<P>Этот текст будет отправлен
клиенту
Обычно этот тег используется при неправильной аутентификации. 5.13.3 Включение в шаблон других шаблоновПо мере усложнения приложений, разрабатываемых с использованием Cold Fusion, появляется необходимость упростить используемые шаблоны. Одним из способов решения этой проблемы, предлагаемых в Cold Fusion, является выделение из шаблонов часто используемых блоков, таких как запросы и области вывода, и их многократное использование в других шаблонах. Для включения часто используемых шаблонов в другой шаблон, используется тег DBINCLUDE. Тег DBINCLUDE может быть расположен в любом месте шаблона, кроме как в тегах DBQUERY, DBOUTPUT и DBTABLE. Тег DBINCLUDE имеет атрибут TEMPLATE который задает путь до файла с шаблоном. Этот шаблон будет обработан Cold Fusion как часть основного шаблона (то есть, в нем могут использоваться запросы, уже запущенные в основном шаблоне, а также ссылки на параметры формы, URL и CGI). Приведем пример включения в шаблон шаблона с именем 'test.dbm': <DBINCLUDE TEMPLATE="test.dbm"> 5.13.4 Определение типа данных MIME для содержимого документаCold Fusion позволяет задавать тип MIME для данных которые будут отправлены пользователю из текущего шаблона (по умолчанию используется text/html). Для этого используется тег DBCONTENT, имеющий единственный атрибут TYPE, который, собственно, и задает тип данных. Например, чтобы отправить клиенту VRML - документ может использоваться следующий шаблон:
<DBCONTENT TYPE="x-world/x-vrml">
Заметим, что Cold Fusion не будет отправлять клиенту текст, расположенный до тега DBOUTPUT. 5.14 Расширенные возможности5.14.1 Динамическое определение SQL выраженияВ некоторых сложных приложениях может потребоваться, в зависимости от значений параметров, определять не только содержание запроса, но и его структуру. В Cold Fusion предусмотрен тег DBSQL, который может употребляться внутри тега DBQUERY, доопределяя SQL - выражение, в зависимости от значений параметров. Тег DBSQL имеет единственный атрибут SQL, значение которого будет добавляться к основному SQL - выражению.
Пример
5.14.2 Поддержка транзакцийДля объединения нескольких запросов в одну транзакцию может быть использован тег DBTRANSACTION. Все запросы, содержащиеся внутри этого тега, будут интерпретироваться как одна транзакция. То есть все изменения сделанные в базе данных, либо будут одновременно сохранены, либо не будет сохранено ни одно из них. Приведем пример, в котором денежная сумма переводится с одного банковского счета на другой:
<DBTRANSACTION>
Заметим, что не все драйверы ODBC поддерживают транзакции. Например, драйверы для Oracle, SQL Server и Access поддерживают транзакции, а драйверы для FoxPro, dBase и Paradox - нет. 5.14.3 Вложенные области вывода и группированияТеги DBOUTPUT могут вкладываться друг в друга, с целью сгруппировать области вывода. Группирование достигается с помощью использования атрибута GROUP в теге DBOUTPUT, который содержит другой тег DBOUTPUT. Этот атрибут определяет поле по которому будет производится группирование. Внешний тег DBOUTPUT обычно используется для вывода заголовка группы , а внутренний - для вывода записей содержащихся в группе. Приведем пример вывода сотрудников организации сгруппированных по отделам:
<DBQUERY NAME="ListEmployees"
DataSource="Employees"
Обратим внимание на то, если поле используется для группирования, то результат запроса должен быть отсортирован по этому полю. Если используется многоуровневое группирование (ограничений на количество уровней вложенности тегов DBOUTPUT нет), то соответственно в SQL - выражении должна быть задана многоуровневая сортировка (например, ORDER BY Country, Region). 5.14.4 Использование списочных полей с множественным выборомЕсли HTML - форма содержит поле типа SELECT с множественным выбором, либо поля с одинаковыми именами (например, поля типа checkbox), то данные будут переданы в шаблон в виде, разделенных запятыми, списка значений. Такая форма представления наиболее удобна для использования в операторе IN языка SQL.
Пример
<SELECT NAME="SelectedPersons"
MULTIPLE SIZE="3">
Этот параметр, переданный в шаблон, может быть использован в следующем SQL - выражении:
SQL="SELECT * FROM Persons
Следует обратить внимание на то, чтобы параметр, который используется в операторе IN, был не пуст. Для этого можно пользуясь стандартными средствами Cold Fusion описать поле как требуемое, либо использовать поле типа HIDDEN с тем же именем и с заведомо неверным значением. Например, предыдущий пример можно дополнить следующим полем: <INPUT TYPE="HIDDEN" NAME="SelectedPersons" VALUE="-1"> 5.14.5 Дополнительные команды SQLВ теге DBOUTPUT, кроме выражения SELECT языка SQL, допускается использование и любых других, допустимых для конкретного источника данных, SQL - команд, включая:
Использование непосредственно команд SQL вместо тегов DBINSERT и DBUPDATE в некоторых случаях может обеспечить большую гибкость и эффективность. Например, при модификации или создании новой записи, появляется возможность использовать все параметры и переменные доступные в шаблоне в том числе и результаты определенных в шаблоне запросов. Пример использования команды UPDATE в теге DBQUERY приведен в п.5.14.2.
|