Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по программированию » Delphi - Все статьи »

Обсудить на форуме Обсудить на форуме

ISAPI / NSAPI

Итак, что такое CGI? Что это такое, документацию, статьи вы можете найти в интернете. Для платформы WIN32 существует три вида CGI интерфейса, поддерживаемых Delphi.

  • ISAPI - Стандарт Internet Server API изначально был создан как Microsoft Information Server API, но в дольнейшем был предложен в качестве открытого стандарта.
  • NSAPI - Стандарт Netscape Server API используется для взаимодействия с серверами компании Netscape
  • CGI - Common Gateway Interface (стандартный интерфейс шлюза) был первой попыткой интеграции WWW-серверов и отдельных программ.
  • WinCGI - Windows вариант CGI

Поскольку компании Netscape приняла стандарт ISAPI, в данный момент реально существует единый формат для Internet Information Server (IIS) и серверов компании Netscape. Поэтому воспользуемся предоставляемым Delphi инструментарием для создания ISAPI DLL, которая будет отвечать на запросы клиентов.

Создание ISAPI библиотеки

Создание ISAPI DLL похоже на разработку любой стандартной DLL. Для этого необходимо загрузить Delphi, в меню File выбрать пункт New,

затем в диалоговом окне New Items выбрать пиктограмму Web Server Application и нажать кнопку OK. Появится диалоговое окно New Web Server Application.

Пункт ISAPI/NSAPI Dynamic Link Library выбран по умолчанию, поэтому нажимаем кнопку OK.

Вы попали в интерактивную среду разработки ISAPI расширения сервера. В вашем проекте содержится специальный модуль WebModule, он позволяет помещать в него различные компоненты и обеспечивает работу с ними.

 Если дважды щелкнуть мышкой на WebModule, появится Action Editor, предназначенное для создания и редактирования обработчиков событий ActionItem. Для создания ActionItem следует нажать кнопку Add New, при этом в окне Object Inspector отобразятся свойства и события созданного ActionItem.

 Специальные компоненты, облегчающие создание динамических страниц расположены , также, на странице Internet палитры компонентов. Это - PageProduсer и ему подобные, предназначенные для генерации динамических HTML страниц.

Познакомимся с основными объектами и классами ISAPI поближе.

WebModule

WebModule - автоматически создаваемый модуль для приложений Web-сервера.

Когда новое Web приложение создано, оно автоматически содержит WebModule. Это дает возможность созданному Web приложению ответить на запрос HTTP, пропуская запрос и ответ к соответствующим обработчикам ActionItems. Приложение может содержать только один WebModule.

WebModule имеет два важных свойства Request и Response с которыми мы познакомимся немного позже, а также события:

OnCreate

Происходит когда приложение создает WebModule. Следует использовать это событие для инициализации переменных и объектов, содержащихся в приложении. Например, если модуль содержит базу данных, приложение может установить подключение базы данных.

OnDestroy

Происходит перед уничтожением WebModule. Используйте это событие для освобождения объектов, созданных динамически в приложении.

BeforeDispatch

Происходит перед тем, как диспетчер устанавливает соответствие запроса HTTP с каким-либо ActionItems. Используйте обработчик события BeforeDispatch для предварительной обработки HTTP запроса.

AfterDispatch

Происходит после того, как HTTP ответ был успешно сформирован ActionItems, но еще не передан клиенту. Используйте обработчик события AfterDispatch, например, для проверки сформированного HTTP ответа.

Request

Request - автоматически создаваемый объект WebModule.

Request представляет текущий HTTP запрос в удобной форме для обработки. Об отдельных свойствах этого компонента следует сказать особо.

ContentFields

Педоставляет содержимое полей POST запроса. Используйте ContentFields, чтобы читать содержимое полей запроса HTTP, при использовании метода POST.

QueryFields

Педоставляет параметры и их значение в случае передачи их запросом в URL документа. Используйте QueryFields, чтобы читать поля запроса HTTP, при использовании метода в котором параметры передаются в URL документа, например метод GET.

ContentFields и QueryFields возвращаю параметры передаваемые клиентом, это обьекты наследованные от класса TStrings, данные в них представлены в виде имя = значение.

Response

Response - также автоматически создаваемый объект WebModule.

Объект Response содержит информацию, которая будет передана клиенту, в результате обработки запроса. Заполнять Response необходимо вам. После того как все свойства будут заполнены, будет сформирован HTTP ответ, который и будет передан клиенту.

Среди свойств объекта Response следует обратить внимание на:

ContentType

Указывает тип содержимого HTTP ответа в соответствии со спецификацией MIME. Используйте ContentType, чтобы установить тип содержимого передаваемого клиенту, например, если вы передаете изображение в формате GIF, вы должны установить ContentType = 'image/gif'.

Content

Содержит информацию, передаваемую клиенту в ответ на сообщение запроса HTTP. Используюте Content, чтобы передать требуемую информацию клиенту.

ContentStream

Определяет Stream объект, который будет передан клиенту. Используйте ContentStream для передачи клиенту содержимого отличного от ContentType = 'text/*', например при передаче бинарного файла. Если свойство ContentStream установлено, оно заменяет свойство Content.

Как это работает

В общем случае так. При выполнении HTTP запроса, веб сервер запускает на выполнение ваше ISAPI приложение.

Создается объект Application, порожденный от TISAPIApplication или TCGIApplication. TISAPIApplication и TCGIApplication в свою очеродь имеют общего предка TWebApplication и перекрывают все его виртуальные методы. Объект Application создается автоматически от нужного класса, в зависимости от того, какой тип (ISAPI или CGI) приложения Вы выбрали, об этом заботится визард Delphi.

Следующим автоматически создается объект WebModule, созданный от класса TWebModule, и генирируется событие TWebModule.OnCreate. Затем WebModule создает все обьекты ActionItems и генерирует событие TWebModule.BeforeDispatch. После обработки события BeforeDispatch назначается обьект ActionItem, котрый получает возможность обработать запрос. Обработку запроса и формирование ответа должны производить Вы, анализируя обьект Request и заполняя Response. Все это можно сделать на событии ActionItem.OnAction. В большинстве случаев, для того чтобы сформировать ответ необходимо заполнить свойство Content обьекта Response. После отработки собития OnAction обьекта (или обьектов) ActionItem  происходит формирование HTTP ответа и генерируется событие TWebModule.AfterDispatch, затем ответ отсылается клиенту.

Следующим, последним, событием генерируется TWebModule.OnDestroy.

Внимание:В случае ISAPI приложения, объект WebModule может быть создан один раз и не создаваться при каждом запросе, следовательно не будут генерироваться события OnCreate и OnDestroy объекта WebModule.


Может пригодится:


Автор: Неизвестен
Прочитано: 3510
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (1)

Прислал: Иван
Спасибо, отличная статья.

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру