ASP Файл Global.asa
Файл Global.asa
Файл Global.asa — это необязательный файл, который может содержать объявления объектов, переменных и методов, к которым может обращаться каждая страница приложения ASP.
Все допустимые сценарии браузера (JavaScript, VBScript, JScript, PerlScript и т. д.) можно использовать в Global.asa.
Файл Global.asa может содержать только следующее:
- События приложения
- События сеанса
- объявления <объект>
- Объявления TypeLibrary
- директива #include
Примечание. Файл Global.asa должен храниться в корневом каталоге приложения ASP, и каждое приложение может иметь только один файл Global.asa.
События в Global.asa
В Global.asa вы можете указать объектам приложения и сеанса, что делать, когда приложение/сеанс запускается, и что делать, когда приложение/сеанс заканчивается. Код для этого размещается в обработчиках событий. Файл Global.asa может содержать четыре типа событий:
Application_OnStart — происходит, когда ПЕРВЫЙ пользователь вызывает первую страницу в приложении ASP. Это событие происходит после перезапуска веб-сервера или после редактирования файла Global.asa. Событие "Session_OnStart" происходит сразу после этого события.Session_OnStart — это событие происходит КАЖДЫЙ раз, когда НОВЫЙ пользователь запрашивает свою первую страницу в приложении ASP.
Session_OnEnd — это событие происходит КАЖДЫЙ раз, когда пользователь завершает сеанс. Пользовательская сессия завершается после того, как пользователь не запрашивал страницу в течение заданного времени (по умолчанию это 20 минут).
Application_OnEnd — это событие происходит после того, как ПОСЛЕДНИЙ пользователь завершил сеанс. Обычно это событие происходит при остановке веб-сервера. Эта процедура используется для очистки настроек после остановки Приложения, таких как удаление записей или запись информации в текстовые файлы.
Файл Global.asa может выглядеть примерно так:
<script language="vbscript" runat="server">
sub Application_OnStart
'some code
end sub
sub Application_OnEnd
'some code
end sub
sub Session_OnStart
'some code
end sub
sub Session_OnEnd
'some code
end sub
</script>
Примечание. Поскольку мы не можем использовать разделители сценариев ASP (<% и %>) для вставки сценариев в файл Global.asa, мы помещаем подпрограммы в HTML-элемент <script>.
<объект> Объявления
В Global.asa можно создавать объекты с областью действия сеанса или приложения с помощью тега <object>.
Примечание. Тег <object> должен быть вне тега <script>!
Синтаксис
<object runat="server" scope="scope" id="id"
{progid="progID"|classid="classID"}>
....
</object>
Parameter | Description |
---|---|
scope | Sets the scope of the object (either Session or Application) |
id | Specifies a unique id for the object |
ProgID | An id associated with a class id. The format for ProgID is [Vendor.]Component[.Version]
Either ProgID or ClassID must be specified. |
ClassID | Specifies a unique id for a COM class object. Either ProgID or ClassID must be specified. |
Примеры
В первом примере создается объект области сеанса с именем «MyAd» с использованием параметра ProgID:
<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>
You could reference the object "MyAd" from any page in the ASP application:
SOME .ASP FILE:
<%=MyAd.GetAdvertisement("/banners/adrot.txt")%>
Объявления TypeLibrary
TypeLibrary — это контейнер для содержимого DLL-файла, соответствующего COM-объекту. Включив вызов TypeLibrary в файл Global.asa, можно получить доступ к константам COM-объекта, а код ASP может лучше сообщать об ошибках. Если ваше веб-приложение использует COM-объекты, для которых типы данных объявлены в библиотеках типов, вы можете объявить библиотеки типов в Global.asa.
Синтаксис
<!--METADATA TYPE="TypeLib"
file="filename"
uuid="id"
version="number"
lcid="localeid"
-->
Parameter | Description |
---|---|
file | Specifies an absolute path to a type library.
Either the file parameter or the uuid parameter is required |
uuid | Specifies a unique identifier for the type library.
Either the file parameter or the uuid parameter is required |
version | Optional. Used for selecting version. If the requested version is not found, then the most recent version is used |
lcid | Optional. The locale identifier to be used for the type library |
Значения ошибок
Сервер может вернуть одно из следующих сообщений об ошибке:
Error Code | Description |
---|---|
ASP 0222 | Invalid type library specification |
ASP 0223 | Type library not found |
ASP 0224 | Type library cannot be loaded |
ASP 0225 | Type library cannot be wrapped |
Примечание. Теги METADATA могут появляться в любом месте файла Global.asa (как внутри, так и вне тегов <script>). Однако рекомендуется, чтобы теги METADATA отображались в верхней части файла Global.asa.
Ограничения
Ограничения на то, что вы можете включить в файл Global.asa:
- Вы не можете отображать текст, записанный в файле Global.asa. Этот файл не может отображать информацию
- Вы можете использовать объекты Сервер и Приложение только в подпрограммах Application_OnStart и Application_OnEnd. В подпрограмме Session_OnEnd вы можете использовать объекты Сервер, Приложение и Сеанс. В подпрограмме Session_OnStart вы можете использовать любой встроенный объект
Как использовать подпрограммы
Global.asa часто используется для инициализации переменных.
В приведенном ниже примере показано, как определить точное время первого посещения посетителем веб-сайта. Время хранится в переменной сеанса с именем «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 устанавливает для переменной приложения «посетители» значение 0 при запуске сервера.
- Подпрограмма Session_OnStart добавляет единицу к переменной «посетители» каждый раз, когда приходит новый посетитель.
- Подпрограмма Session_OnEnd вычитает единицу из «посетителей» каждый раз, когда эта подпрограмма запускается.
Файл 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:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>There are <%response.write(Application("visitors"))%>
online now!</p>
</body>
</html>