Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тотосько_106-120.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
947.73 Кб
Скачать

Компіляція і тестування створеного додатка

Для компіляції проекту виберіть в меню IDE Delphi команду Project ► Compile (або натисніть клавіші Ctrl + F9). Якщо в тексті програми не міститься помилок, то проект буде відкомпільований і в результаті компіляції створений виконаний файл, що має розширення ехе. Змініть розширення на cgi і перепишіть файл в каталог Scripts.

Для перевірки розробленого сценарію необхідно підготувати HTML-документ, з якого буде проводитися виклик сценарію. Документ повинен містити форму з двома полями для введення імені та пароля. Так як створений додаток може обробляти дані, передані як методом GET, так і методом POST, то має сенс включити в документ дві форми, одна з яких буде виковати метод GET, друга - POST. Вихідний HTML-код такого документа міг би виглядати приблизно так:

<HTML>

<HEAD>

<TITLE> Приклад CGI-програми </ TITLE>

</ HEAD>

<B0DY>

<H2> Метод GET </ H2>

<F0RM METHOD="GET" ACTION="/scripts/test.cgi/validate">

Введіть HMfl: <INPUT TYPE="TEXT'' NAME="login''> <BR>

Введіть пароль: <INPUT TYPE =

"PASSWORD" NAME = "password"> <BR> <BR> сINPUT TYPE = "SUBMIT">

</ F0RM>

<BR> <BR>

<H2> Метод POST </ H2>

<F0RM METH0D="P0ST" ACTION=''/scripts/test.cgi/validate">

Введіть HMR: <INPUT TYPE="TEXT" NAME="login"> <BR>

Введіть пароль: <INPUT TYPE =

"PASSWORD" NAME = "password"> <BR> <BR> <INPUT TYPE="SUBMIT">

</ F0RM>

</ B0DY>

</ HTHL>

Файлу, що містить наведений код, надайте ім'я default.htm і помістіть його в каталог wwwroot. Після цього можна запустити веб-браузер і перевірити працездатність CGI-додатка.

Як видно з розглянутого прикладу, компонент TWebModule значно полегшує інтерпретацію даних, отриманих від користувача. Однак формувати відповідь доводиться вручну, задаючи рядок ResponseContent у форматі HTML. Якщо потрібно видавати складний відповідь (хоча б для того, щоб результат виконання сценарію естетично виглядав у вікні веб-браузера), то такий підхід не дуже зручний. Тому в Delphi є спеціальні компоненти, що спрощують формування складних HTML-документів.

Компоненти для формування відповіді у форматі html

Компоненти для формування HTML-документів розташовуються на сторінці Internet палітри компонентів IDE Delphi 7. Умовно їх можна розділити на дві групи:

  • Компоненти для генерування HTML-документа на основі даних, що зберігаються в базі даних;

  • Компоненти для генерування HTML-документів без використання баз даних.

Першу групу ми розглянемо трохи пізніше, а поки познайомимося з єдиним компонентом, що належать до другої групи.

Компонент tPageProducer

Компонент TPageProducer - це найпростіший компонент для генерації HTML-документа на основі деякого заданого шаблону. Шаблон задається за допомогою наступних властивостей:

  • property HTMLDoc: TStrings - містить код шаблону HTML-документа;

  • property HTMLFile: TFileName - задає ім'я файлу, в якому міститься шаблон HTML-документа.

Зазначені властивості є взаємовиключними, тому можна задати тільки одне з них.

Компонент TPageProducer обробляє документ за допомогою методу Content:

function Content: string: override:

Цей метод виконує обробку шаблону і повертає результат обробки у вигляді HTML-документа.

Шаблон являє собою звичайний HTML-документ, в який, крім звичайних HTML-тегів, можуть включатися спеціальні теги, які мають наступний формат:

<# Паші paraml = va1uel param2 = value2 ...>

Коли при обробці шаблону TPageProducer зустрічається з такими тегами, метушні ¬ кає подія OnHTMLTag (єдина подія TPageProducer). У обробнику цієї події можна визначити, який тег обробляється і чим його слід замінити.

Обробник події OnHTMLTag має наступний формат:

type

TTag - (tgCustom. tgLink, tglmage, tgTable. TglmageMap,

tgObject, tgEmbed):

THTMLTagEvent - procedure (Sender: TObject: Tag: TTag: const

TagString: string: TagParams: TStrings: var ReplaceText:

string) of object;

