Вход


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

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

  


Классы TWebRequest и TWebResponse.


Классы TWebRequest и TWebResponse

Классы TWebRequest и TWebResponse являются абстрактными, инкапсулирующими протокол HTTP. Класс TWebRequest предоставляет доступ ко всем данным, передаваемым в сервер клиентом, а в классе TWebResponse содержатся свойства и методы, которые позволяют ответить на запрос, причем любым из возможных для протокола HTTP способом. Оба класса объявляются в модуле HTTPAPP.pas. Web-приложения, ориентированные на интерфейс ISAPI и NSAPI используют на самом деле классы TISAPIResponse и TISAPIRequest, которые являются потомками этих абстрактных классов и объявлены в модуле ISAPIAPP.PAS. Благодаря полиморфизму, Delphi может передавать классы TISAPIxxx в качестве параметров TWebxxx обработчика события OnAction в классе TWebModule.

Класс TISAPIRequest содержит всю информацию, передаваемую клиентом при формировании запроса на Web-страницу. Из этого запроса можно собрать информацию о клиенте. Для любого конкретного запроса многие свойства могут оставаться пустыми, поскольку зачастую для HTTP-запроса заполняются не все поля. Свойства RemoteHost и RemoteAddr содержат адрес IP запрашивающей машины; UserAgent содержит информацию о броузере, используемом клиентом; Accept включает список типов графических изображений, которые этот броузер способен выводить; Referer содержит URL страницы, с которой пользователь перешел к вашей. Если имеется информация о Cookies (они рассматриваются ниже в этой главе), то она, конечно же, находится в свойстве Cookie. Гораздо легче получить доступ к нескольким Cookies с помощью массива CookieFields. Все переданные вместе с запросом параметры содержатся в одной строке внутри свойства Query. Они также могут быть представлены в виде элементов массива QueryFields.

На заметку При передаче параметров по адресу URL они обычно следуют за знаком вопроса (?) после URL. Несколько параметров разделяются символом амперсанта (&), а если параметры содержат пробелы, то эти пробелы заменяются знаками плюс (+). Следовательно, допустимый набор параметров внутри HTML-страницы может выглядеть примерно так:

<А HREF="http://www.someplace.com/ISAPIApp?Paraml=This+ParametersParam2=That+Parameter"> Some Link</A >

(Ответ на резонный вопрос: "Как отличить символ + от такого же символа вместо пробела?" ? весьма несложен: многие символы запроса (в том числе +) передаются в виде %XX, где XX ? шестнадцатеричное представление символа. ? Прим. ред.)

Большая часть информации для класса TISAPIRequest содержится в свойствах, но этот класс делает открытыми многие функции, используемые для заполнения этих свойств, позволяя тем самым при необходимости получать непосредственный доступ к данным. Класс TISAPIRequest, помимо рассмотренных, включает и другие свойства, но ни одно из действительно важных свойств не ускользнуло из нашего поля зрения. Все эти свойства вы можете использовать в своем обработчике события OnAction, чтобы определить тип ответа, который будет предоставлять ваше приложение Web-сервера. Если вы, например, захотите включить в свой ответ информацию об IP-адресе пользователя и используемом им типе броузера, нет проблем ? эта информация доступна для вас.

Запустив следующий проект в своем Web-сервере, вы увидите, как выглядит класс TISAPIRequest. Создайте новое приложение Web-сервера, откройте редактор свойства Actions, дважды щелкнув на этом свойстве в окне инспектора объектов, и создайте новый элемент TWebActionItem, установив свойство PathInfo равным http. Перейдите во вкладку Internet палитры компонентов и опустите компонент TPageProducer (о нем пойдет речь ниже в этой главе) в модуль WebModule, а затем в обработчик события OnAction добавьте код, представленный в листинге.

Укажите своему броузеру адрес http://<вaш cepвep>/project1.dll/http, и это приложение отобразит все значения полей HTTP, переданные серверу в запросе от вашего броузера.

Конечно же, каждый запрос должен иметь соответствующий ответ, поэтому в Delphi определен класс TISAPIResponse, позволящий возвращать информацию клиенту, отправившему запрос. Самым важным свойством класса TISAPIResponse является свойство Content. В этом свойстве будет содержаться HTML-код, предназначенный для отображения у клиента.

Класс TISAPIResponse содержит несколько дополнительных свойств, которые может установить ваше приложение. В свойство Version можно передать информацию о версии. С помощью свойства LastModified у вас есть возможность сообщить клиенту, когда последний раз была модифицирована передаваемая назад информация. Используя свойства ContentEncoding, ContentType и ContentVersion, можно передать сведения о самом содержимом. И, наконец, свойство StatusCode позволяет возвращать клиенту коды ошибок и другие коды состояния.

Совет Большинство броузеров специфически реагируют на определенные значения свойства StatusCode. Эту информацию можно уточнить, просмотрев спецификацию HTTP для определенных кодов состояния, если обратиться к Web-узлу по адресу: http://www.w3.org.

Главные силы класса TISAPIResponse сосредоточены в его методах. Вместо ожидания завершения работы обработчика события OnAction с помощью метода SendResponse() можно заставить приложение Web-сервера немедленно вернуть ответ. Используя метод SendStream(), можно послать клиенту любой вид данных. А если вы захотите, чтобы ваше приложение послало клиенту нечто такое, что оно само не может предоставить, это желание реализует метод SendRedirect, который рассматривается ниже в этой главе (см. раздел "Перенаправление на другой Web-узел").




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

  


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