СТАТЬЯ 10.08.01

Разработка Internet-приложений с использованием Borland Delphi и Kylix

© Никита Попов
КомпьютерПресс #6 2001
Материал любезно предоставлен редакцией КомпьютерПресс,
ведущего российского компьютерного журнала

Введение

За последние несколько лет восприятие и использование Internet как очередной технологической “игрушки” закономерно трансформировались в осознание тех широчайших возможностей, которые Сеть способна предоставить пользователям в плане как человеческого общения, так и ведения бизнеса. Неизбежно возникший в результате подобной трансформации Internet-бум, безусловно, несколько исказил общее восприятие Internet как еще одного средства для построения информационной инфраструктуры коммерческого предприятия, поскольку все наперебой старались применить возможности Сети для малоподходящих целей. Однако сегодня ажиотаж вокруг Internet-технологий постепенно начинает спадать, уступая место пониманию действительно ценных возможностей Сети, а также путей их применения.

Безусловно, применение Internet-технологий для построения информационной инфраструктуры является относительно новым полем деятельности, однако к настоящему моменту в мире образовалось достаточно большое число компаний, поставляющих на рынок средства разработки и поддержки бизнес-приложений, использующих Internet-технологии. Многие из этих компаний создаются непосредственно под Internet-рынок, однако не меньше игроков — выходцы из области “классических” средств разработки. Одним из известнейших поставщиков средств разработки приложений долгое время была и остается компания Borland, известная своими RAD-инструментами для платформы Windows, такими как Borland Delphi, Borland C++Builder, а также кросс-платформенным средством разработки Jbuilder, использующим технологии Java.

Исторически являющаяся одной из компаний-первопроходцев в различных направлениях разработки программного обеспечения, Borland вполне закономерно обратила свое внимание на набирающее рост направление Internet-технологий, представив различные средства для создания, внедрения и поддержки Internet-приложений.

В данной статье речь пойдет о поддержке разработки Internet-приложений в двух наиболее известных инструментах компании Borland: Delphi и Kylix.

Delphi — это интегрированная среда для быстрого создания приложений баз данных, настольных и Internet-приложений, построенная на основе разработанной Borland визуальной библиотеки компонентов (Visual Components Library, VCL), включающая в себя средства раз работки интерфейса приложений с двусторонней связью с исходным кодом (TwoWay Tools), широкий спектр средств отладки приложений и различных вспомогательных средств.

За короткое время с момента выхода первой версии этого продукта, совершившего в некотором смысле революцию в области средств быстрой разработки приложений (Rapid Application Development) — за счет простоты использования, интуитивной понятности интерфейса и широкого набора средств разработки, Delphi собрал под свои знамена огромное число разработчиков со всего мира, что, безусловно, не могло не стимулировать появление поддержки данным продуктом Internet-технологий и разработки соответствующих приложений.

Kylix, Delphi для Linux - это аналог Delphi, предназначенный для разработки приложений для операционной системы Linux, которая в последнее время все более широко распространяется в мире. Подобно своему Windows-аналогу - Delphi, Kylix имеет для своей платформы чрезвычайно важное значение хотя бы потому, что до настоящего времени для Linux не существовало средств разработки, сравнимых с Delphi по мощности и простоте использования, что, в свою очередь, привело к сужению круга разработчиков программного обеспечения для этой платформы и в значительной степени затормозило ее распространение в качестве настольной операционной системы, временно ограничив Linux лишь достаточно узкой областью сервер ной платформы и Internet-хостинга.

Однако с появлением Kylix ситуация вполне может кардинально измениться в лучшую сторону, поскольку теперь для множества разработчиков открывается возможность создавать приложения для Linux не менее быстро и эффективно, чем для Windows, а в перспективе, с выходом следующей версии Delphi, и создавать кросс-платформенные приложения, переносимые с одной платформы на другую без переработки.

Подобно Delphi, Kylix базируется на аналогичной VCL технологии, получившей название CLX (произносится как “кликс”) — Component Library for Cross Platform Development, а также на наборе средств разработки, аналогичных Delphi. При этом Kylix даже более ориентирован на разработку Internet-приложений, нежели Delphi, который в настоящее время является более универсальным продуктом. Текущая версия Kylix, точнее Kylix Server Developer, помимо средств разработки приложений баз данных, настольных приложений и “классических” Internet приложений,то есть клиентов, использующих различные Internet-службы и протоколы, и серверов, применяющих технологии CGI (Common Gateway Interface), а также реализующих ответные, серверные части Internet-служб, включает в себя ряд средств для разработки расширений Web-сервера Apache, представляющего собой сегодня один из наиболее распространенных Web-серверов в мире.

