|
|
|||||||||||||||||||||||||||||
|
Разработка приложений для Apache с помощью Kylix Server DeveloperColin 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.
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-серверов на базе 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> Рисунок 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; 'anonymous@web.site', Request.ContentFields.Values['message'] ); Response.Content := 'Successfully Рисунок 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: 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:
Генераторы контента распознают специальные теги в соответствующем 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: Рисунок 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, добавьте в него следующие компоненты:
Теперь WebModule будет выглядеть, как показано на рисунке 21. Рисунок 21.WebModule с невизуальными компнентами TPageProducer, TSQLConnection, TSQLQuery и TDataSetTableProducer. PageProducer используется для передачи формы запроса о служащем в HTML-страницу по умолчанию. На рисунке 22 показана установка свойства HTMLDoc на HTML. <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 Рисунок 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.
|
|