ASP встроенные объекты

Встроенные объекты

В прошлой статье я рассказал вам о наиболее часто использующихся коллекциях объекта Request — ServerVariables и Form. Теперь вкратце опишем коллекцию QueryString. Она предназначена для получения информации из строки URL (напомню, что данные передаются таким образом при использовании в форме метода GET). Немного модифицируем предыдущий пример. Замените метод формы с POST на GET. В первом островке ASP замените строки

на

Во втором островке замените строкиы

на

В результате в браузере вы получите ту же самую картинку, что и при использовании метода POST и коллекции Form, но в адресной строке Internet Explorer будет что-то вроде этого:

http://localhost/embedded_objects/request.asp?txtFirstName=Vasya& txtLastName=Pupkin&txtCity=Kharkov& rdoSex=Male&selEducation=High+education& selJob=Computer%2FInternet& selMarried=Yes&selChildren=More

Как видите, при использовании метода GET страдает секретность, так как, во-первых, пользователь может менять строку URL, что, возможно, приведет к неправильной работе скрипта, а во-вторых, эта строка не защищена от любопытных глаз, и любой человек может подсмотреть конфиденциальную информацию, просто взглянув на экран компьютера через плечо пользователя. Поэтому не следует использовать метод GET для передачи паролей и другой секретной информации.

Теперь давайте перейдем к коллекции Cookies объекта Request, которая НЕ идентична коллекции Response.Cookies, а скорее дополняет ее: из Response.Cookies нельзя читать данные, а в Request.Cookies нельзя записывать информацию.

Создайте файл cookies.asp, затем добавьте на него ссылку в файл default.htm, находящийся в виртуальном каталоге Embedded_objects. В файл cookies.asp введите следующий код:

Теперь загрузите в браузер файл default.htm (предварительно не забудьте включить сервер) и активируйте ссылку на сценарий cookies.asp (рис. 1). Введите что-нибудь в поле Username и нажмите на кнопку «Подача запроса» (рис. 2). После этого закройте окошко браузера и опять загрузите файл cookies.asp. В поле Username снова появится имя, которое вы ввели в прошлый раз! Этот эффект достигается благодаря двум островкам ASP. Первый отвечает за запись информации, а второй — за считывание.

Рис. 1
Рис. 2

Давайте разберемся, как они работают. В первой строке кода мы проверяем, является ли поле Username пустым. Если нет, то даем команду движку ASP считать его значение и записать его в cookie. В третьей строке свойству Expires, которое отвечает за время хранения cookie, присваивается значение December 31, 2003 00:00. Это значит, что этот файл cookie будет храниться на винчестере пользователя до 12 часов ночи 31 декабря 2003 года. Во втором островке встречается новая конструкция <%=Request.Cookies("Username") %>. Это всего лишь сокращенная запись такого кода: <% Response.Write Request.Cookies("Username") %>. Что эта строка делает, я думаю, вы догадались.

Наконец, последняя коллекция объекта Request — ClientCertificates. Она отвечает за прием так называемых цифровых сертификатов пользователей. Я не буду подробно останавливаться на ней, так как, скорее всего, она не понадобится в вашей повседневной работе. Перечислю, однако, некоторые члены данной коллекции — их иногда используют разработчики: Issuer, Subject, ValidFrom, ValidUntil, SerialNumber.

Объект Request поддерживает только одно свойство (TotalBytes), которое содержит объем запроса и один метод (BinaryRead), отвечающий за прием с браузера двоичных данных (картинки, файлы и т. д.) Примечание: к этому методу можно обращаться только в том случае, если после этого не будет обращений к коллекции Request.Form.

Объект Server

А теперь давайте рассмотрим крайне полезный объект, который обеспечивает высокоуровневые средства доступа непосредственно к серверу. Он так и называется —Server. С помощью этого инструмента становится возможным создание объектов, запуск других исполняемых файлов, преобразование виртуальных путей в физические, переадресация на сервере и др.

Объект Server предоставляет разработчикам следующие методы и свойства:

• Свойство ScriptTimeOut;

• Метод HTMLEncode;

• Метод URLEncode;

• Метод CreateObject;

• Метод Transfer (в PWS 4.0 не поддерживается);

• Метод Execute (в PWS 4.0 не поддерживается);

• Метод MapPath;

• Метод GetLastError (в PWS 4.0 не поддерживается).

Рассмотрим первое и единственное свойство объекта Server —ScriptTimeOut. Если вы при написании скрипта допустили ошибку, из-за которой сценарий не может закончить работу, то свойство ScriptTimeOut не позволит этому сценарию выполнятся бесконечно долго. Рассмотрим следующий код:

Как видите, цикл не завершится никогда. Следующее изменение в сценарии приведет к сообщению об ошибке и освобождении ресурсов сервера через 20 секунд:

Этот пример очень прост, но если представить, что скрипт делает ошибочную выборку из ОЧ-ЧЕНЬ большой базы данных, то польза данного свойства станет очевидна.

Метод HTMLEncode предназначен для кодирования в escape-последовательности строковых символов, для которых невозможен обычный вывод в браузере. Такими последовательностями являются, например, угловые скобки (>, <), кавычки ("") и др. Например, необходимо вывести на экран браузера следующий текст:

В HTML это должно выглядеть так:

Даже в этом небольшом примере трудно расставить все escape-последовательности. А если предположить, что текст генерируется автоматически, то данная задача оказывается попросту невыполнимой.

Метод URLEncode сходен с методом HTMLEncode и предназначен для кодирования URL посредством замены символов escape-последовательностями, каждая из которых состоит из знака процента и следующего за ним ASCII-кода в шестнадцатеричном представлении. Так как кодировка URL не совпадает с кодировкой HTML, то для преобразования строки в правильный URL-формат нельзя использовать метод HTMLEncode.

Метод CreateObject предназначен для запуска и работы практически любого COM-объекта. Значение данного метода при разработке web-приложений трудно переоценить. Например, чтобы создать и использовать компонент BrowserCapabilities, предназначенный для определения возможностей браузера с помощью файла browscap.ini, можно написать следующий код:

Метод MapPath служит для преобразования виртуальных путей в физические. Предположим, в корневом каталоге web-узла есть виртуальный каталог test. Чтобы определить реальный физический путь к нему, можно использовать следующий код:

Этот метод используется для того чтобы при перемещении ASP-приложения не пострадали связи между страницами. Совет: никогда не используйте абсолютные ссылки в своих web-приложениях (а также на обычных, статичных сайтах), так как при незначительном изменении структуры web-сайта ссылки перестают работать.

Методы Transfer, Execute и GetLastError я не буду здесь описывать (хотя они очень полезны), так как PWS 4.0, который мы используем, их не поддерживает.

На сегодня все. В следующий раз мы продолжим знакомство со встроенными объектами ASP.