Файл Global.asa ASP

Файл Global.asa является необязательным и может содержать объекты, переменные и методы, доступные для каждого из страниц ASP приложения. Все合法ные скрипты браузера могут быть использованы в Global.asa.

Файл Global.asa

Файл Global.asa является необязательным и может содержать объекты, переменные и методы, доступные для каждого из страниц ASP приложения. Все合法ные скрипты браузера могут быть использованы в Global.asa.

Файл Global.asa может содержать следующее:

  • События приложения
  • События сессии
  • Декларация <object>
  • Заявление TypeLibrary
  • Инструкция #include

Комментарии:Файл Global.asa должен храниться в корневой папке ASP приложения и у каждого приложения может быть только один файл Global.asa.

События в Global.asa

В Global.asa мы можем указать, что делать application и session объекты при запуске и завершении. Код для выполнения этой задачи размещается в обработчиках событий. Файл Global.asa может содержать четыре типа событий: }}

Application_OnStart - Это событие occurs при первом запросе первого пользователя на страницу ASP-приложения. Это событие occurs при перезапуске веб-сервера или после редактирования файла Global.asa. "Session_OnStart" событие occurs сразу после этого события.

Session_OnStart - Это событие occurs каждый раз, когда новый пользователь запрашивает свою первую страницу в ASP-приложении.

Session_OnEnd - Это событие occurs каждый раз, когда пользователь заканчивает сессию. Если в течение установленного времени (по умолчанию 20 минут) не было запроса на страницу, сессия заканчивается.

Application_OnEnd - Это событие occurs после того, как последний пользователь заканчивает свою сессию. Типичное поведение - это событие occurs при остановке веб-сервера. Этот подprogramm используется для очистки настроек после остановки приложения, например, для удаления записей или записи информации в текстовый файл.

Файл Global.asa может выглядеть так:

<script language="vbscript" runat="server">
под Application_OnStart
  'некий код
end sub
под Application_OnEnd
  'некий код
end sub
под Session_OnStart
  'некий код
end sub
под Session_OnEnd
  'некий код
end sub
</script>

Комментарии:Поскольку скриптовые разделители ASP (<% и %>) не могут быть использованы для вставки скрипта в файл Global.asa, мы должны использовать элемент HTML <script>.

Декларация <object>

Объекты с областью действия session или application можно создать с помощью элемента <object> в файле Global.asa.

Комментарии:Элемент <object> должен располагаться вне элемента <script>.

Синтаксис:

<object runat="server" scope="scope" id="id"
{progid="progID"|classid="classID"}>
....
</object>
Параметр Описание
scope Настройка области действия (действия) объекта (Сессия или Приложение).
id Указание уникального идентификатора для объекта.
ProgID

ID, связанный с ClassID. Формат ProgID: [Vendor.]Component[.Version].

ProgID или ClassID должны быть указаны.

ClassID

Указание уникального идентификатора для COM-объекта класса.

ProgID или ClassID должны быть указаны.

инстанция

Первая инстанция создает объект с именем "MyAd", используя параметр ProgID, и создает объект с областью действия session:

<object runat="server" scope="session" id="MyAd" progid="MSWC.AdRotator"
</object>

Вторая инстанция создает объект с именем "MyConnection", используя параметр ClassID:

<object runat="server" scope="application" id="MyConnection"
classid="Clsid:8AD3067A-B3FC-11CF-A560-00A0C9081C21"
</object>

Эти объекты, заявленные в этом файле Global.asa, могут быть использованы любым скриптом в приложении.

GLOBAL.ASA:

<object runat="server" scope="session" id="MyAd" progid="MSWC.AdRotator"
</object>

Вы можете ссылаться на этот "MyAd" объект из любой страницы ASP приложения:

Некоторый .ASP файл:

<%=MyAd.GetAdvertisement("/banners/adrot.txt")%> 

Заявление TypeLibrary

TypeLibrary (библиотека типов) является контейнером, содержащим DLL файлы, соответствующие COM объектам. Через включение вызова TypeLibrary в Global.asa можно получить доступ к константам COM объектов, и ASP код может лучше сообщать об ошибках. Если приложение вашего сайта зависит от COM объектов, данных типов, заявленных в библиотеке типов, вы можете заявить библиотеку типов в Global.asa.

