Для правильной работы их необходимо разместить в виртуальном приложении на сервере, а предоставленный файл global.asa — в корневом каталоге приложения. Самый простой способ — поместить файл global.asa в корневой каталог веб-сайта по умолчанию (по умолчанию C:/InetPub/WWWRoot).
Рекомендуется переименовать все существующие файлы global.asa, чтобы их можно было восстановить позже.
1. Отображение содержимого коллекции Application
Объект ASPCounter является членом коллекции StaticObjects (определенной с помощью элемента <OBJECT>), но остальная часть (созданная с помощью Server.CreateObject) является членом коллекции Contents.
Вы можете увидеть значения, помещенные в эти коллекции, используя пример веб-страницы global.asa, которую мы видели ранее:
<!-- Объявите экземпляр компонента ASPCounter с помощью
область действия уровня приложения //-->
<OBJECT ID=”ASPCounter” RUNAT=”Сервер” SCOPE=”Приложение”
PROGID="MSWC.Счетчики">
</ОБЪЕКТ>
...
...
<SCRIPT LANGUAGE="VBScript" RUNAT="Сервер">
Подприложение_onStart()
'Создаем экземпляр соединения ADO с областью действия на уровне приложения.
Set Application("ADOConnection") = Server.CreateObject("ADODB.Connection")
Dim varArray(3) 'Создаем массив Variant и заполняем его
varArray(0) = "Это"
varArray(1) = "Вариант массива"
varArray(2) = «хранится в»
varArray(3) = "Объект приложения"
Application("Variant_Array") = varArray 'Сохраняем его в приложении
Application("Start_Time") = CStr(Now) 'Сохраняем дату/время в виде строки
Application("Visit_Count") = 0 'Установить переменную счетчика в ноль
Конец субтитра
...
...
</SCRIPT>
(1) Код для перемещения по коллекции Contents.
Чтобы пройти по коллекции Contents, вы можете использовать структуру For Each...Next. Каждый элемент коллекции может быть простой переменной типа Variant, массивом Variant или ссылкой на объект. Поскольку каждый тип значения необходимо обрабатывать по-разному, каждое из них необходимо проверять, чтобы определить его тип.
Для выполнения этой работы вы можете использовать функцию VarType в VBScript. Вместо этого используйте функции IsObject и IsArray:
для каждого объекта objItem в Application.Contents.
Если IsObject(Application.Contents(objItem)) Тогда
Response.Write "Ссылка на объект: '" & objItem & "'
"
ИначеЕсли IsArray(Application.Contents(objItem)) Тогда
Содержимое Response.Write "Array: '" & objItem & "':
"
VarArray = Application.Contents(objItem)
'Примечание: следующее работает только с одномерным массивом
Для intLoop = 0 To UBound(varArray)
Response.Write " Index(" & intLoop & ") = " & _
VarArray(intLoop) & «
"
Следующий
Еще
Response.Write "Variable: '" & objItem & "' = " _
& Application.Contents(objItem) & «
"
Конец, если
Далее
обратите внимание, как программа извлекает этот массив из объекта Application. Присвойте его локальной переменной (Variant) и используйте следующий оператор:
varArray = Application.Contents(objItem)
Используйте функцию UBound, чтобы узнать размер массива (количество элементов). Это значение можно использовать в качестве условия завершения. для обхода:
Для intLoop = 0 UBound(varArray)
Этот пример представляет собой одномерный массив и отображает только содержимое такого массива. При необходимости отредактируйте код для обработки многомерных массивов, например:
For intLoop = 0 To UBound(varArray)
IntNumberOfDimensions = UBound(varArray, 1)
Для intDimension = 0 Для intNumberOfDimensions
Response.Write " Index(" & intLoop & ") = " _
& varArray(intLoop, intDimension)
Следующий
Ответ. Напишите ""
Далее
(2) Код для перемещения по коллекции StaticObjects
Коллекция StaticObjects содержит все ссылки на объекты, объявленные с использованием элемента <OBJECT> в файле global.asa. Поскольку каждая запись является объектной переменной, массив можно перебирать с помощью более простого кода. Мы выведем имя объекта (как оно изначально определено в свойстве ID):
Для каждого объекта objItem в Application.StaticObjects.
Если IsObject(Application.StaticObjects(objItem)) Тогда
Response.Write элемент «<OBJECT>: ID='» & objItem & «'
"
Конец, если
Далее
2. Операции над коллекциями
1) Добавление значений в
коллекцию Contents Метод добавления значений в коллекцию Contents тот же, что и использованный в коде скрипта веб-страницы global.asa. Позволяет добавить новое значение Variant к объекту Application с предложенным именем и значением (которое можно при необходимости изменить), нажать кнопку, перезагрузить страницу, добавить значение в коллекцию Application.Contents и отобразить в списке. .
Добавьте код для новой записи «Содержимое»
, чтобы разместить все кнопки и другие элементы управления HTML в форме на примере веб-страницы. ДЕЙСТВИЕ устанавливает путь к текущей веб-странице и перезагружает ее при отправке формы. Атрибут METHOD имеет значение «POST», поэтому значение элемента управления отображается в коллекции Request.Form. Эти два метода использовались в предыдущих главах:
<FORM ACTION="<% = Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">
Кнопки в этой форме представляют собой обычные элементы управления HTML INPUT и имеют одинаковый заголовок. (три пробела), но другое имя. Например, код для создания первой кнопки (добавления значения к объекту приложения):
<INPUT TYPE="SUBMIT" NAME="cmdAdd" VALUE="">
При перезагрузке веб-страницы проверьте коллекцию Request.Form. , Определите, какая кнопка ОТПРАВИТЬ была нажата, и обработайте ее соответствующим образом. Если это кнопка, которая добавляет значение к объекту Application (кнопка называется cmdAdd в элементе HTML <INPUT>), используйте следующий сегмент программы:
If Len(Request.Form("cmdAdd")) Тогда
strVarName = Request.Form("txtVarName")
strVarValue = Request.Form("txtVarValue")
Приложение.Блокировка
Приложение("strVarName") = strVarValue
Приложение.Разблокировка
End If
Обратите внимание, как приложение использует методы Application.Lock и Application.Unlock, чтобы гарантировать, что эти значения не будут перепутаны двумя пользователями, обращающимися к ним одновременно. Обычно это невозможно, если вы просто устанавливаете определенное значение. Но разумно всегда использовать методы блокировки и разблокировки.
2) Удалить значения из коллекции Contents.
Создайте этот список при запуске веб-страницы ASP, просматривая коллекцию Contents (как мы делали ранее). Однако мы собираем только имена каждого элемента и помещаем их в элемент <OPTION> внутри элемента списка <SELECT>:
…
<SELECT NAME="lstRemove" SIZE="1">
<%
Для каждого объекта в Application.Contents
Ответ. Напишите «<OPTION>» и objItem & «</OPTION>».
Следующий
&>
</ВЫБРАТЬ>
…
После выполнения кода ASP в браузере отображается следующий результат:
<SELECT NAME="lstRemove" SIZE="1">
<ОПЦИЯ>ADOConnection</ОПЦИЯ>
<OPTION>Variant_Array</OPTION>
<ОПЦИЯ>Время_начала</ОПЦИЯ>
<ОПЦИЯ>Количество посещений</ОПЦИЯ>
<ОПЦИЯ>Мое_новое_значение</ОПЦИЯ>
</SELECT>
(1) Удаление одного значения.
Когда вы нажимаете кнопку, чтобы удалить одно значение, форма снова отправляется на ту же веб-страницу, но на этот раз будет настроена кнопка ОТПРАВИТЬ для cmdRemoveThis, а затем кнопка «Удалить». будет вызван метод коллекции Application.Contents:
If Len(Request.Form("cmdRemoveThis")) Тогда.
strToRemove = Request.Form("lstRemove")
Response.Write "strToRemove = " & strToRemove
Приложение.Блокировка
Приложение.Содержимое.Удалить(strToRemove)
Приложение.Разблокировка
End If
Обратите внимание, что это метод коллекции Contents, а не объекта Application. Синтаксис: Application.Contents.Remove, а не Application.Remove.
Результат удаления значения Start_Time из коллекции Contents.
(2) Удалить все значения.
Если вы нажмете последнюю из трех кнопок типа «ОТПРАВИТЬ», код на веб-странице определит, что нажата кнопка cmdRemoveAll, и выполнит метод RemoveAll коллекции Application.Contents:
Если Len( Request.Form("cmdRemoveAll")) Тогда
Приложение.Блокировка
Приложение.Содержимое.RemoveAll
Приложение.Разблокировка
End If
еще раз напоминает вам, что это метод коллекции Contents, а не Application. Синтаксис — Application.Contents.RemoveAll, а не Application.RemoveAll.