Створення 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.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*