Н. 3. Елманова. C++ Builder 3.0, архитектура "клиент/сервер" и Internet
ром    используется    специальный    протокол    передачи    данных    HTTP (HyperText Transfer Protocol).
Когда Web-приложение, созданное с помощью C++Builder, получает HTTP-запрос, оно создает объект TWebRequest для представления запроса и объект TWebResponce для представления отклика, посылаемого в браузер пользователя. Затем оба объекта передаются объекту TWebModule (рис. 9.4).
Рис. 9.4. Структура Web-приложения
TWebModule содержит набор объектов TWebActionltems, хранящих информацию о том, как обрабатывать различные пользовательские запросы. Опознав запрос, он выбирает нужный из этих объектов и выполняет соответствующий обработчик события OnAction, выполняющий запрос и динамически генерирующий ответ, который передается приложением через Web-сервер в браузер пользователя.
Для того чтобы приложение было работоспособным, создадим хотя бы один объект TWebActionltem, реализующий отклик на пользовательский запрос. С этой целью из контекстного меню объекта TWebModule надо выбрать пункт Action Editor и в появившейся форме нажать кнопку Add. Далее можно установить свойства Pathlnfo и Default объекта WebActionlteml. Первое свойство является частью URL (Uniform Resource Locator) - полного описания пути к доступному в Web ресурсу (рис. 9.5).
216
Создание Web-приложений
протокол___хост	имя скрипта       Pathlnfo
Query
http:/Avww.mysite.ru/scripts/mywebapp.exe/testl?paraml=namel&parain2=name2
QueryField      QueryField Puc. 9.5. Структура URL
Второе свойство указывает, выполняется ли данный отклик, если параметр Pathlnfo в пользовательском запросе остался пустым (рис. 9.6).
Рис. 9.6. Action Editor
Создадим обработчик события OnAction компонента TWebActionltem:
void _fastcall TWebModulel::WebModule1WebActionItem1Action TObject *Sender, TWebRequest *Request, TWebResponse *Response,  bool &Handled)
{
AnsiString cont=AnsiString( "<НТМ!_><ВСЮУ><НЗ>Привет
всем!</НЗ>");
cont=cont+AnsiString("<BR>");
cont=cont+AnsiString("<Н2>Сейчас
")+TimeToStr(Time())+AnsiString(" </H2>");
cont=cont+AnsiString("</BODY></HTML>");
Response->Content=cont;
}
В этом обработчике события генерируется HTML-страница, содержс щая текущее время, примерно следующего вида (рис. 9.7).
21