В предыдущем материале мы рассмотрели особенности работы и различия в
реализации ISAPI/NSAPI и CGI приложений для веб-сервера. Теперь настал черед
использовать полученные навыки на практике.
Так как мы будем создавать ISAPI-приложение, то соответственно необходимо,
чтобы на компьютере был установлен IIS. В Windows 9.xx он также именуется как
Personal Web Server и находиться обычно в папке PWS инсталляционного диска. Для
установки IIS в Windows 2000 необходимо выбрать компоненты служб IIS при
установке или добавление компонентов Windows.
Для создания ISAPI-приложения в Delphi необходимо создать новый проект Web
Server Application. Как видите по умолчанию сразу же доступен специальный модуль
WebModule. Он является обязательным и дает возможность веб-приложению ответить
на запрос HTTP, пропуская запрос и ответ к соответствующим обработчикам
ActionItems. Приложение может содержать только один WebModule.
Так как это основной объект, с которым придется работать, создавая
веб-приложение, стоит рассмотреть WebModule подробнее. К главным событиям
WebModule относятся:
- OnCreate
- Это событие происходит в тот момент, когда приложение создает WebModule.
Чаще всего его следует использовать для инициализации переменных и объектов,
содержащихся в приложении.
- OnDestroy
- Происходит перед уничтожением WebModule. Здесь желательно производить
освобождение объектов, созданных динамически в приложении.
- BeforeDispatch
- Событие происходит перед тем, как диспетчер устанавливает соответствие
запроса HTTP с ActionItems.
- AfterDispatch
- Происходит после того, как HTTP ответ был успешно сформирован ActionItems,
но еще не передан клиенту.
Создавая ISAPI приложения, нужно помнить, что объект WebModule может быть
создан один раз и не создаваться при каждом запросе, следовательно, не будут
генерироваться события OnCreate и OnDestroy объекта WebModule.
WebModule имеет два важных свойства Request и Response, с помощью которых
принимает и передает данные IIS. Response - автоматически создаваемый объект
WebModule, содержащий информацию, которая будет передана клиенту, в результате
обработки запроса. После того как все свойства Response будут заполнены, будет
сформирован HTTP ответ, который и будет передан клиенту.
Среди свойств объекта Response существуют следующие:
- ContentType
- Тип содержимого HTTP ответа в соответствии со спецификацией MIME. Его
необходимо использовать, чтобы установить тип содержимого передаваемого клиенту.
Если к примеру нужно передать изображение в формате GIF, необходимо установить
ContentType = 'image/gif'.
- Content
- Содержит непосредственно информацию, передаваемую клиенту в ответ на
сообщение запроса HTTP.
- ContentStream
- Определяет Stream объект, который будет передан клиенту. Используют в
основном для передачи клиенту содержимого отличного от ContentType = 'text/*'.
- Request
- Также автоматически создаваемый объект WebModule, с помощью которого можно
получить информацию от пользователя. В принципе Request представляет текущий
HTTP запрос в удобной для обработке форме. Его основные свойства:
- ContentFields
- Предоставляет содержимое полей POST запроса.
- QueryFields
- Предоставляет содержимое GET запроса. То есть извлекает необходимый
параметр, передаваемый приложению из url. Как ContentFields, так и QueryFields
возвращаю параметры в виде "имя = значение".
Пойдем дальше. Попробуем создать простейшее веб-приложение, что-то вроде
новой вариации "Hello, world!" для IIS. WebModule у нас уже создан. Теперь
возьмем с закладки компонентов Delphi Internet, компонент PageProducer, что
отвечает за выдачу HTML-документа.
В свойстве HTMLDoc PageProducer наберем всем известное "Hello, world!".
Теперь необходимо создать Add Item - новый обработчик событий. Сделаем так,
чтобы он запускался по умолчанию. Для этого переведем свойство Default из False
в True. И заключительный шаг - укажем обработчику на то, что он должен выдавать
результат созданного PageProducer. В свойстве Producer выберем PageProducer.
Наше веб-приложение готово. Готовый dll нужно скопировать в каталог
веб-сервера и запустить его через броузер, по адресу вроде
http://localhost/cgi-bin/Project1.dll. В окне броузера должно появиться
приветствие "Hello, world!".
На сегодня это пока все. В следующий раз попробуем создать что-то более
существенное, например, подключиться к базе данных.
|