Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Программирование для Internet >> Cоздание Web-приложений с помощью Delphi. >> Классы TWebModule и TWebDispatcher.

[Назад]    [Содержание ]    [Вперед]

  


Классы TWebModule и TWebDispatcher.


Классы TWebModule и TWebDispatcher

При выборе из меню Delphi команды File=>New открывается диалоговое окно New Items. Выберите в нем пиктограмму Web Server Application для запуска мастера, с помощью которого можно выбрать тип расширения Web-сервера. Предлагается три варианта: приложения 1SAPI/NSAPI, CGI и Win-CGI. В этой главе уделяется внимание созданию приложений ISAPI/NSAPI. Схема расширений CGI-серверов примерно такая же, просто с приложениями ISAPI немного легче работать.

После выбора типа приложения Delphi создает проект на базе класса TWebModule. Главный проект представляет собой DLL, а главный модуль содержит класс TWebModule, который является потомком класса TDataModule и содержит всю логику, необходимую для получения HTML-запроса и ответа на него. Класс TWebModule, подобно своему предку, может принимать только невизуальные элементы управления. Для наполнения содержимого класса TWebModule вы можете использовать все элементы управления базами данных, а также элементы вкладки Internet палитры компонентов, связанные с созданием HTML-данных. Это позволит вам добавить бизнес-правила для Web-приложений подобно тому, как это можно было бы сделать с помощью класса TDataModule в обычных приложениях.

Класс TWebHodule обладает свойством Actions, которое содержит семейство элементов TWebActionItem Элемент TWebActionItem позволяет выполнять код. основанный на определенном запросе. Каждый элемент TWebActionItem имеет собственное имя, и, когда клиент создает запрос, основанный на этом имени, выполняется ваш код и подается соответствующий запрос.

На заметку Приложение Web-сервера можно создать с помощью одного из ваших уже существующих модулей данных. Одним из полей класса TWebModule служит класс TWebDispatcher, включенный в палитру компонентов. Если вы с помощью менеджера проектов замените в своем приложении Web-сервера предлагаемый по умолчанию модуль TWebModule существующим модулем данных, то сможете опустить на него компонент TWebDispatcher, и этот модуль станет приложением Web-сервера. Компонент TWebDispatcher вкладки Internet палитры компонентов добавляет все функции, инкапсулированные в классе TWebModule. Поэтому, если все ваши "правила игры" (а точнее, бизнес-правила) оформлены в виде существующего модуля данных (класса TDataModule), то сделать эти правила доступными для Web-приложений очень просто ? указать мышью и щелкнуть. Класс TDataModule вместе с компонентом TWebDispatcher функционально эквивалентен классу TWebModule. Единственное отличие заключается в том, что доступ к действиям протокола HTTP осуществляется через компонент TWebDispatcher, а не непосредственно силами самого класса TDataModule.

Выберите модуль TWebModule, чтобы его свойства отобразились в окне инспектора объектов. Выберите свойство Actions и либо дважды щелкните на нем, либо выберите редактор свойств с помощью маленькой кнопки, изображающей многоточие (...). Откроется диалоговое окно WebModule Actions. Щелкните на кнопке New и выберите элемент WebActionItem. В окне инспектора объектов отобразятся свойства элемента Action. Перейдите к свойству PathInfo и введите в качестве его значения /test. Затем перейдите во вкладку Events инспектора объектов и дважды щелкните на событии OnAction, чтобы создать новый обработчик событий. Он будет иметь следующий вид:

procedure TWebModulel.WebModulelWebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
end;

Этот обработчик событий содержит всю информацию о запросе, который сгенерировал это действие, и средства для ответа на него. Информация запроса клиента содержится в параметре Request, который имеет тип TWebRequest. Параметр Response имеет тип TWebResponse и используется для отправки требуемой информации обратно клиенту. Внутри этого обработчика события можно написать любой код, необходимый для ответа на запрос, включая обработку файла, действия над базой данных или еще что-нибудь, нужное для отправки HTML-страницы назад клиенту.

