Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Замечание. При получении запроса Web-модуль перебирает свойство Pathinfo у всех, предварительно определенных действий с целью нахождения совпадения с запрашиваемым




Важно

При получении запроса Web-модуль перебирает свойство Pathinfo у всех, предварительно определенных действий с целью нахождения совпадения с запрашиваемым адресом.

В случае если она совпала с полем Pathinfo одного из действий, то автоматически активизируется этот вариант поведения модуля. Активизация действия означает выполнение кода, записанного в его свойстве OnAction, а также исполнение своих прямых обязанностей объектом, указанным в свойстве Producer.

Если же запрошенная строка на совпадает ни с одним Pathinfo, то по умолчанию активизируется действие, в котором свойство Default установлено в значение true.

 

Добавление нового действия

Для добавления действия в проект и описания его свойств необходимо выполнить следующую последовательность операций:

1. Активизировать окно Action Editor. Для этого нужно щелкнуть правой кнопкой мыши по полю Web-модуля, и из всплывающего меню выбрать строчку Action Editor. В Delphi 5.0 появится меню, приведенное на рис. 10.4. (В Delphi 3.0 вместо пиктограмм используются кнопки с надписями.) В появившемся меню нужно нажать кнопку Add,. вслед за чем в меню появится новое действие.

Рис. 10.4. Меню редактора действий

2. Описать свойства действия. Впишите в окне Object Inspector следующие свойства нового действия: Default: true; Enabled: true; MethodType: mtPost; name: hello; pathinfo: /hello.

3. Создать объект, который будет генерировать содержимое Web-страниц, и вписать его название в поле Producer. Таким объектом может являться как один из предназначенных для этих целей компонентов Delphi, так и написанные вручную объекты, являющиеся подмножеством класса TWebProducer.

 

Генератор страниц (компонент TPageProducer)

Поскольку основная цель использования вкладки "Internet" Component Palette Delphi заключается в облегчении и ускорении процесса создания серверных модулей, то наряду с автоматизацией процесса разбора пользовательских запросов, предусмотрена возможность отправки Web-страницы пользователю, причем программист должен лишь указать либо путь и название отправляемого файла, либо само его содержимое. Остальные детали отправки данных, например указание типа данных, HTTP-заголовков, и даже открытие файлов, чтение и передачу данных в поток вывода, выполняет компонент TPageProducer. Как и остальные невизуальные компоненты, о которых идет речь, в данной главе, он расположен на вкладке "Internet" Component Palette (рис. 10.5).

Свойство Описание
Dispatcher Определяет объект, осуществляющий разбор пользовательского запроса
HTMLDoc Содержит массив строк, являющихся телом HTML-документа, который будет отправлен клиенту. Задается как альтернатива предыдущему свойству
HTMLFile Содержит путь и название HTML-файла, который обрабатывается и отсылается клиенту данным компонентом

 

Рис. 10.5. Значок компонента TPageProducer

Этот компонент предназначен для передачи ответной страницы клиенту. Если задать имя HTML-файла, то объект данного класса передаст содержимое указанного файла клиенту. Можно также в режиме выполнения программы определять теги, из которых должна состоять Web-страница, и тогда вместо указанного файла они будут посланы браузеру. Основные свойства компонента TPageProducer приведены в табл. 10.2.

Таблица 10.2. Свойства компонента TPageProducer

Свойство Описание
Name Содержит название объекта
StripParamQuotes Указывает на необходимость отсечения двойных кавычек вокруг значений атрибутов тегов в используемых шаблонах. Это нужно для правильной интерпретации данных шаблонов при построении на их основании Web-страниц
Tag Используется для хранения целого числа либо указателя

Методы компонента TPageProducer приведены в табл. 10.3.

Таблица 10.3. Некоторые методы компонента TPageProducer

Метод Описание
Content Возвращает результат работы объекта — экземпляра класса TPageProducer в программе
Content FromStream В качестве параметра этой функции выступает поток, содержащий HTML-шаблон. Результатом является обработанный шаблон, т. е. HTML-документ
Content FromString Аналогично предыдущему методу, но параметром является строка, содержащая шаблон

Давайте вернемся к реализации нашего маленького проекта и добавим в него объект класса TPageProducer, поместив соответствующий компонент в Web-модуль. Установим свойство Name равным hello, а в HTMLFile пропишем путь к файлу hello.htm. Кроме того, вернувшись к списку действий, нужно определить название генератора ответа для действия hello, которым и будет являться объект hello.

Таким образом, в нашем проекте имеются все основания для правильной работы серверного модуля: есть действие, которому присвоен статус "по умолчанию"; для этого действия определен объект, выполняющий отправку результата работы — объект hello, который выдаст клиенту некоторый HTML-файл.

Теперь скомпилируем проект и посмотрим, как он работает. Если вы сохранили проект в подкаталоге под названием, указанным выше, то, запустив Web-сервер и введя адрес:

http://localhost/cgi-bin/hello

вы можете увидеть приведенную на рис. 10.3 страницу.

Разумеется, эта страница могла быть загружена привычным способом — путем ввода в адресную строку браузера непосредственного пути к ней, однако наш пример демонстрирует формирование ответа на основании статических данных. Другой способ определения данных, отправляемых клиенту, — это генерация ответных страниц с использованием шаблонов.

 

Использование шаблонов при формировании ответа

В абсолютном большинстве задач, для решения которых используется динамическое формирование Web-страниц, необходимо генерировать лишь некоторый фрагмент HTML-кода. Остальная часть страницы, например, заголовок, различного рода сопроводительная информация, текстовые фрагменты и т. д. остаются неизменными. Пример Web-страницы, в которой динамическим является лишь небольшой фрагмент, приведен на рис. 10.6.

Рис. 10.6. Пример двух страниц, в которых динамически формируемым является лишь активное содержимое

Для того чтобы при создании серверных модулей программист контролировал лишь активное содержимое и не заботился о полном наборе данных, составляющих HTML-файл, используются шаблоны.

Основой шаблона являются так называемые "прозрачные" теги. Эти теги представляют собой специальным образом помеченные строки, при нахождении которых в теле данных, передаваемых объектом класса TPageProducer, вызывается событие OnHTMLTag для их замены на содержательную, динамически формируемую информацию, которая и должна составлять активную часть Web-страницы.

От обычных тегов "прозрачные" отличаются тем, что между символом начала тега < и самой командой ставится знак #, без пробелов. Пример таких тегов приведен в листинге 10.1.

Листинг 10.1. Пример "прозрачного" тега

<TABLE>

<#TR> Как только эта строка появится в теле передаваемого файла,

активизируется событие OnHTMLTag.

<#TD> To же самое.

</TABLE>

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




Поделиться с друзьями:


Дата добавления: 2014-12-29; Просмотров: 400; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.