Поскольку Kylix был официально анонсирован компанией Borland раньше новой версии Delphi, целесообразно начать наш обзор именно с этого продукта.

Итак, какие именно инструменты для разработки Internet-приложений имеет в своем арсенале Delphi для Linux?

Средства разработки Internet-приложений из состава Borland Kylix

Как уже было сказано выше, в основе своей Kylix максимально уподоблен Delphi как по общей идеологии (интегрированная среда разработки, визуальные средства создания интерфейса приложений, полностью совместимая с Delphi версия языка Object Pascal и т.д.), так и по набору компонентов визуальной библиотеки — конечно, с учетом особенностей операционной системы Linux. Именно эти особенности обусловили некоторое различие элементов Internet-технологий в Kylix и их аналогов в Delphi.

Kylix поддерживает два типа серверных Internet-приложений: приложения на основе технологии CGI и расширения сервера Apache — Apache DSO (Dynamic Shared Objects, динамические объекты совместного использования).

Shared Objects - это некий аналог Windows-модулей DLL для Linux, обеспечивающих совместное использование программных элементов несколькими приложениями. Практически вся функциональность Linux, включая большую часть ядра ОС, построена с применением Shared Objects (SO). Kylix также использует эту технологию, в частности для переноса технологии пакетов (packages) на Linux, и, конечно, позволяет разрабатывать собственные SO-модули.

В свою очередь, DSO-модули — это специальным образом организованные библиотеки Shared Objects, обладающие расширенными возможностями взаимодействия с сервером Apache за счет доступа к его API (Application Programming Interface, прикладного программного интерфейса) и использующиеся как стандартное средство расширения возможностей этого сервера.

Сервер Apache является проектом Open Source, координируемым Apache Group. Как и большинство проектов Open Source, Apache распространяется бесплатно вместе с исходным кодом в соответствии со специальной лицензией и, опять-таки подобно большинству OS-проектов, активно развивается, получая все больший набор возможностей. Несомненно, эти особенности, а также высокая надежность, простота в использовании и доступность для очень широкого спектра операционных систем (большинство клонов UNIX, Win32 и т.д.) явились причинами широкого распространения сервера Apache в качестве платформы для Internet-хостинга и корпоративных Web-приложений.

Поскольку Apache входит в поставку большинства клонов Linux, логично было включить его поддержку в Kylix Server Developer, что и было осуществлено компанией Borland в дополнение к поддержке технологии CGI.

Другие технологии, такие как WinCGI и ISAPI/NSAPI, по понятным причинам не вошли в состав Kylix, поскольку предназначены для использования для серверных расширений на платформе Windows.

В состав Kylix входит иерархия компонентов для создания Internet-приложений, построенная на иерархии WebBroker, аналогичной применяемой в Delphi 5: WebModule, WebDispatcher, WebActionItem и т.д. Все они являются невизуальными компонентами, отвечающими за создание иерархии обработки запросов протокола HTTP и генерации соответствующих ответных действий на эти запросы путем образования слоя Internet-компонентов среднего уровня, обеспечивающих взаимодействие клиентских и серверных Internet-приложений на уровне протокола HTTP. Основой приложения, построенного на архитектуре WebBroker, является контейнер типа WebModule, в котором размещаются другие Web-компоненты, генерируемые автоматически (WebDispatcher) или создаваемые в процессе разработки приложения (WebActionItem, PageProducer и т.д.). Компонент WebDispatcher создается контейнером WebModule автоматически и является центром обработки HTTP-запросов. Следует еще раз подчеркнуть, что данная иерархия полностью аналогична Delphi-реализации, и потому работа Internet-приложения, созданного при помощи Kylix, будет полностью совпадать с работой подобного Delphi-приложения, основанного на архитектуре WebBroker.

При поступлении HTTP-запроса он передается объекту WebDispatcher, который производит просмотр списка компонентов типа WebActionItem и автодиспетчеризуемых компонентов, пытаясь найти компонент, способный обработать именно тот тип запроса, который является текущим в очереди. В том случае, если подходящего компонента не обнаружено, запрос передается объекту WebActionItem с пометкой Default (внутри WebModule может быть только один такой объект). В том случае, если Default WebActionItem имеет средства для обработки такого запроса, производятся необходимые действия, а затем (при необходимости) генерируется ответ, который передается обратно объекту WebDispatcher, а от него клиенту — отправителю запроса.

Каждый из компонентов WebActionItem может быть наделен специальными возможностями по обработке отдельных видов запросов, например, будет генерировать отдельную станицу Web-сайта при запросе конкретного URI или же наоборот — выдавать сообщение об ошибочной ссылке на страницу (код 404 протокола HTTP) либо на корневую страницу Web-сайта при обращении к корневому URI, что, как правило, делает Default WebActionItem.