Прежде чем погрузиться в глубины класса TWebModule, рассмотрим простой пример, демонстрирующий основные принципы работы приложения Web-сервера. Простейший способ создать HTML-страницу, которая отвечает на запрос клиента, ? построить ее прямо в коде Delphi с помощью класса TStringList. После размещения страницы HTML в компоненте TStringList ее без труда можно присвоить свойству Content параметра Response. Свойство Content представляет собой строку, которая используется для хранения страницы HTML. предназначенной для возвращения клиенту. Это единственное свойство параметра Response, которое должно быть заполнено, поскольку оно содержит данные, подлежащие отображению. Если это свойство остается пустым, броузер клиента сообщит, что запрашиваемый документ пуст. В листинге представлен код, который нужно добавить к обработчику, чтобы протестировать его.


Листинг


procedure TWebModule.WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
═════Page: TStringList;
begin
═════Page := TStringList.Create;
═════try
══════════with Page do
══════════begin
═══════════════Add('<HTML>');
═══════════════Add('<HEAD>');
═══════════════Add('<TITLE>Web Server Application -- Basic Sample</TITLE>');
═══════════════Add('</HEAD>');
═══════════════Add('<BODY>');
═══════════════Add('<B>This page was created on the fly by Delphi</B><P>');
═══════════════Add('<HR>');
═══════════════Add('See how easy it was to create a page on the fly with Delphi''s Web Extensions?');
═══════════════Add('</BODY>');
═══════════════Add('</HTML>');
══════════end;
══════════Response.Content := Page.Test;
═════finally
══════════Page.Free;
═════end;
═════Handled := True;
end;


Сохраните этот проект под именем SAMPLE1. скомпилируйте его и поместите полученный в результате файл SAMPLE1.DLL в действующем по умолчанию каталоге вашего Web-сервера, использующего интерфейс ISAPI или NSAPI. Затем направьте свой броузер по адресу:

<каталог по умолчанию>/sample1.dll/test

В окне броузера вы должны увидеть ожидаемую Web-страницу, как показано на рис. 1. Обратите внимание на то, что результатом компиляции этого проекта является DLL, которая отвечает спецификации ISAPI. Исходный код этого проекта выглядит следующим образом:

library Sample1;
uses
═════HТТРАрр,
═════ISAPIApp,
═════Unit1 in 'Unitl.pas' { WebModule1: TWebModule} ;
{ $R *.RES}
exports
═════GetExtensionVersion,
═════HttpExtensionProc,
═════TerminateExtension;
begin
═════Application.Initialize;
═════Application.CreateForm(TwebModule1, WebModule1);
═════Application.Run;
end.




Рисунок 1

Обратите внимание на три экспортируемых процедуры: GetExtensionVersion, HttpExtensionProc и TerminateExtension. Это единственные процедуры, которые требуются спецификацией ISAPI. Данное приложение отвечает требованиям ISAPI, но будет работать и с серверами, ориентированными на NSAPI.

Внимание Подобно любому типичному приложению, ваше ISAPI-приложение использует глобальный объект Application. Однако в отличие от обычного приложения этот проект не использует модуль Forms. Вместо него модуль HTTApр содержит переменную Application типа TWebApplication. Благодаря этому обрабатываются все специальные вызовы, необходимые в Web-сервере, ориентированном на интерфейс ISAPI или NSAPI. Поэтому вам никогда не следует пытаться добавлять модуль Forms в расширение ISAPI-ориентированного Web-сервера, поскольку это может направить компилятор "по ложному следу", заставив его использовать неправильную переменную Application.

 

На примере этого маленького проекта иллюстрируется простота построения приложения Web-сервера с предоставлением ответа на запрос клиента с помощью Delphi. Это относительно простой пример, в котором прямо в самом коде динамически создается HTML-страница. Но, как вы увидите позже, в Delphi предусмотрены средства генерировать ответы гораздо более сложным и интересным образом, однако для этого необходимо глубже вникнуть в работу приложения Web-сервера. Поэтому вашему вниманию предлагается следующий раздел.

[Листинг с примером простейшего Web-приложения на Delphi]




[Назад]    [Содержание ]    [Вперед]

  


  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017