ASP O arquivo Global.asa
O arquivo Global.asa
O arquivo Global.asa é um arquivo opcional que pode conter declarações de objetos, variáveis e métodos que podem ser acessados por cada página em um aplicativo ASP.
Todos os scripts de navegador válidos (JavaScript, VBScript, JScript, PerlScript, etc.) podem ser usados no Global.asa.
O arquivo Global.asa pode conter apenas o seguinte:
- Eventos do aplicativo
- Eventos de sessão
- declarações de <objeto>
- Declarações TypeLibrary
- a diretiva #include
Nota: O arquivo Global.asa deve ser armazenado no diretório raiz do aplicativo ASP e cada aplicativo pode ter apenas um arquivo Global.asa.
Eventos em Global.asa
Em Global.asa você pode dizer ao aplicativo e aos objetos de sessão o que fazer quando o aplicativo/sessão iniciar e o que fazer quando o aplicativo/sessão terminar. O código para isso é colocado em manipuladores de eventos. O arquivo Global.asa pode conter quatro tipos de eventos:
Application_OnStart - ocorre quando o PRIMEIRO usuário chama a primeira página em um aplicativo ASP. Este evento ocorre depois que o servidor Web é reiniciado ou depois que o arquivo Global.asa é editado. O evento "Session_OnStart" ocorre imediatamente após este evento.Session_OnStart - Este evento ocorre TODA vez que um novo usuário solicita sua primeira página no aplicativo ASP.
Session_OnEnd - Este evento ocorre TODA vez que um usuário encerra uma sessão. Uma sessão de usuário termina depois que uma página não foi solicitada pelo usuário por um tempo especificado (por padrão, são 20 minutos).
Application_OnEnd - Este evento ocorre depois que o ÚLTIMO usuário encerrou a sessão. Normalmente, esse evento ocorre quando um servidor Web é interrompido. Este procedimento é usado para limpar as configurações após a interrupção do aplicativo, como excluir registros ou gravar informações em arquivos de texto.
Um arquivo Global.asa pode ser algo assim:
<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>
Nota: Como não podemos usar os delimitadores de script ASP (<% e %>) para inserir scripts no arquivo Global.asa, colocamos sub-rotinas dentro de um elemento HTML <script>.
<objeto> Declarações
É possível criar objetos com escopo de sessão ou aplicativo em Global.asa usando a tag <object>.
Nota: A tag <object> deve estar fora da tag <script>!
Sintaxe
<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. |
Exemplos
O primeiro exemplo cria um objeto de escopo de sessão chamado "MyAd" usando o parâmetro ProgID:
<object runat="server" scope="session" id="MyAd"
progid="MSWC.AdRotator">
</object>
O segundo exemplo cria um objeto de escopo de aplicação chamado "MyConnection" usando o parâmetro ClassID:
<object runat="server" scope="application" id="MyConnection"
classid="Clsid:8AD3067A-B3FC-11CF-A560-00A0C9081C21">
</object>
Os objetos declarados no arquivo Global.asa podem ser usados por qualquer script da aplicação:
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")%>
Declarações de biblioteca de tipos
Um TypeLibrary é um contêiner para o conteúdo de um arquivo DLL correspondente a um objeto COM. Incluindo uma chamada para TypeLibrary no arquivo Global.asa, as constantes do objeto COM podem ser acessadas e os erros podem ser melhor relatados pelo código ASP. Se seu aplicativo da Web depender de objetos COM que tenham tipos de dados declarados em bibliotecas de tipos, você poderá declarar as bibliotecas de tipos em Global.asa.
Sintaxe
<!--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 |
Valores de erro
O servidor pode retornar uma das seguintes mensagens de erro:
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 |
Nota: As tags METADATA podem aparecer em qualquer lugar no arquivo Global.asa (dentro e fora das tags <script>). No entanto, é recomendável que as marcas METADATA apareçam perto da parte superior do arquivo Global.asa.
Restrições
Restrições sobre o que você pode incluir no arquivo Global.asa:
- Você não pode exibir texto escrito no arquivo Global.asa. Este arquivo não pode exibir informações
- Você só pode usar objetos Servidor e Aplicativo nas sub-rotinas Application_OnStart e Application_OnEnd. Na sub-rotina Session_OnEnd, você pode usar os objetos Servidor, Aplicativo e Sessão. Na sub-rotina Session_OnStart você pode usar qualquer objeto embutido
Como usar as subrotinas
Global.asa é frequentemente usado para inicializar variáveis.
O exemplo abaixo mostra como detectar a hora exata em que um visitante chega pela primeira vez a um site. O tempo é armazenado em uma variável Session chamada "started", e o valor da variável "started" pode ser acessado de qualquer página ASP no aplicativo:
<script language="vbscript" runat="server">
sub Session_OnStart
Session("started")=now()
end sub
</script>
Global.asa também pode ser usado para controlar o acesso à página.
O exemplo abaixo mostra como redirecionar cada novo visitante para outra página, neste caso para uma página chamada "newpage.asp":
<script language="vbscript" runat="server">
sub Session_OnStart
Response.Redirect("newpage.asp")
end sub
</script>
E você pode incluir funções no arquivo Global.asa.
No exemplo abaixo, a sub-rotina Application_OnStart ocorre quando o servidor Web é iniciado. Em seguida, a sub-rotina Application_OnStart chama outra sub-rotina chamada "getcustomers". A sub-rotina "getcustomers" abre um banco de dados e recupera um conjunto de registros da tabela "customers". O conjunto de registros é atribuído a um array, onde pode ser acessado de qualquer página ASP sem consultar o banco de dados:
<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>
Exemplo Global.asa
Neste exemplo, criaremos um arquivo Global.asa que conta o número de visitantes atuais.
- O Application_OnStart define a variável do aplicativo "visitors" para 0 quando o servidor é iniciado
- A sub-rotina Session_OnStart adiciona um à variável "visitantes" toda vez que um novo visitante chega
- A sub-rotina Session_OnEnd subtrai um de "visitantes" cada vez que esta sub-rotina é acionada
O arquivo 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>
Para exibir o número de visitantes atuais em um arquivo ASP:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>There are <%response.write(Application("visitors"))%>
online now!</p>
</body>
</html>