Как и любой компонент или класс Object Pascal, для компонента WebActionItem могут создаваться наследники — с целью расширения или специализации функциональности. Например, можно создать компонент-наследник WebActionItem, который будет специальным образом реагировать на ошибку в описании URI (URL) вместо выдачи стандартного сообщения 404 “Страница не найдена”, генерируя более развернутый текст сообщения или производя какие-либо иные действия.

Непосредственно генерация содержания страниц производится визуальными компонентами типа PageProducer и их наследниками, работающими в связке с компонентами WebActionItem, или же при помощи обработчиков событий OnAction, реализованных непосредственно для компонентов WebActionItem. Визуальные компоненты генерации содержания входят в состав палитры Internet, в которой также располагаются визуальные Internet-компоненты нижнего уровня, обеспечивающие работу непосредственно с протоколами TCP/IP и UDP, речь о которых пойдет ниже. Общий вид палитры Internet показан на рис. 1.

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

Базовый компонент PageProducer обладает возможностью генерации содержимого страницы по заданному в свойстве HTMLDoc- или HTMLFile-шаблону или через событие OnHTMLTag, позволяющему реализовать реакцию Web-приложения на специальные тэги в составе шаблона, например динамическую подстановку данных.

рис.1 Палитра компонентов Internet в Kylix

Помимо универсальной реализации PageProducer в набор Internet-компонентов среднего уровня в Kylix входят также наследники PageProducer, предназначенные для реализации более специализированных действий, например для публикации и ввода данных: DataSetTableProducer, DataSetPageProducer, QueryTableProducer и SQLQueryTableProducer. Эти компоненты содержатся в палитре Internet и составляют слой Internet-компонентов верхнего уровня, изолированных от протокольной части компонентами архитектуры WebBroker.

Назначение этих компонентов можно понять из имен классов:

В любом случае поля данных подставляются на свое место в HTML-документе с помощью “прозрачных” для HTML-парсеров тэгов, содержащихся в шаблоне страницы, которые затем заменяются непосредственно значениями полей данных. Например, при использовании компонента TPageProducer и его события OnHTMLTag для генерации HTML-страницы, шаблон вида:

после замещения тэга <#CUSTLIST> реальными данными (в данном примере — списком клиентов из демонстрационной базы данных customer.db) будет преобразован в следующий HTML-код:

Компоненты DataSetTableProducer и QueryTableProducer используют для формирования HTML-документа шаблоны, генерируемые автоматически в зависимости от содержания публикуемого набора данных и настроек самого компонента. Обращение к данным из этих компонентов и их наследников производится через иерархию классов dbExpress, которая в Kylix и в новой версии Delphi является основным средством доступа к данным.

Помимо компонентов генерации HTML-кон тента, в состав Internet-компонентов входит та кой компонент, как WebDispatcher. Этот компонент предназначен для преобразования обычного приложения баз данных (или desktop-приложения) в Internet-приложение. Достигается это следующим образом.

Сначала компонент WebDispatcher помещается в обычный модуль (DataModule) данных, при этом для него создается дерево компонентов WebActionItem — аналогично тому, как это происходит в WebModule, поскольку WebModule автоматически поддерживает создание иерархии компонентов WebBroker, WebDispatcher и WebActionItem на уровне своей реализации. После того как DataModule был соответствующим образом подготовлен, им можно заменить с помощью автоматически созданного при генерации нового приложения мастера Web Server Application WebModule (при этом перенеся все компоненты доступа к данным) другие невизуальные компоненты, содержащиеся в исходном DataModule, и, конечно, сопутствующий исходный код во вновь созданное Internet-приложение.

Рассмотренные выше компоненты составляют верхний (PageProducer и его наследники) и средний (WebBroker, WebDispatcher, Web ActionItem) уровни иерархии классов для создания Internet-приложений и работают с протоколом HTTP на уровне компонента WebBroker.

Для непосредственного доступа к возможностям базовых Internet-протоколов TCP/IP и UDP в состав Kylix включены компоненты нижнего уровня — ClientSocket, ServerSocket, TcpClient, TcpServer и UDPSocket, которые предназначены для создания клиентских и серверных приложений, работающих непосредственно через TCP-соединение.

Компоненты ClientSocket и ServerSocket позволяют осуществлять обмен данными через TCP-соединение за счет использования событий OnReceive и OnSend с последующей их обработкой внутри соответствующего приложения. При этом обеспечивается базовая функциональность для создания и управления TCP-соединением с возможностью локации по URL или непосредственно через указание TCP-адреса и порта.

