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

== Введение ==
За последние несколько лет восприятие и использование 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), включающая в себя средства разработки интерфейса приложений с двусторонней связью с исходным кодом (Two-Way Tools), широкий спектр средств отладки приложений и различных вспомогательных средств.
За короткое время с момента выхода первой версии этого продукта, совершившего в некотором смысле революцию в области средств быстрой разработки приложений (Rapid Application Development) - за счет простоты использования, интуитивной понятности интерфейса и широкого набора средств разработки, Delphi собрал под свои знамена огромное число разработчиков со всего мира, что, безусловно, не могло не стимулировать появление поддержки данным продуктом Internet-технологий и разработки соответствующих приложений.
Kylix, Delphi для Linux - это аналог Delphi, предназначенный для разработки приложений для операционной системы Linux, которая в последнее время все более широко распространяется в мире1. Подобно своему 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-приложения на специальные тэги в составе шаблона, например динамическую подстановку данных.
Помимо универсальной реализации PageProducer в набор Internet-компонентов среднего уровня в Kylix входят также наследники PageProducer, предназначенные для реализации более специализированных действий, например для публикации и ввода данных: DataSetTableProducer, DataSetPageProducer, QueryTableProducer и SQLQueryTableProducer. Эти компоненты содержатся в палитре Internet и составляют слой Internet-компонентов верхнего уровня, изолированных от протокольной части компонентами архитектуры WebBroker.
Назначение этих компонентов можно понять из имен классов:
* DataSetTableProducer и DataSetPageProducer предназначены для публикации данных из источников данных в виде таблиц или набора полей при отсутствии необходимости ввода параметров отбора данных из источника; 
* QueryTableProducer и SQLQueryTableProducer позволяют публиковать данные из источников, требующих для формирования набора данных входных параметров, которые передаются в виде параметров HTTP-запроса в случае запроса типа GET или в виде полей свойства ContentFields объекта запроса типа POST.
В любом случае поля данных подставляются на свое место в HTML-документе с помощью «прозрачных» для HTML-парсеров тэгов, содержащихся в шаблоне страницы, которые затем заменяются непосредственно значениями полей данных. Например, при использовании компонента TPageProducer и его события OnHTMLTag для генерации HTML-страницы, шаблон вида:
<HEAD>
<TITLE>Sample Delphi Web server application</TITLE>
</HEAD>
<BODY>
<H2>Customer Order Information</H2>
<HR>
Click a customer name to view their orders.<P>
<#CUSTLIST><P>
</BODY>
</HTML>
после замещения тэга <#CUSTLIST> реальными данными (в данном примере - списком клиентов из демонстрационной базы данных customer.db) будет преобразован в следующий HTML-код:
<HTML>
<HEAD>
<TITLE>Sample Delphi Web server application</TITLE>
</HEAD>
<BODY>
<H2>Customer Order Information</H2>
<HR>
Click a customer name to view their orders.<P>
<A HREF=”/cgi-bin/cgidemo.exe/runquery?CustNo=1645">Action Club</A>
<BR><A HREF=”/cgi-bin/cgidemo.exe/runquery?CustNo=3158">Action Diver Supply</A>
<BR><A HREF=”/cgi-bin/cgidemo.exe/runquery?CustNo=1984">Adventure Undersea</A>
<BR><A HREF=”/cgi-bin/cgidemo.exe/runquery?CustNo=3053">American SCUBA Supply</A>
…
</BODY>
</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, WebActionItem) уровни иерархии классов для создания 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 и IndyServers являются «ответными» частями клиент-серверных пар протоколов и служб, за исключением отдельных, в основном серверных, компонентов типа TunnelMaster и TunnelSlave, и позволяют использовать такие протоколы, как TCP/IP, UDP, NNTP, SMTP, FTP, HTTP, а также службы ECHO, FINGER, WHOIS и т.д.
Внешний вид палитр Indy Servers и Indy Clients приведен на рис. 2 и 3.
Подкатегория Indy Misc включает в себя такие компоненты, как кодеки BASE64, UUE, Quoted Printable и других распространенных форматов обмена данными через e-mail, кодеры MD2, MD4 и MD5 - стандартов криптографии, используемых для хранения паролей и электронных подписей в необратимом (не поддающемся расшифровке) виде, а также множество других полезных компонентов и утилит, часто применяющихся при разработке Internet-приложений.
Компоненты протокольных клиентов и серверов могут быть использованы для разработки серверных и клиентских 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.
== Средства разработки Internet-приложений из состава Borland Delphi 6 ==
Отвечая ожиданиям многих разработчиков, новая версия Delphi содержит множество улучшений и новшеств в различных областях, включая усовершенствованную IDE (Integrated Development Environment - интегрированную среду разработки), новую базовую библиотеку компонентов CLX (Component Library for Cross-platform - библиотеку компонентов для кросс-платформенной разработки) и т.д.1 И конечно, в состав новой версии Delphi входит множество новых компонентов, поддерживающих передовые стандарты в области разработки Internet-приложений.
Помимо возможностей Delphi 5 и Kylix, то есть набора компонентов нижнего уровня (ClientSocket, ServerSocket, TcpClient, TcpServer и UDPSocket) и компонентов верхнего уровня (PageProducer, DataSetTableProducer, QueryTableProducer и WebDispatcher), которые были рассмотрены выше, Delphi 6 включает в себя новый набор компонентов, реализующий технологию WebSnap, компоненты WebServices, реализующие поддержку технологии SOAP (Simple Object Activation Protocol - простой протокол активации объектов), а также входящий в состав Delphi 5 набор компонентов InternetExpress, позволяющий создавать Internet-приложения для работы с данными через MIDAS с передачей данных в формате XML DataPackets (пакетов данных XML).
Технология WebSnap является дальнейшей эволюцией технологии WebBroker, реализованной в Delphi 5 и Kylix, и позволяет создавать более мощные и сложные по структуре Internet-приложения.
 Таблица 1 - Основные различия архитектур WebBroker и WebSnap
Web Broker 	WebSnap
Поддерживается для обратной совместимости 	Несмотря на то что поддерживаются все компоненты архитектуры WebBroker, осуществляющие генерацию HTML-документов, компоненты WebModule и WebDispatcher и т.д. имеют новую реализацию
Доступна в библиотеке CLX для кросс-платформенной разработки 	В настоящее время архитектура WebSnap доступна только под Windows
Приложение может содержать только один WebModule 	Приложение может быть разделено на блоки несколькими контейнерами WebModule, что позволяет вести параллельную разработку без возрастания числа конфликтов
Приложение может содержать только один компонент WebDispatcher 	Может существовать несколько компонентов-диспетчеров, обрабатывающих различные типы запросов
Набор компонентов-генераторов содержания включает PageProdcuer и InternetExpress (только Delphi). В Delphi 6 добавляются компоненты WebServices 	Поддерживаются все компоненты, доступные для архитектуры WebBroker, плюс компоненты WebSnap и другие средства быстрого создания Web-страниц
Нет поддержки языка сценариев для серверной части приложения 	Поддержка сценариев на JScript или VBscript, позволяющая отделить логику генерации HTML от бизнес-логики
Нет встроенной поддержки именования страниц 	Диспетчер страниц может обрабатывать запросы к именованным страницам при обращении к ним из серверных сценариев и приложений
Нет поддержки контекста (сессии) 	Поддержка сессий позволяет хранить информацию о конечном пользователе, которая может быть полезна для реализации таких возможностей, как авторизация и отключение пользователей
Каждый запрос должен быть явно обработан компонентом WebActionItem или автодиспетчеризуемым компонентом 	Компоненты-диспетчеры автоматически отвечают на различные запросы в соответствии с заложенной бизнес-логикой
Только некоторые компоненты позволяют осуществлять предварительный просмотр генерируемых страниц, оставляя большую часть разработки невизуальной	Дизайнер WebSnap позволяет создавать Web-страницы визуально и просматривать результаты во время разработки. Предварительный просмотр доступен для всех компонентов
Общие принципы разработки приложений с использованием WebSnap примерно схожи с разработкой приложений на основе WebBroker, за исключением особенностей, перечисленных в таблице.
Вид палитры компонентов WebSnap показан на рис. 5. Как видно из рисунка, архитектура WebSnap действительно поддерживает гораздо больше различных компонентов для создания Web-страниц по сравнению с WebBroker.
Компоненты типа «адаптер» (TAdapter, TPagedAdapter, TDataSetAdapter, TLoginFormAdapter, TApplicationAdapter и т.д.) служат для реализации поддержки языков сценария на стороне сервера. Так, например, компонент TDataSetAdapter служит для использования языка сценария при формировании отображения содержимого набора данных. При этом может использоваться JScript или VBScript, в зависимости от типа сервера, для которого разрабатывается приложение. Немаловажным фактом является то, что WebSnap поддерживает JScript на стороне сервера в соответствии со спецификацией ECMA (ECMA-262), описывающей объектно-ориентированный язык сценариев для формирования содержания HTML-страниц. Дополнительную информацию об этом стандарте можно получить на странице этой организации по адресу http://www.ecma.ch/.
Другая часть компонентов WebSnap относится к классу «диспетчер» (TPageDispatcher, TAdapterDispatcher) и обеспечивает диспетчеризацию HTTP-запросов и ответов на них в соответствии с заданной бизнес-логикой.
Компоненты типа «список» (TStringsValuesList, TDataSetValuesList, TWebUserList) позволяют включать в содержимое HTML-страниц различные списки (текстовых строк, строк наборов данных, списки пользователей и т.д.).
Компоненты типа «продюсер» (TXSLPageProducer, TAdapterPageProducer) позволяют генерировать страницы на основе компонентов типа «адаптер» и других, представляющих собой отдельные элементы HTML-страницы, «собирая» их в единый HTML-документ. При этом TXSLPageProducer позволяет формировать содержимое страницы на основе XML-трансформации исходного шаблона, описанного в соответствии со стандартами XML (eXtensible Markup Language) и XSL (eXtensible Stylesheet Language), и исходных данных в формате XML, которые, в свою очередь, могут быть сформированы непосредственно внутри приложения, считаны из внешнего файла или получены через компоненты доступа к данным (dbExpress, DataSnap).
В основе Internet-приложения на основе WebSnap по-прежнему лежит компонент-контейнер, который, однако, теперь может быть в приложении не единственным. Контейнером в иерархии WebSnap является компонент TWebSnapDataModule или TWebAppPageModule, то есть подразумевается разбиение приложения на страницы подобно «классическому» Web-сайту. Внутри этого контейнера располагаются визуальные компоненты для генерации содержания и невизуальные компоненты WebActionItem, отвечающие за построение дерева реакций приложения на HTTP-запросы. Примерный вид WebAppPageModule в режиме design-time приводится на рис. 6.
Как можно увидеть из этого рисунка, WebSnap действительно допускает использование компонентов WebBroker совместно с компонентами новой архитектуры, что открывает чрезвычайно большой выбор возможностей реализации той или иной задачи построения Internet-приложения в зависимости от ее сложности и других факторов. При этом компоненты WebBroker, вложенные в контейнер TWebAppPageModule, будут работать в новой, многоконтейнерной архитектуре приложения WebSnap точно так же, как и в одноконтейнерной архитектуре WebBroker, что позволит при необходимости осуществить переход к новой архитектуре без внесения многочисленных изменений в существующее приложение.
Дерево обработки HTTP-запроса по-прежнему описывается при помощи компонентов WebActionItem, как это делалось в архитектуре WebBroker, за исключением того, что, помимо возможности разбиения приложения на несколько контейнеров (например, по аналогии со страницами Web-сайта), внутри каждого контейнера может иметься несколько компонентов-диспетчеров, содержащих отдельные деревья WebActionItems для различных типов запросов и, следовательно, реализующих специальные алгоритмы их обработки внутри одного контейнера, (тогда как в архитектуре WebBroker все запросы должны были обрабатываться внутри одного дерева компонентов WebActionItem).
Архитектура WebSnap обеспечивается большим числом мастеров (wizards) для первичной генерации «скелетов» Internet-приложений, а также для выполнения повторяющихся промежуточных операций.
В отличие от реализации поддержки WebBroker в Delphi 5 и Kylix, поддержка WebSnap в Delphi 6 включает в себя расширенные средства визуальной разработки и предварительного просмотра генерируемых данных. Так, средство Page Module View позволяет осуществлять предварительный просмотр результатов генерации содержания страницы на основании отдельного Page Module без компиляции и запуска приложения под управлением Web-сервера, что существенно облегчает отладку Internet-приложений. При этом, в отличие от средств поддержки WebBroker, для WebSnap используется встроенный браузер, что исключает привязку архитектуры к какому-либо одному средству просмотра (как это было с WebBroker), по причине чего в Kylix и Delphi 5 не были включены средства предварительного просмотра результатов генерации компонентов типа PageProducer и DataSetProducer (при этом предварительный просмотр поддерживался только для компонентов InternetExpress за счет использования сервера OLE Automation от MS Internet Explorer, что, естественно, автоматически исключало перенос этого сервиса, например, на платформу Linux).
Помимо просмотра сгенерированного HTML-содержания средства предварительного просмотра Delphi 6/WebSnap позволяют отображать результаты построения XML- и XSL-деревьев без компиляции приложения, что также значительно упрощает процесс создания и отладки приложений.
Также в состав средств поддержки XML, которая вообще является в Delphi 6 одним из наиболее значимых нововведений, входит средство построения схем связей XML (XML Data Binding Wizard), позволяющее на основе файлов данных в формате XML формировать файлы связей, описывающих типы объектов и их атрибуты на основе исходных данных, которые затем могут быть использованы для выполнения трансформаций внутри приложений.
Как мы говорили выше, Delphi 6 по-прежнему поддерживает и компоненты InternetExpress, которые также могут быть использованы совместно с компонентами WebSnap.
Компоненты InternetExpress позволяют осуществлять включение данных в содержание HTML-страниц за счет использования механизма «прозрачных» HTML-тэгов при генерации содержания. InternetExpress состоит из компонентов InetXPageProducer и XMLBroker.
Первый является наследником PageProducer и производит непосредственную генерацию HTML-содержания с «прозрачными» HTML-тэгами. Второй осуществляет обмен данными с сервером (источником) данных на основе технологии MIDAS, то есть практически с любым существующим поставщиком данных, реализующим один из поддерживаемых MIDAS стандартов (CORBA, COM/DCOM, Sockets и т.д.).
При этом для передачи данных к клиентской части приложения (Web-странице внутри HTML-браузера) используются XML DataPackets, содержащие как собственно данные, так и их описание в формате XML. Для передачи изменений в данных, которые могут быть произведены внутри клиентской части Internet-приложения на основе InternetExpress, используются DeltaPackets, опять-таки в формате XML, описывающие исключительно изменения, которые должны быть внесены в данные на сервере, что позволяет снизить трафик между клиентами и Web-сервером. За генерацию пакетов данных (data packets) и расшифровку разностных пакетов (delta packets) отвечает компонент XMLBroker, который также транслирует изменения серверу данных.
Изюминкой архитектуры InternetExpress является то, что, в отличие от компонента PageProducer и его наследников - DataSetPageProducer и других, InetXPageProducer не включает данные в состав HTML-страниц. Вместо этого данные, переданные в виде XML DataPackets клиентскому приложению (браузеру), подставляются на место «прозрачных» HTML-тэгов за счет реализации DOM (Document Object Model - объектной модели документа) внутри браузера-клиента, которая, в частности, описывает замещение «прозрачных» тэгов-свойств документа реальными значениями. В случае если браузер не имеет встроенной реализации DOM, используется реализация на JavaScript, как, например, это сделано для Netscape Navigator. Набор соответствующих сценариев включен в поставку Delphi, а InetXPageProducer может обеспечивать передачу этих сценариев на сторону клиента при первом обращении к Internet-приложению на основе InternetExpress за счет включения ссылок на них в содержание генерируемых страниц.
Как обычно, на базе компонентов InternetExpress могут быть созданы их расширенные версии, позволяющие реализовать внутреннюю обработку дополнительных «прозрачных» тэгов, вынести типовые свойства HTML-страниц, например заголовки или кодировку, в свойства компонентов-генераторов содержания.
Компоненты InternetExpress вкладываются в контейнер WebModule или WebSnapDataModule/WebSnapPageModule и могут использоваться совместно с другими компонентами архитектур WebBroker и WebSnap.
Таким образом, архитектура WebSnap позволяет использовать существующие разработки на основе архитектуры WebBroker при создании Internet-приложений на базе новых технологий, предлагаемых Delphi 6. При этом также остается возможность разработки кросс-платформенных Internet-приложений на основе библиотеки CLX и архитектуры WebBroker, которые будут поддерживаться как Delphi 6, так и Kylix, причем в случае соблюдения при разработке определенных правил перенос проекта между платформами не будет односторонним, то есть появляется возможность вести параллельную разработку для обеих операционных систем, с последующим переносом приложения с «ведущей» ОС на «ведомую».
== Заключение ==
Итак, мы рассмотрели основные возможности разработки Internet-приложений с использованием Kylix и Delphi 6. Безусловно, в силу ограниченного объема статьи было невозможно уместить здесь более подробный обзор вновь появившихся технологий, однако основной нашей целью было показать, что нового привнесли в область разработки приложений для Internet два новых продукта компании Borland, и постараться заинтересовать как разработчиков уже существующих проектов этого класса, так и тех, кто находится в стадии принятия решения о выборе средства разработки и операционной системы для своего проекта, поскольку с выходом Kylix и Delphi 6 возможности разработки приложений, использующих Internet-технологии, многократно возросли. Надеемся, что данный обзор поможет вам разобраться в новых возможностях указанных продуктов.
КомпьютерПресс 6'2001
Author: Никита Попов
Source: Взято из http://delphi.chertenok.ru
ID: 03432
Category:Связь
Category:Web
Category:Статьи