Разработка приложений для Apache с помощью Kylix Server Developer

Colin A.Ridgewell

Оглавление

Введение

Kylix является средством разработки от Borland, обеспечивающим операционную систему Linux собственным RAD-инструментарием (Rapid Application Development - быстрая разработка приложений). Он основывается на получившем широкое признание RAD-инструменте Delphi. Итак, почему же стоит использовать Kylix для платформы Linux? Если Linux применяется в качестве основной платформы, то возникает необходимость решения проблем, связанных с переносом приложений. Инструмент Kylix был создан как раз для того, чтобы переносить такие оригинальные приложения. Традиционные инструменты Linux, подобные GCC (GNU-компилятор) и Emacs, являются инструментами системного уровня и могут использоваться для решения таких задач, как перекомпиляция ядра или разработка драйверов устройств; однако, они не могут решать проблемы совместимости приложений.

Возможность разработки динамических (и зачастую управляемых данными, извлекаемыми из баз данных) web-приложений на базе Apache может оказаться ключевым моментом в успешном использовании Linux самыми различными организациями. Раньше разработчикам приходилось использовать традиционные технологии создания сценариев, но теперь Kylix Server Developer привнес в разработку ПО для Apache собственный высокопроизводительный RAD-инструментарий, включающий компонентную среду для визуального программирования. Kylix упрощает и ускоряет разработку web/Internet-приложений на базе Apache для платформы Linux, позволяя разрабатывать масштабируемые многопользовательские web-приложения, поддерживающие работу с большими объемами данных.

Ниже приведен список характерных черт Kylix, доступных при разработке е-бизнес, web- и Internet-приложений на базе Linux.

  • Собственный высокопроизводительный компилятор и отладчик объектов ELF-формата со скоростью компиляции около 4 миллионов строк в минуту.
  • Двусторонняя интегрированная среда разработки (IDE) разработки позволяет создавать сложные приложения в Linux быстрее, чем любое другое средство разработки.
  • Независимость от пользовательского интерфейса. Приложения будут прекрасно работать под KDE, GNOME, а в случае web-приложения - вообще без интерфейса. Это означает, что разработчику не придется ограничивать пользователя приложения использованием только определенного интерфейса.
  • CLXTM (кросс-платформенная компонентная библиотека) поддерживает компонентную структуру так же, как и VCL (визуальная компонентная библиотека) для Delphi и C++BuilderTM . CLX поддерживает совместимость исходного кода приложений между Windows и Linux.
  • Кросс-платформенная архитектура web-серверных приложений NetCLXTM сочетает в себе простоту визуальной разработки с преимуществами компонентного подхода.
  • DataCLXTM и dbExpressTM (кросс-платформенный API базы данных) сокращают время разработки, благодаря отсутствию необходимости программировать интерфейсы к API баз данных с использованием собственных драйверов OracleÒ , IBM DB2Ò , MySQLTM , InterBaseÒ .
  • Открытый (open-source) проект Indy-компонентов поддерживает более 65 компонентов, обеспечивая возможность установления связи между Internet-узлами как для клиентских, так и для серверных приложений.

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

Ключевым моментом в интеграции бизнес-систем на платформе Linux можно назвать создание динамического web- контента, интегрирующего базу данных предприятия с Internet или Intranet. В настояще й статье показано, как легко можно интегрировать web-приложения электронной коммерции с собственной базой данных, используя Kylix Server Developer от Borland для разработки приложений для web-сервера Apache под Linux. Приведен также ряд практических примеров. Если Вы являетесь опытным разработчиком под Apache или на Delphi, не знакомым с Linux, в этой статье Вы найдете много полезной для себя информации.

Разработка Web-приложений в KylixTM

Kylix уникален тем, что позволяет разработчику выбирать, каким образом тот хочет разрабатывать приложения для web-серверов Apache, с помощью CGI или DSO (Динамические разделяемые объекты). На рисунке 1 представлено диалоговое окно мастера ‘web Server Application’, доступное путем выбора File / New из основного меню. С этого места разработка любого из указанных вариантов приложений будет одинаковой: код проекта генерируется Kylix-инструментарием в соответствии с Вашим выбором.

