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.
Оставить комментарий
Комментарии
где и как расположить библиотеку
будет ли сразу она работать или её надо какимнибудь образом регестрировать да и как проверить iis что он вообще может запускать isapi расширения