На сегодняшний день, создание внутренних корпоративных веб-приложений уже,
пожалуй, не просто дань моде, когда все, что так или иначе связано с интернетом
считалось популярным и прогрессивным. Нынче менеджеры стали более скупы в
раздаче финансов для IT-отделов. Но вместе с тем приходит понимание, что
бизнес-приложения предприятий перенесенные на новую технологическую
"веб-оснастку" действительно значительно уменьшают издержки по поддержанию
данных приложений в актуальном состояние в дальнейшем. Вот краткий перечень
достоинств, которыми обладают корпоративные веб-приложения:
- не требуют инсталляции и обновления клиентского программного обеспечения;
- снижают затраты на обучение - в качестве клиентской части используется
стандартный веб-броузер;
- пользователи могут работать на любой платформе;
- логика приложения сосредоточена на стороне сервера;
- возможность интеграции с ресурсами интерета;
- создание сколь угодно привлекательного веб-интерфейса.
Если мы будем рассматривать веб-приложения с точки зрения программиста, то
представить их можно как некий особый класс систем клиент-сервер, в которых
взаимодействие с пользователем осуществляется через стандартный веб-броузер.
Если сравнивать структуру веб-приложения и классического приложения, основанного
на технологии клиент-сервер, то можно охарактеризовать составляющие компоненты
следующим образом:
- В роли "тонкого клиента", которые отвечает за отображения данных и передачу
их от пользователя серверу, выступает броузер. Пользовательский интерфейс
всецело определяется HTML-документом, со всеми возможными дизайнерскими
ухищрениями.
- Веб-сервер обеспечивает работу по протоколу HTTP, принимает запросы от
клиента, взаимодействует непосредственно с веб-приложением, передает ответы
клиенту. Веб-приложение - программа, которая, используя веб-сервер, обрабатывает
запросы от клиента, производит необходимые манипуляции с данными, передает
ответы клиенту.
Давайте на практическом примере разберем все стадии создания законченного
веб-приложения стандартными средствами Delphi 5. О том, насколько расширился
диапазон компонентов для веб-приложений в новой версии Delphi 6, мы поговорим
отдельно, и в конце цикла статей.
Подобная тема уже рассматривалась на нашем сайте. Смотрите материал "Создание
web-приложений в среде Delphi" (www.mcsa.ru/d2.shtml), где достаточно подробно
разбирался вопрос, как обычное консольное приложение, созданное в Delphi, без
использования визуальных компонентов "превратить" в приложение для веб-сервера.
Но сейчас мы рассмотрим создание веб-приложения с использованием
специализированных компонентов Delphi.
Создать подобное приложение в Delphi не сложнее, чем стандартную визуальную
программу для Windows. Что бы создать новое веб-приложение в Delphi 5, следует
выбрать пункт Web Server Application. При этом существуют три различных варианта
реализации приложения:
- ISAPI/NSAPI Dynamic Link Library
- CGI Stand-alone executable
- Win-CGI Stand-alone executable
Тут нам придется обратиться к теории, чтобы четко представлять себе разницу
между тем или иным типом веб-приложений. Вообще стандартная функциональность
веб-сервера, это передача клиенту статических фалов по протоколу HTTP. Но чаще
всего требуеться, чтобы информация, поступающая клиенту формировалась
динамически. Для того чтобы веб-сервер мог получить, и соответственно передать
от приложения данные клиенту, используют интерфейсы веб-сервера.
В общем случае их всего два: API (Application Program Interface - программный
интерфейс приложений) и CGI (Common Gateway Interface - общий интерфейс шлюзов).
Интерфейс типа API представляет собой традиционный программный интерфейс, вполне
привычный для программистов использующих Delphi. При его использование нужно
создать динамически загружаемый программный модуль, в котором должен быть
реализован набор стандартных функций или классов операционной системы. Но помимо
этого, возможно, использовать функции, которые предоставляет веб-сервер. К
данному типу можно отнести интерфейсы ISAPI, NSAPI, WSAPI, Apache API, Java
Servlet API и другие.
При создание рассматриваемого нами веб-приложения, будет использоваться
интерфейс ISAPI, так как именно он реализован в MS IIS (Microsoft Internet
Information Server). А именно этот веб-сервер от Microsoft, разумнее всего
использовать для поддержки корпоративного веб-приложения. Но обо всем по
порядку.
ISAPI (Internet Server Application Programming Interface) - программныей
интерфейс, разработанный для сервера. ISAPI изначально был создан как Microsoft
Information Server API, но в дальнейшем был предложен в качестве открытого
стандарта. С помощью ISAPI возможно создавать два типа динамических модулей для
веб-сервера: непосредственно обработчики событий и фильтры.
Обработчик событий представляет собой библиотеку DLL (Dynamic-Link Library),
которая загружается и вызывается веб-сервером. Обработчик вызывается
веб-сервером при получение клиентского запроса с URL, типа
http://server/myapp.dll?запрос. При этом IIS вызывает библиотеку myapp.dll и
передает ей параметр "запрос".
Работа обработчика запросов ISAPI происходит в следующей последовательности:
- При получение первого клиентского запроса загружается соответствующая dll,
создается и инициализируется объект типа CHttpServer.
- Для каждого конкретного запроса создается отдельный объект
CHttpServerContext. Непосредственно для обработки запроса вызывается метод
объекта CHttpServer, которому в качестве параметра передается указатель на
CHttpServerContext. При этом, для каждой dll существует только один экземпляр
CHttpServer, методы которого исполняются в адресном пространстве веб-сервера
одновременно в нескольких потоках, при чем переменные объекта CHttpServer
доступны для них всех. Сам объект CHttpServer не выгружается из памяти даже при
прекращение выполнения запросов и доступен в течение всего времени работы
веб-сервера.
ISAPI-фильтр - это dll, которая загружается на при первом запросе от клиента,
а непосредственно при старте IIS и вызывается для обработки определенных
событий, возникающих при обращение клиента к веб-серверу. Это может быть как
предварительная обработка заголовка клиентского запроса (например на
корректность передаваемых данных), действие при ошибочных ситуациях (выдача
ошибки 404 File Not Found или др.), авторизация клиента, запись данных в журнал
веб-сервера и т.п. Создание ISAPI-фильтра ничем не отличается от создания
стандартного ISAPI-приложения. Необходимо будет лишь указать IIS, что та или
иная dll является ISAPI-фильтром.
Интерфейс CGI отличается от рассмотренного выше. Принцип его работы сводиться
к следующему: веб-сервер запускает внешнею программу (являющуюся
веб-приложением) в отдельном процессе операционной системы. При этом сервер
устанавливает ряд переменных окружения с которыми взаимодействует приложения.
Стандартно это заголовок HTTP-запроса, адрес запрашиваемого документа, строка
параметров, в которой могут, к примеру, содержаться данные передаваемые из
броузера пользователем и ряд других. Запущенное приложение анализирует данные
переменные и в соответствии с внутренней логикой выдает HTTP-заголовок, которые
и возвращается клиенту веб-сервером. Время жизни CGI-программы ограничено
временем обслуживания пользовательского запроса, по окончанию его выполнения
процесс завершается. При этом для каждого отдельного запроса запускается копия
веб-приложения. Данные приложения не могут взаимодействовать друг с другом и не
имеют программной связи с веб-сервером.
Если сравнивать CGI и API, вернее непосредственно ISAPI, то можно увидеть их
достоинства и недостатки. Причем верна такая парадоксальная мысль, что в
определенных условиях и для конкретных задач, недостатки одного или другого
интерфейса легко "трансформируются" в достоинства. На данный момент CGI наиболее
распространенный интерфейс и его поддерживают практически все веб-сервира без
необходимости установки дополнительных модулей. CGI-программа может создаваться
с использованием любого языка и средства разработки, поскольку запускается как
независимый от веб-сервера процесс и строго говоря, зависимо только от
операционной системы.
Преимуществом создания веб-приложений с использованием CGI является их
относительная большая надежность и безопасность для веб-сервера, так как они
выполняются независимо и даже в случае краха вряд ли могут привести к нарушению
функциональности веб-сервера в целом. Веб-приложения использующие CGI обладают и
рядом недостатков. При обработки большого количества запросов, веб-сервер
испытывает значительные нагрузки, так как для каждого запроса необходимо
отдельно заново запускать приложение. К тому же не имеется возможности
взаимодействовать с данными, поступающими от других запущенных приложений и
веб-сервера (кроме переменных окружения), что не позволяет создать достаточно
масштабные и сложные проекты.
Основным преимуществом использования ISAPI можно считать то, что они,
взаимодействуя с веб-сервером и объектами запросов поступающих от других
пользователей позволяют создавать многопользовательские приложения. Это особенно
важно при создание многопользовательских приложений работающих с базами данных и
имеющих сложную логику. В качестве примера можно привести чаты, где например
каждый обработчик событий может обращаться к общему для всех запросов списку
сообщений. Или интернет-магазин использующий список выбранных в корзину товаров.
Главнй недостаток ISAPI, что данный интерфейс поддерживается исключительно
сервером MS ISS. Кроме того, при некорректной работе ISAPI-приложения возможны
сбои в работе всего веб-сервера.
Еще одна существующая угроза, заключена в следующем: ввиду того, что IIS
весьма часто подвергается хакерским атакам и вообще не очень надежный сервер
использовать его как полноценные веб-сервер вне корпоративной сети, скорее всего
не стоит. Но в том случае, если IIS будет использован как внутренний
корпоративный веб-сервер, с использованием веб-приложений - это практически
идеальный вариант.
Почему мы все же выбираем ISAPI-приложение, если есть возможность создания (и
средствами Delphi в том числе) приложенный для CGI, ASP и т.д.? Дело в том, что
подобные веб-приложения быстрее и требуют меньших ресурсов. Веб-приложение
основанное на ISAPI многопоточно, и для обработки запроса клиента не требуется
загрузки еще одной копии приложения. По сравнению с тем же пресловутым ASP, они
имеют гораздо больший перечень функциональных возможностей. Например, можно
использовать все множества функций Win32 API без необходимости писать для этого
COM-объекты и существенно выигрывают по скорости, за счет того, что их код уже
откомпилирован и оптимизирован. Веб-приложения основанные на ISAPI кроме того
легко создаются из любого уже существующего приложения. Если оно было написано
на Delphi, то все может совестить к тому, чтобы заменить визуальные объекты на
специальные веб-компоненты, не переписывая ту часть, где сосредоточена сама
логика приложения, и его работа, например с базами данных.
В следующей части материала мы определим непосредственно логику приложения и
структура баз данных. А также создадим веб-интерфейс приложения и рассмотрим
особенности модуля Delphi WebModule.
|