Компоненты TcpClient и TcpServer являются наследниками ClientSocket и ServerSocket, соответственно расширяя их функциональность возможностью работы с тем или иным протоколом по выбору: IP, TCP, UDP или другим сетевым протоколом, а также за счет ряда дополнительных свойств и методов, упрощающих создание приложений на основе этих компонентов.

Компонент UDPSocket обеспечивает создание и управление соединением на базе протокола UDP, то есть на самом нижнем протокольном уровне Internet-соединений. По функциональности этот компонент аналогичен ClientSocket и ServerSocket.

Перечисленные выше компоненты являются частью CLX (Component Library for Cross platform) и разработаны компанией Borland с учетом современных Internet-стандартов, образуя фундамент для построения Internet-приложений с использованием Kylix. Однако помимо базовых служб и протоколов существует широкий набор дополнительных служб и задач, возможности которых часто используются Internet-разработчиками. К тому же далеко не всегда возможность отображения информации через HTML-браузер является приемлемым решением для разработки Internet-приложений. В этом случае разумно использовать Internet-инфраструктуру для обмена данными, а отображение информации обеспечить за счет более сложных клиентских приложений, разработанных на Kylix. Аналогично зачастую требуется реализовать специализированную серверную логику, которая не заложена в стандартные Web-серверы.

Для решения такого класса задач в состав Kylix включена библиотека стороннего разработчика — компании Nevrona Design: Internet Direct (Indy).

Данная библиотека была разработана компанией Nevrona Design специально для Borland Delphi и насчитывает в своей истории уже восемь версий, последняя из которых вошла в состав Kylix и новой версии Delphi. Набор компонентов этой библиотеки разделен на три группы: Indy Clients, Indy Servers и Indy Misc.

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

Большинство компонентов Indy Clients и Indy Servers являются “ответными” частями клиент-серверных пар протоколов и служб, за исключением отдельных, в основном серверных, компонентов типа TunnelMaster и TunnelSlave, и позволяют использовать такие протоколы, как TCP/IP, UDP, NNTP, SMTP, FTP, HTTP, а также службы ECHO, FINGER, WHOIS и т.д.

Внешний вид палитр Indy Servers и Indy Clients приведен на рис. 2 и 3.

рис.2 Палитра компонетов Indy Servers

рис.3 Палитра компонетов Indy Clients

Подкатегория Indy Misc (рис. 4) включает в себя такие компоненты, как кодеки BASE64, UUE, Quoted Printable и других распространенных форматов обмена данными через email, кодеры MD2, MD4 и MD5 — стандартов криптографии, используемых для хранения паролей и электронных подписей в необратимом (не поддающемся расшифровке) виде, а также множество других полезных компонентов и утилит, часто применяющихся при разработке Internet-приложений.

рис.4 Палитра компонетов Indy misc

Компоненты протокольных клиентов и серверов могут быть использованы для разработки серверных и клиентских Internet-приложений, совместно или взамен базовых компонентов ClientSocket, ServerSocket и т.д. в тех случаях, когда это оказывается удобнее по тем или иным причинам. Подобно ClientSocket, ServerSocket и другим компонентам из состава палитры Internet, компоненты Indy не используют архитектуру WebBroker, реализуя поддержку Internet-протоколов и служб на нижнем уровне непосредственно в своем исходном коде.

Примеры использования компонентов Internet и Indy можно найти в каталогах %KYLIX%/Demos/Internet и %KYLIX/Demos/Indy.

Следует отметить, что в состав Kylix не входят компоненты InternetExpress, поскольку они используют технологию MIDAS (интерфейс IAppServer и т.д.) для работы с данными, а поддержка этой технологии не включена в состав текущей версии Kylix.

Как уже говорилось выше, Kylix, по своей функциональности в целом и по возможностям разработки Internet-приложений в частности, повторяет возможности Delphi 5, за исключением определенных отличий, связанных с особенностями операционной системы Linux. Однако в настоящее время Delphi перешел на “новый уровень эволюции”, что обеспечено выходом новой версии этого продукта, на примере которой, точнее на примере Delphi 6 Enterprise, мы рассмотрим, какие возможности, связанные с разработкой Internet-приложений, нам обеспечивает новая версия Delphi, во многом являющегося “законодателем мод” среди инструментов разработки от Borland.

Продолжение статьи

Дополнительную информацию Вы можете получить в компании Interface Ltd.

Отправить ссылку на страницу по e-mail
Обсудить на форуме Inprise/Borland


Interface Ltd.
Тel/Fax: +7(095) 105-0049 (многоканальный)
Отправить E-Mail
http://www.interface.ru
Ваши замечания и предложения отправляйте автору
По техническим вопросам обращайтесь к вебмастеру
Документ опубликован: 10.08.01