Тут параметр Tag визначає тип теги і може приймати одне з семи значень, залежно від імені теги:

  • tgLink - тег LINK (гіпертекстове посилання);

  • tglmage - тег IMAGE (зображення);

  • tgTable - тег TABLE (таблиця);

  • tglmageMap - тег IMAGEMAP (зображення з областями спрацьовування);

  • tgObject - тег OBJECT (об'єкт ActiveX);

  • tgEmbed - тег EMBED (вбудовувана бібліотека);

  • tgCustom - тег, який визначається користувачем (ім'я цього тегу не збігається з жодним із зумовлених).

Ім'я теги міститься в аргументі TagString. Параметри теги передаються через аргумент TagParams у вигляді рядків виду ім'я = значення. Через аргумент ReplaceText повертається рядок, на яку повинен бути замінений оброблюваний тег. Модифікуємо попередній приклад, використовуючи компонент TPageProducer. У відповіді додатково виведемо інформацію про IP-адресу клієнта, що послав запит, а також відобразимо ім'я, яке ввів користувач. Для цього буде потрібно внести в проект деякі зміни.

  1. Помістіть на форму компонента TWebModule компонент TPageProducer.

  2. У властивості HTMLDoc компонента TPageProducer задайте наступний шаблон:

<HTHL>

<HEAD>

<TITLE> Результат перевірки </ TITLE>

</ HEAD>

<B0DY>

<H3 ALIGN=LEFT> <# RESULT> </ H3>

<Р> Адреса: <# H0ST> </ P>

<Р> Ім'я: <# NAME> </ P>

</ B0DY>

</ HTML>

  1. У розділі private опису класу TWebModulel задають дві рядкові змін-ні: ResultStr і LoginStr.

  2. Змініть обробник події OnAction і задайте обробник події On HTMLTag так, як показано в наведеному нижче коді:

unit test_unit: i interface uses

Windows. Messages. SysUtils. Classes. HTTPApp; type

TWebModulel = class (TWebModule)

PageProducerl: TPageProducer: procedure

WebModulelWebActionItemlAction (

Sender: TObject: Request: TWebRequest:

Response: TWebResponse: var Handled: Boolean):

procedure PageProducerlHTMLTag (Sender: TObject:

Tag: TTag; const TagString:

String: TagParams: TStrings: var

ReplaceText: String): private

{Private declarations}

ResultStr: string:

LoginStr: string: public

{Public declarations} end:

Var

WebModulel: TWebModulel; implementation {$ R *. DFM}

procedure TWebModulel.WebModulelWebActionItemlAction (

Sender: TObject; Request: TWebRequest:

Response: TWebResponse: var Handled: Boolean); const

login: String = ■ 'test';

password: String = '123 ':

var

validate: Boolean; begin validate: = false: if

Request.Method * 'GET' then begin

Logi nStr: = Request.QueryF i elds.Va1ues ['1 ogi n'];

validate; = (LoginStr = login) and (Request.QueryFi

elds.Values ​​['password'] = password):

end:

if Request.Method = 'POST' then begin

Logi nStr: = Request.ContentFi elds.Values ​​['1 ogi n '];

validate: = (LoginStr = login) and (Request. ContentFi el ds.

Val ues [' password '> password):

end:

if validate

then Ре5і ^ 5 ^: = 'Ім'я / пароль введені правильно' else

Резіі5 ^: = 'Ім'я / пароль введені невірно';

Response.Content: = PageProducerl.Content: end;

procedure TWebModulel.PageProducerlHTMLTag (

Sender: TObject; Tag: TTag; const TagString: String;

TagParams: TStrings; var ReplaceText: String): begi n

if TagString = 'RESULT' then ReplaceText: = ResultStr: if

TagString = 'HOST' then ReplaceText: = (Sender as

TCustomContentProducer). Di spatcher.Request.RemoteHost: if

TagString = 'NAME' then ReplaceText: = LoginStr: end;

end.

Щоб перевірити отриманий додаток, немає необхідності вносити зміни в код HTML-документа, з якого здійснюється виклик сценарію.

ПРИМІТКА------------------------------------------------------------------------------------------------------------

Наведений приклад досить простий, тому з його допомогою важко оцінити достоїнства компонента TPageProducer. Тим не менш, він дає уявлення про особливості використання цього компонента та інтерпретації керуючих тегів.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]