|
||||||||
|
Классы 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.
Большая часть информации для класса 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 позволяет возвращать клиенту коды ошибок и другие коды состояния.
Главные силы класса TISAPIResponse сосредоточены в его методах. Вместо ожидания завершения работы обработчика события OnAction с помощью метода SendResponse() можно заставить приложение Web-сервера немедленно вернуть ответ. Используя метод SendStream(), можно послать клиенту любой вид данных. А если вы захотите, чтобы ваше приложение послало клиенту нечто такое, что оно само не может предоставить, это желание реализует метод SendRedirect, который рассматривается ниже в этой главе (см. раздел "Перенаправление на другой Web-узел").
| ||||||||||||||||
За содержание страницы отвечает Гончарова М.Н. © Кафедра СПиКБ, 2002-2017 |