Синтаксис:

<!--METADATA TYPE="TypeLib"
file="filename"
uuid="typelibraryuuid"
version="versionnumber"
lcid="localeid"
-->
Параметр Описание
file Определяет абсолютный путь к библиотеке типов. Параметр file или uuid, один из них обязателен.
uuid Определяет уникальный идентификатор для библиотеки типов. Параметр file или uuid, один из них обязателен.
version Опционально. Используется для выбора версии. Если указанная версия не найдена, будет использована ближайшая версия.
lcid Опционально. Идентификатор региона для библиотеки типов.

Значение ошибки

Сервер вернет один из следующих сообщений об ошибках:

Ошибка Код Описание
ASP 0222 Неправильноеspecification библиотеки типов
ASP 0223 Библиотека типов не найдена
ASP 0224 Библиотека типов не может быть загружена
ASP 0225 Библиотека типов не может быть обернута

Комментарии:Метаданные метки METADATA могут быть расположены в любом месте файла Global.asa (внутри или вне тега <script>). Однако мы все же рекомендуем размещать метаданные метки в верху файла Global.asa.

Ограничения

Ограничениях на содержимое, которое можно ссылаться в файле Global.asa:

Вы не можете отображать текст файла Global.asa. Этот файл не может отображать информацию.

Вы можете использовать объекты Server и Application только в подпрограммах Application_OnStart и Application_OnEnd. В подпрограмме Session_OnEnd вы можете использовать объекты Server, Application и Session. В подпрограмме Session_OnStart вы можете использовать любые内置енные объекты.

Как использовать подпрограммы

Global.asa часто используется для инициализации переменных.

Ниже приведен пример того, как можно определить точное время первого посещения посетителя сайта. Время хранится в объекте Session под названием "started", и значение переменной "started" может быть доступно любому ASP-странице в приложении:

<script language="vbscript" runat="server">
sub Session_OnStart
Session("started")=now()
end sub
</script>

Global.asa также можно использовать для управления доступом к страницам.

Ниже приведен пример того, как можно перенаправить каждого нового посетителя на другую страницу; в этом примере это страница "newpage.asp":

<script language="vbscript" runat="server">
sub Session_OnStart
Response.Redirect("newpage.asp")
end sub
</script>

Мы также можем включать функции в Global.asa.

В следующем примере, когда веб-сервер запускается, также запускается подпрограмма Application_OnStart. Затем подпрограмма Application_OnStart вызывает другую подпрограмму под названием "getcustomers". Подпрограмма "getcustomers" открывает базу данных и затем извлекает набор записей из таблицы "customers". Этот набор записей назначается массиву, и без запроса к базе данных любая страница ASP может получить доступ к этому массиву:

<script language="vbscript" runat="server">
sub Application_OnStart
getcustomers
end sub
sub getcustomers 
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/webdata/northwind.mdb"
set rs=conn.execute("select name from customers")
Application("customers")=rs.GetRows
rs.Close
conn.Close
end sub
</script>

Пример Global.asa

В этом примере мы создаем файл Global.asa, который может рассчитывать текущее количество посетителей.

Application_OnStart устанавливает значение переменной Application "visitors" в 0 при запуске сервера.

Каждый раз, когда новый пользователь посещает, подпрограмма Session_OnStart добавляет 1 к переменной "visitors".

Каждый раз, когда вызывается подпрограмма Session_OnEnd, из переменной "visitors" уменьшается на 1.

Файл Global.asa:

<script language="vbscript" runat="server">
Sub Application_OnStart
Application("visitors")=0
End Sub
Sub Session_OnStart
Application.Lock
Application("visitors")=Application("visitors")+1
Application.UnLock
End Sub
Sub Session_OnEnd
Application.Lock
Application("visitors")=Application("visitors")-1
Application.UnLock
End Sub
</script>

Этот ASP файл будет показывать количество текущих пользователей:

<html>
<head>
</head>
<body>
<p>В настоящее время онлайн <%-response.write(Application("visitors"))%>!</p>
</body>
</html>