Встроенные объекты
Как было сказано выше существует пять встроенных объектов, используемых в программах сценариев: Application, Request, Response, Server иSession.
Объект Application служит для обмена информацией между пользователями данного приложения. Например, можно реализовать простой счетчик обращений к серверу:
<% Application.Lock Application ("HitCount") = Application("HitCount") + 1 Application.Unlock %>
Методы Lock и Unlock используются для блокирования изменений свойств объекта и для отмены этого запрета соответственно. Также объект Application может реагировать на два события - OnStart и OnEnd. Эти методы используются путем написания соответствующего кода в глобальном файле GLOBAL.ASA. Об этом будет рассказано в разделе "Глобальный файл".
Рассмотрим использование объекта Request на примере традиционной задачи - формы, заполняемой пользователем. Для начала необходимо создать форму. В качестве значения атрибута ACTION тега <FORM> нужно указать имя ASP-файла, например, formdemo.asp, и установить метод передачи данных POST. Пусть форма состоит из четырех текстовых полей ввода с именами UserName, UserAddress, UserEMail и UserComm. Пользователь заполняет форму и нажатием кнопки Submit отсылает ее на сервер. Что происходит на сервере? Получая команду SUBMIT, объект Request готов к обработке полей формы, то есть к отображению содержимого полей формы, сохранению их в файле или базе данных. Для отображения полей записи файл formdemo.asp может выглядеть следующим образом:
<HTML> <BODYBGCOLOR=greenTEXT=white> <%IfRequest.Form("UserName")= "" Then %> <H4> Форма заполнена некорректно. Для исправления нажмите кнопку Back. </H4> <%Else%> Получена следующая информация:<BR> <PFONTSIZE=3> Имя: <% =Request.Form("UserName") %><BR> Адрес: <% =Request.Form("UserAddress") %><BR> E-Mail: <% =Request.Form("UserEMail") %><BR> Комментарии:<% =Request.Form("UserComm") %><BR> </P> <%EndIf%> </BODY> </HTML>
Существует ряд других методов объекта Request, на которые можно обратить внимание. Например с помощью коллекции ServerVariables можно получать доступ к серверным переменным:
'адрес, с которого пришел запрос <%Response.WriteRequest.ServerVariables("REMOTE_ADDR")%> 'поддерживаемые клиентом языки <%Response.WriteRequest.ServerVariables("HTTP_ACCEPT_LANGUAGE")%>
И еще один полезный пример. В нем показано, как можно получить все посланные пользователем значения полей формы:
<% ForEachxInRequest.Form %> Request.Form(<% =x %> = <% =Request.Form(x) %> <BR> <% Nextx %>
Объект Responseиспользуется для посылки информации пользователю. Метод Redirect этого объекта служит для переключения на другую страницу, как локальную, так и удаленную, адрес которой задается в формате URL:
<% Response.Redirect ("URL") %>
Метод Write является одним из базовых методов объекта Response. С его помощью информация посылается непосредственно клиенту. Например, если мы хотим вывести текущие дату и время, можно использовать следующий код:
<% Response.Write "Локальное время: <B>" & Now & "</B> %>
Объект Serverимеет четыре метода: CreateObject, HTMLEncode, MapPath и URLEncode. Метод CreateObject служит для создания экземпляров серверных компонентов. Примеры использования рассматриваются ниже. Метод HTMLEncode используется для вывода на экран тегов языка HTML. Например, вызов этого метода:
<% Response.WriteServer.HTMLEncode("Для выделения текста используются теги <B> и </B>") %>
приведет к появлению следующего текста в окне броузера:
Для выделения текста используются теги <B> и </B>
При этом, если посмотреть на исходный текст, то можно увидеть, что вместо тегов используются специальные символы:
Для выделения текста используются теги <B> и </Bgt;
Метод MapPath предназначен для преобразования относительных и виртуальных маршрутов в каталоги на сервере. Вот пример использования этого метода:
LogFile=Server.MapPath ("/Login") & "\input\logfile.txt" SetOutStreamFileObject.CreаteTextFile (Logfile, True, False)
Метод URLEncode предназначен для преобразования адресов в формате URL. Например, вызов этого метода:
<% Response.WriteServer.URLEncode("www.cpress.ru") %>
приведет к появлению в окне броузера следующей строчки:
www%2Ecpress%2Eru
С помощью свойства ScriptTimeout объекта Server можно задать время выполнения сценария.
Объект Session используется для хранения переменных в течение одной сессии работы с сервером. Методы для обработки событий OnStart и OnEnd помещаются в глобальный файл GLOBAL.ASA. Соответствующие примеры использования указаны в разделе "Глобальный файл".
Глобальный файл
Глобальный файл GLOBAL.ASA располагается в корневом каталоге сервера (виртуальном корневом каталоге). Отметим, что корневой каталог сервера доступен из всех подкаталогов, и, таким образом, файл GLOBAL.ASA доступен из всех ASP-страниц. При необходимости он располагается и в корневом каталоге приложения, выполняемого на сервере, но этот каталог также должен быть объявлен как виртуальный корневой каталог. Как мы уже говорили, в файле GLOBAL.ASA могут быть использованы два встроенных объекта:Application и Session. С помощью объекта Application можно создавать глобальные переменные для всех ASP-страниц, а с помощью объекта Session можно создавать переменные, "видимые" в рамках одной сессии. В файле GLOBAL.ASA также можно открывать сеансы связи с базами данных.
Например, для использования методов OnStartиOnEnd объекта Application можно написать следующий код:
<SCRIPTLANGUAGE=VBScriptRUNAT=Server> SubApplication_OnStart 'эта подпрограмма выполняется, когда на узел приходит первый пользователь ENDSUB ... SubApplication_OnEnd 'эта подпрограмма выполняется при выключении сервера или изменении содержимого файла global.asa ENDSUB </SCRIPT>
Обратите внимание на расширенный синтаксис тега <SCRIPT>. Атрибут RUNAT указывает на то, что данный скрипт выполняется на сервере.
Пример использования тех же методов, но объекта Session выглядит очень похоже:
<SCRIPTLANGUAGE=VBScriptRUNAT=Server> SubSession_OnStart 'эта подпрограмма выполняется в начале сессии ENDSUB ... SubSession_OnEnd 'эта подпрограмма выполняется в конце сессии ENDSUB </SCRIPT>
Серверные компоненты
AdRotator, BrowserCapabilities, DatabaseAccess, ContentLinking и FileAccess.
Компонент AdRotator используется для отображения и смены рекламы (изображения и видеороликов) на сервере. Каждый раз, когда пользователь попадает на страницу, на которой используется этот компонент, он видит новую информацию - обновление происходит по сценарию, заданному в специальном файле. Причем каждая реклама имеет свою ссылку на страницу, соответствующую ей. Имеется возможность отслеживать, сколько пользователей обратились к той или иной рекламе. Пример использования компонента AdRotator:
<CENTER> Добро пожаловать на наш сервер! <BR> <% SetAd = ServerCreateObject("MSWC.Adrotator") %> <% =Ad.GetAdvertisement("advert.txt") %> </CENTER>
Файл-сценарий (в примере advert.txt) является обычным текстовым файлом, в котором описываются правила обновления графической информации. Содержимое файла-сценария advert.txt, например, может выглядит следующим образом:
width 460 height 60 border 1 * advert1.gif http://www.cpress.ru/subscriptions/ Subscribeto "ComputerPress"! 20 advert2.gif http://www.cpress.ru/books/ Readourbooks 20 advert3.gif http://www.microsoft.com UselegalMicrosoftsoftware! 30
В начале файла-сценария указываются размеры области, в которой будет появляться графическая информация. Затем, по порядку дается описание каждого графического элемента, состоящее из четырех пунктов: имя графического файла, URL-адрес страницы, которая будет загружаться при щелчке на изображении, текстовое описание ссылки и вероятность появления данного изображения.
С помощью компонента BrowserCapabilities можно получать различную информацию о клиентском броузере. Приведем несколько примеров использования этого компонента. Например, мы можем узнать тип и версию клиентского броузера:
<% Setbc = Server.CreateObject("MSWC.BrowserType") %> Приветствуем на сервере пользователя броузера <B><% =bc.Browser %> версии <% =bc.Version %> </B>!
Затем можно определить, поддерживает ли клиентский броузер фреймы. На сервере может быть два набора страниц - с фреймами и без них. Определив, умеет ли клиентский броузер отображать фреймы или нет, можно загружать соответствующий набор страниц:
<% Setbc = Server.CreadteObject("MSWC.BrowserType" %> <% If (bc.Frames = TRUE) Then Response.Write "Есть поддержка фреймов!" Else Response.Write "Нет поддержки фреймов!" EndIf %>
Также перед отправкой страницы, содержащей программу на каком-либо скриптовом языке, полезно было бы определить, поддерживает ли броузер этот скриптовый язык. Например, для проверки поддержки языка VBScript можно написать такой код:
<% Setbc = Server.CreateObject("MSWC.BrowserType") %> <% If (bc.VBScript = TRUE) Then Response.Write "Есть поддержка VBScript" Else Response.Write "Нет поддержки VBScript" EndIf %>
Компонент DatabaseAccess обеспечивает доступ к данным, хранящимся в базах данных. Рассмотрение этого компонента вынесено в отдельный раздел.
Компонент ContentLinking применяется для управления списком URL-адресов, которые являются ссылками на страницы, расположенные на Web-узле. С помощью этого компонента можно создавать таблицы содержания для всего Web-узла, что весьма актуально для онлайновых публикаций и списков статей различных электронных конференций. Кроме того, компонент ContentLinking может использоваться для изменения порядка следования страниц.
Компонент FileAccess использует объекты FileSystemObject и TextStream и обеспечивает доступ к хранимым на сервере файлам. Вот пример использования этого компонента:
<% 'создадим файл SetFileObject = CreateObject("Scripting.FileSystemObject") SetFile = FileObject.CreateTextFile("user.txt", True) 'запишем данные в файл File.Writeline(Now()) File.Writeln(Request.ServerVariables("REMOTE_ADDR")) File.Writeln(Request.ServerVariables("REMOTE_HOST")) 'закроем файл File.Close %>