Рисунок 1. Диалоговое окно нового мастера web-серверных приложений

Код NetCLX-приложений в Kylix будет совместим с Delphi 6, который сможет компилировать расширения для ISAPI, NSAPI и win-CGI не только для Apache, но и для других web-серверов. Такая совместимость кодов стала возможной, благодаря общей NetCLX-архитектуре, используемой для построения web-приложений. NetCLX-архитектура также является независимой от web-сервера, поэтому разработчику нет необходимости знать всю глубинную специфику реализации web-сервера.

Web-сервер ApacheTM

Самым популярным программным обеспечением для web-серверов на базе Linux является Apache. Конечно, это один из самых часто используемых в мире web-серверов не только для Linux, но и для таких платформ, как Windows и Unix. Однако, было подсчитано, что около 35% общедоступных web-серверов используют web-сервер Apache под Linux ( www.netcraft.com ). Apache вырос из проекта ‘NSCA httpd’, разработанного Национальным центром по применению суперкомпьютеров в Иллинойсе. Ряд авторов, писавших части программы для NSCA httpd, объединились и образовали группу Apache ( http://www.apache.org ), названную так по аналогии с первоначальным названием ‘A Patchy Server’. Первый официальный выпуск (0.6.2) сервера Apache появился в апреле 1995 года. Теперь - это открытая компания, известная уже под названием Apache Software Foundation, разрабатывающая некоммерческие проекты Apache.

Создание CGI-приложений для web-сервера Apache с использованием примера WebBrokerTM

Давайте посмотрим, как использование Kylix упрощает создание собственных web-серверных приложений для платформы Linux. В первом примере будет создаваться простое CGI web-приложение, которое может использоваться для посылки email-сообщений из web-браузера. Оно будет генерировать начальную HTML-форму, в которую пользователь должен внести всю необходимую информацию и вернуть ее обратно серверному приложению. Затем на базе этой информации web-приложение создаст и отправит email-сообщение.

Сначала выберите элемент File / New из основного меню Kylix, затем опцию CGI в появившемся диалоговом окне мастера приложений для web-сервера (см. Рисунок 1). Kylix создаст новое ‘non GUI’- консольное приложение всего с одним модулем, WebModule (см. Рисунок 2). Модуль WebModule обрабатывает все запросы, приходящие от web-сервера; именно в него Вы можете поместить все невизуальные генерирующие контент компоненты web-приложения.

Рисунок 2. Пустой WebModule.

Теперь выберите из закладки Internet в палитре компонентов (см. Рисунок 3) элемент TPageProducer и установите его в WebModule (см. Рисунок 4). TPageProducer являются очень мощными компонентами, обеспечивающими связь между запросами от клиентского браузера, обработкой, выполняемой Вашим приложением, и динамически генерируемым контентом, которое приложение посылает в ответ на запрос клиента. Для email-формы, установите свойство HTMLDoc на требуемый HTML с помощью Object InspectorTM (см. Рисунок 5). Используемый HTML создается отдельно и устанавливается как свойство HTMLDoc. Kylix поддерживает разделение между уровнем доступа к данным, уровнем приложения и уровнем представления, что облегчает повторное использование кода и ускоряет процесс разработки. Вы можете устанавливать HTMLDoc, как и все остальные признаки, во время работы приложения. Обратите внимание, что, при использовании Object Inspector, признак PageProducer Name изменился на ‘EmailForm’ (см. Рисунок 6).

Рисунок 3. Закладка Internet в наборе компонентов.

Рисунок 4. WebModule с PageProducer.

<html>
<body bgcolor="#CCCC99">
<form method="post" action="/cgi-bin/emailform"><br>
E-mail address<br>
<input type="text" name="address" size="50"><br> Message<br>
<input type="text" name="message" size="50"><br> <br>
<input type="submit" name="Submit" value="Send e- mail">
</form>
</body>
</html>

Рисунок 5. HTML для простой email-формы.

Рисунок 6. Object Inspector.

Теперь выберите из закладки Internet в палитре компонентов (см. Рисунок 3) элемент TPageProducer и установите его в WebModule (см. Рисунок 4). TPageProducer являются очень мощными компонентами, обеспечивающими связь между запросами от клиентского браузера, обработкой, выполняемой Вашим приложением, и динамически генерируемым контентом, которое приложение посылает в ответ на запрос клиента. Для email-формы, установите свойство HTMLDoc на требуемый HTML с помощью Object InspectorTM (см. Рисунок 5). Используемый HTML создается отдельно и устанавливается как свойство HTMLDoc. Kylix поддерживает разделение между уровнем доступа к данным, уровнем приложения и уровнем представления, что облегчает повторное использование кода и ускоряет процесс разработки. Вы можете устанавливать HTMLDoc, как и все остальные признаки, во время работы приложения. Обратите внимание, что, при использовании Object Inspector, признак PageProducer Name изменился на ‘EmailForm’ (см. Рисунок 6).

Рисунок 7. Список действий WebModule с присвоенным действием по умолчанию.

Каждое приложение WebBroker поддерживает список ‘действий’. Эти ‘действия’ выполняются, когда HTML-запросы соответствуют свойствам MethodType и PathInfo какого-либо из перечисленных действий. Если ни одно запрошенное действие не соответствует действиям, сконфигурированным в Вашем приложении, то может назначаться действие по умолчанию (см. Рисунок 7). Назначение действия по умолчанию - это простейший способ удостовериться в том, что Ваше web-серверное приложение всегда имеет возможность послать какой-то понятный ответ пользователю, не создавая впечатления недоступности сайта.

Это может быть достигнуто следующим образом. Выберите WebModule; в Object Inspector отобразятся его свойства. Затем щелкните мышью по кнопке Actions; откроется Action Editor. Щелкнув по значку New Action в Action Editor, добавьте действие в WebModule и установите его свойство Default на ‘True’ с помощью Object Inspector. После этого, установите его свойство PathInfo на ‘/EMailForm’, а свойство Producer на ‘EmailForm’ PageProducer (см. Рисунок 7). Теперь, данное web-приложение будет по умолчанию возвращать email-форму клиенту браузера в случаях, когда целевой URL установлен как ‘EMailForm’.

Теперь следует добавить другое Action (действие) для обработки запроса ‘Send e-mail’ при нажатии кнопки на HTML-форме (см. Рисунок 8). Обратите внимание, что действие выполняется, когда установка mtPost в свойстве MethodType соответствует методу HTML-формы email-сообщения.

Рисунок 8. Список действий WebModule с добавленным действием mtPost.

В WebModule добавляется компонент TIdSMTP (см. Рисунок 9). Это один из наиболее мощных Internet-компонентов набора Indy, включенного в Kylix. Данный компонент может использоваться для посылки email-сообщения посредством SMTP на почтовый сервер, в нашем случае, на локальный sendmail MTA-сервер. Все это можно записать одной строкой кода.

Рисунок 9. WebModule с добавленным компнентом TIdSMTP из набора Indy.

Обработчику событий OnAction для выполнения действия по отправке email-сообщения требуется определенная информация. Чтобы отправить email-сообщение с помощью компонента TIdSMTP, он должен прочесть значения адреса и сообщения из формы, посланной в HTTP-запросе (см. Рисунок 10).

procedure

TWebModule1.WebModule1Actions2Action(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean); begin try IdSMTP1.QuickSend
( 'localhost', 'subject', Request.ContentFields.Values['address'],

'anonymous@web.site',

Request.ContentFields.Values['message'] ); Response.Content := 'Successfully
sent e-mail'; except On E:Exception do Response.Content := 'Error sending e-mail<br>'
+ E.Message; end; end;

Рисунок 10. Метод OnAction для отправки e-mail.

Это полный код приложения. Чтобы приложение работало с web-сервером Apache, необходимо скомпилировать проект и скопировать полученный исполняемый файл в каталог /cgi-bin web-сервера Apache. Вы можете выбрать элемент Projects / Options… из основного меню, затем выбрать закладку Directories и установить Output path, ведущий к вашему каталогу /cgi-bin. Вся информация, связанная с конфигурацией web-сервера Apache находится в файле httpd.conf (конфигурация демона http). В этот файл нужно ввести некоторые дополнительные данные (см. Рисунок 11). Обратите внимание, что в Вашем файле httpd.conf уже может находиться запись Directory для /cgi-bin. В этом случае, нет необходимости в ее повторном вводе; просто проверьте, чтобы установки совпадали с теми, которые показаны на рисунке 11. Помните также, что в зависимости от используемой версии Linux путь к Вашему каталогу /cgi-bin может быть другим.

<Directory /usr/local/apache/cgi-bin> AllowOverride None Options ExecCGI

Order allow,deny Allow from all </Directory>

SetEnv LD_LIBRARY_PATH /opt/kylix/bin SetEnv LANG en_US

Рисунок 11. Записи в httpd.conf, необходимые для выполнения Kylix CGI-web-приложения на сервере Apache.

Так как для выполнения Kylix CGI-web-приложения на web-сервере Apache используются файлы Kylix bin.so (разделяемый объект), необходимо установить переменные окружения LD_LIBRARY_PATH и LANG. Команда SetEnv устанавливает переменную окружения, которую Apache передает во время выполнения CGI-приложению.

Владельца, группу и полномочия для файлов Kylix .so (разделяемый объект) и исполняемого файла CGI-web-приложения следует установить в соответствии с требованиями Apache. Для Apache обычно устанавливается тот пользователь и группа, которые Apache использует для всех web-запросов. Команды User и Group Вы можете найти в своем файле httpd.conf. Таким образом, любое лицо, подсоединившееся к Вашему web-серверу, оперативно регистрируется на нем как пользователь. Для того, чтобы такой пользователь мог использовать Kylix CGI-web-приложение, оно должно быть разрешено для доступа и исполнения пользователем Apache. Для обеспечения максимальной безопасности сервера, пользователь Apache должен иметь минимальные права.

Например, если Ваш пользователь Apache установлен как ‘apache’ в группе ‘apache’, и Вы создаете Kylix CGI-wweb-приложение с именем ‘emailform’, то для того, чтобы Ваше web-приложение стало доступным, возможно, потребуется ввести команды, показанные на рисунке 12. Имейте в виду, что для этого Вам, возможно, потребуется зарегистрироваться как Администратору.

cd <your cgi-bin directory> chown apache emailform chgrp apache emailform chmod 755 emailform

Рисунок 12. Установка владельца и группы для приложения CGI 'emailform', чтобы оно могло выполняться на Apache.

Все вышесказанное действительно и для разделяемых объектов в Kylix /bin-каталоге: возможно, потребуется изменить владельца, группу и привилегии. Для ‘реального’ web-сайта, мы рекомендуем скопировать требуемые дистрибутивы в Kylix /bin-каталоге из среды разработки в реальную среду. Затем Вы можете установить владельца, группу и привилегии, а также установить LD_LIBRARY_PATH к этому каталогу в соответствии с требованиями к безопасности своего web-сервера Apache.

На Рисунках 13 и 14 показано, как web-приложение выполняется на броузере, в данном случае, на KDE Konqueror. Учтите, что здесь может использоваться любой другой броузер.

Рисунок 13. Выполнение web-приложения 'emailform' в браузере: перед отправкой email-сообщения.

Рисунок 14. Выполнение web-приложения 'emailform' в браузере: после отправки email-сообщения.

Попытайтесь сами повторить всю описанную процедуру. Вы убедитесь в ее высокой функциональности и увидите, что нет ничего проще и быстрее, чем создание собственных CGI-web-приложений для Apache на платформе Linux с помощью Kylix.

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

NetCLX поддерживает кросс-платформенную архитектуру web-серверных Internet-приложений, которая соответствует стандартам HTTP. NetCLX-архитектура является серверо-независмой, благодаря извлечению и инкапсуляции этих HTTP-стандартов в структуру стандартных классов. Kylix и NetCLX делают возможной поддержку типичных для Apache DSO- (Динамические разделяемые объекты) и CGI -приложений.

Kylix NetCLX-приложения будут совместимы по исходному коду с Delphi 6, которая может компилировать расширения для ISAPI, NSAPI и win-CGI для других web-серверов. Это позволит разработчикам создать единый базовый исходный код для скомпилированных в различных средах разработки, предназначенных для самых разных рынков.

Важно хорошо знать значимые классы объектов, составляющие NetCLX-архитектуру. Эта архитектура поддерживает структуру Ваших web-приложений, позволяя Вам сосредочиться на ‘бизнес-контенте’, а не на технических деталях и сложностях приложения, которое выполняется на web-сервере.

Класс TWebDispatcher

TWebDispatcher является ядром любого web-приложения; это класс, который включается в web-сервер. В каждое приложение можно добавлять только по одному web-диспетчеру. Он предназначен для приема HTTP-запросов и передачи их в соответствующие методы ‘действий’ обработчиков событий; после этого, web-диспетчер компонует контент и возвращает его в виде ответа. Затем TWebDispatcher отравляет ответ клиенту. Действия хранятся в виде набора TwebActionItem. На рисунке 15 показаны наиболее значимые свойства TWebDispatcher.

Property Actions: TWebActionItems; Property Request: TWebRequest; Property Response: TWebResponse;

Рисунок 15. Значимые признаки TWebDispatcher.

WebModule

WebModule инкапсулирует, создает и управляет модулем приложения TWebDispatcher, поддерживая через Object Inspector интерфейс на время разработки для TWebActionItem и событий уровня приложения (см. Рисунок 16). Кроме того, Вы можете установить в WebModule любые не-визуальные компоненты, такие как TIdSMTP-компонент, использованный в первом примере приложения.

Property AfterDispatch; Property BeforeDispatch; Property OnCreate; Property OnDestroy; Property OnException;

Рисунок 16. Обработчики событий в WebModule.

Класс TwebActionItem

TwebActionItem используется для ответа на определенный тип HTTP-запроса, определенный в пути URL и в методе HTTP-запроса. TWebDispatcher выбирает для HTTP-запроса соответствующее действие или действия, сравнивая путь URL и тип метода со свойствами PathInfo и MethodType. Используя свойство Producer, Вы можете присоединить любой генератор контента (producer) в TwebActionItem. Генератор формирует HTTP-ответ для действия; в противном случае, сам разработчик может закодировать метод обработчика событий OnAction. На рисунке 17 показаны наиболее значимые признаки TWebActionItem.

Property Default: Boolean; Property Enabled: Boolean; Property MethodType:
TMethodType; Property PathInfo: String; Property Producer: TCustomContentProducer;

Property OnAction;

Рисунок 17. Значимые признаки и события класса TWebActionItem.

HTTP-запрос и ответ объединяются в пару и передаются генератору контента или обработчику событий OnAction в виде объектов TWebRequest и TWebResponse. На рисунке 18 приведен заголовок для метода обработчика событий OnAction.

procedure

TWebModule1.WebModule1Actions1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

Рисунок 18. Заголовок метода обработчика событий OnAction в TWebActionItem.

Класс TWebRequest

TWebRequest является базовым классом для всех объектов, представляющих клиентские запросы, которые передаются в web-серверное приложение. TWebDispatcher создает TwebRequests для сбора клиентских запросов.

Он полностью собирает все возможные запросы, которые могут придти на web-сервер, включая Cookie, значения полей и кодовые страницы, значения запросов, тип метода, дату истечения срока действия, типы носителей клиента, кэширование запросов, версию протокола, версию контента, URL и т.д.

Класс TWebResponse

Используйте потомка TWebResponse для задания ответа на HTTP-запрос. TWebDispatcher создает TWebResponse для объекта TWebRequest HTTP-запроса. Полученная пара, TWebRequest - TWebResponse, передается в соответствующее действие, в результате чего формулируется контент ответа.

Как и в случае с TWebRequest, TWebResponse полностью собирает все возможные ответы, включая такие, как типы MIME, Cookie, HTTP-контент, статус ответа, дата истечения срока действия контента и т.д. Благодаря наличию классов TWebRequest и TwebRespone, разработчик может сфокусировать свое внимание на бизнес-проблемах, а не на технических сложностях API web-сервера или http.

Класс TCustomContentProducer

TCustomContentProducer является базовым классом для всех объектов, создающих контент, который затем посылается клиенту в ответе на HTTP-запросы. Контент может относиться к различным типам: HTML-строка, XML, WML или MIME.

Ниже приведено описание некоторых потомков класса TCustomContentProducer:

Компонент

Описание

TpageProducer

Простой генератор контента HTML-шаблонов

TdataSetTableProducer

Генерирует HTML-таблицу, отображающую записи в наборе данных

TdataSetPageProducer

Распознающий данные генератор страниц, который может использовать набор данных для заполнения ‘прозрачных’ HTML-тегов

TSQLQueryTableProducer

Генерирует HTML-таблицу для записей параметризованного SQL-запроса. Запрос получает параметры от HTTP-запроса.

Генераторы контента распознают специальные теги в соответствующем HTML, которые выглядят как <#tag>. Контент запрашивается у генератора контента; и когда он встречает <#tag>, запускается событие OnHTMLTag, которое замещает тег контентом. Например, возьмем TPageProducer, свойство HTMLDoc которого установлен на HTML (как на рисунке 19).

<html> <body><#date format=dd.mmm.yyyy> </body> </html>

Рисунок 19. Прозрачный HTML #tag.

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

Если запрашивается контент данного TPageProducer, мы хотим заменить тег <#date> на строку, представляющую текущую дату и время в заданном формате. Для этого потребуется обработчик события OnHTMLTag (см. Рисунок 20).

procedure TWebModule1.EmailFormHTMLTag(Sender: TObject; Tag: Ttag; Const TagString:
String; TagParams: Tstrings; var ReplaceText: String); begin if ( Tag = tgCustom )
and ( TagString = 'date' ) then ReplaceText := FormatDateTime( TagParams.Values['format'], Now ); end;

Рисунок 20. Метод обработчика события OnHTMLTag.

Пример создания CGI-приложения web-сервера Apache с помощью dbExpressTM

Одной из наиболее значимых характеристик Kylix является то, что он облегчает доступ к данным с коммерческих серверов баз данных. Когда это свойство используется в сочетании с NetCLX, организации получают ни с чем не сравнимые преимущества как в отношении производительности труда разработчиков, так и в отношении затрат на интеграцию Linux в уже существующие системы. Проиллюстрируем это на примере, создав простое CGI web-приложение, которое сможет осуществлять поиск заданных в запросе служащих из базы данных InterBase примера employee.gdb. Пользователи получат первичную HTML-форму, куда они могут внести имя служащего, которого хотят запросить в базе данных. Получив запрос, web-приложение откроет соединение с InterBase и выполнит SQL-запрос. Ответ на этот запрос вернется пользователю в виде HTML-таблицы, содержащей список служащих с запрошенным именем.

Для создания нового CGI-web-серверного приложения, выберите элемент File / New из основного меню, а затем выберите значок Web Server Application. Запустится мастер WebBroker Application. Затем выберите ‘CGI Stand-alone executable’ и нажмите OK. Когда отобразится WebModule, добавьте в него следующие компоненты:

Компонент

Закладка Component Palette

TpageProducer

TDataSetTableProducer

Internet

TSQLConnection

TSQLQuery

DbExpress

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

Рисунок 21.WebModule с невизуальными компнентами TPageProducer, TSQLConnection, TSQLQuery и TDataSetTableProducer.

PageProducer используется для передачи формы запроса о служащем в HTML-страницу по умолчанию. На рисунке 22 показана установка свойства HTMLDoc на HTML.

<html>
<body bgcolor="#CCCC99">
<form method="post" action="/cgi-bin/qryemp"> <br> Enter employee name<br>
<input type="text" name="empname" size="50"><br>
<br> <input type="submit" name="Submit" value="Query"> </form> </body> </html>

Рисунок 22. HTML-форма генератора страниц по умолчанию.

В свойство списка действий WebModule добавляются два TwebActionItem (см Рисунок 23). Один используется как действие по умолчанию, поэтому его свойство Default установлено на True, а свойство Producer на PageProducer с HTML по умолчанию. Второе действие выполняется, когда пользователь отправляет запрос о служащем обратно из формы по умолчанию.

Рисунок 23. Список действий в WebModule.

Чтобы использовать базу данных, следует установить соответствующее соединение dbExpress. dbExpress поддерживает свойство доступа к данным, которое позволяет разработчикам без труда интегрировать корпоративную информацию в приложения в Kylix. Для установки соединения используйте редактор dbExpress Connections (см. Рисунок 24). Чтобы открыть диалоговое окно щелкните правой кнопкой мыши по компоненту SQLConnections в WebModule. В нашем примере, в результате этого добавилось новое соединение InterBase с именем ‘IBEmployee’. После того, как соединение установлено, его можно проверить с помощью кнопки ‘check test connection’ (проверить тестовое соединение).

Рисунок 24. Редактор dbExpress Connections.

Теперь переходим к обработчику событий OnAction для выполнения действия по отправке почты. Он используется для открытия соединения dbExpress, выполнения SQL-запроса и формирования контента ответа с помощью DataSetTableProducer (см. Рисунок 25). Для того, чтобы вы могли увидеть все логические соединения, все соединения были установлены в исходном коде метода. Это легко можно сделать во время проектирования с помощью Object Inspector.

procedure
TWebModule1.WebModule1Actions1Action
(Sender: Tobject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
begin
{open database connection}
SQLConnection1.LoginPrompt := False;
SQLConnection1.ConnectionName := 'IBEmployee'; SQLConnection1.Open;
{connect query object to database}
SQLQuery1.SQLConnection := SQLConnection1;
{run query against database}
SQLQuery1.SQL.Text :=
'select emp_no, first_name, last_name from employee '+ 'where first_name like ' + '"'
+ Request.ContentFields.Values[ 'empname' ] + '"'; SQLQuery1.Open;
{connect producer to query}
DataSetTableProducer1.DataSet := SQLQuery1;
{set response content to producer}
Response.Content := DataSetTableProducer1.Content;
{close query and database connection}
SQLQuery1.Close; SQLConnection1.Close;
end
;

Рисунок 25. Обработчик событий OnAction, открывающий DB-соединение, запрашивающий и формирующий контент.

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

Перед компиляцией вы можете выбрать Projects / Options из основного меню, затем выбрать закладку Directories и установить Output path к своему /cgi-bin-каталогу. Кроме того, необходимо добавить соответствующие записи (как было описано в первом примере приложения) в файл httpd.conf (конфигурация демона http).

На рисунках 26 и 27 показано выполнение web-приложения в браузере, в данном случае KDE Konqueror. Хотим отметить, что здесь можно использовать любой броузер.

Рисунок 26. Запрос на ввод имени служащего.

Рисунок 27. Результаты запроса отображаются в HTML-таблице.

Попытайтесь проделать описанную выше процедуру сами, и вы увидите, как легко и быстро можно создавать в Kylix web-приложение со ссылками на данные для Apache.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=4205