Jistě jste se již setkali s problémem, jak definovat začátek a konec webové aplikace. V prostředí Microsoft lze říci, že aplikace začíná poklepáním na ikonu a končí zavřením okna aplikace. Ale tohle vůbec neplatí v prostředí webu. Jak můžeme určit, zda-li aplikace začala či skončila?

Pro řešení tohoto problému nám ASP nabízejí řešení. ASP využívají zvláštní soubor, který se jmenuje global.asa s jehož pomocí se definuje nejen začátek a konec aplikace, ale i začátek a konec práce pro každého jednotlivého uživatele.

Soubor global.asa je zodpovědný za zpracování 4 základních událostí ve vaší webové aplikaci. Jedná se o Application_OnStart, Application_OnEnd, Session_OnStart, Session_OnEnd.

Scripty, které jsou uloženy v souboru global.asa jsou zpracovávány vždy, když nastane některá z těchto událostí:

  • Při prvním HTTP požadavku na libovolný soubor ASP aplikace – v tomto případě je zpracován kód, který je uveden v metodě Application_OnStart
  • Při prvním požadavku unikátního klienta na stránku ASP aplikace – v tomto případě je zpracován kód, který je uveden v metodě Session_OnStart
  • Ukončením spojení uživatele s aplikací. Ukončení spojení se provede, pokud je uživatel je neaktivní po dobu nastavenou jako timeout spojení (defaultně je nastaveno v konfiguraci IIS na 20 minut) nebo pokud, uživatel opustí server – v tomto případě je zpracován kód, který je uveden v metodě Session_OnEnd nebo, pokud je ukončeno poslední aktivní spojení – v tomto případě je zpracován kód, který je uveden v metoděApplication_OnEnd

    Typickým příkladem využití global.asa je jednoduché počítadlo přístupů na stránky. Jistě jste již slyšeli o počítadle přístupů, které je jako ActiveX, JavaAplet či CGI, ano i to je možné řešení, ale proč cpát na stránky další objekty, když existuje řešení, které je jednoduché.

    <SCRIPT LANGUAGE=“VBScript“ RUNAT=“Server“>
    Sub Session_OnStart
     Application.lock
     Application(„navsteva“)=Application(„navsteva“)+1
       Application(„aktivni“)=Application(„aktivni“)+1
       Application.unlock
    End Sub
    Sub Session_OnEnd
       Application.lock
       Application(„aktivni“)=Application(„aktivni“)-1
       Application.unlock
    End Sub </SCRIPT>

    Na uvedené proměnné se pak můžete z ASP stránky odkazovat takto:

    <html>
    <head>
    <title>Pristupy< /title>
    <head>
    <body>
    <%
    Response.write(„Web si právě čte:“&Application(„aktivni“)&“čtenářů“)
    Response.write(„Od spuštění aplikace máme :“&Application(„navsteva“)&“přístupů“)
    % >
    </body>
    </html>

    No řekněte, není tohle řešení jednoduché? Ale pozor, v tomto příkladu jsou veškeré přístupy počítány pouze v paměti serveru. To znamená, že po restartu serveru, ale i při skončení aplikace (viz. Application_OnEnd) dojde ke ztrátě napočítaných přístupů.

    Řešení je jednoduché a spočívá ve dvou krocích

  • Uložení počtu přístupů do textového souboru v metodě Application_OnEnd


    <SCRIPT LANGUAGE=“VBScript“ RUNAT=“Server“>
    Sub Application_OnEnd
     Dim ObjFile
     Set ObjFile=server.CreateObject(„Scripting.FileSystemObject“)
    Dim objStream
    Set objStream =objFile.CreateTextFile („c:/inetpub/wwwroot/web/pristup.log“,true,false)
    objStrem.write(Application(„navsteva“))
    objStream.close
    Set objStream = Nothing
    objFile.close
    Set objFile = Nothing
    End Sub
    </SCRIPT>

  • načtení počtu přístupů z textového souboru a uložení do proměnné Application(„navsteva“)v metodě Application_OnStart


    <SCRIPT LANGUAGE=“VBScript“ RUNAT=“Server“>
    Sub Application_OnStart
    Dim ObjFile
    set ObjFile=server.CreateObject(„Scripting.FileSystemObject“)
    Dim objStream
    set objStream =objFile.OpenTextFile(„c:/inetpub/wwwroot/web/pristup.log“)
    Application.lock
    Application(„navsteva“)=objStream.Readline
    Application.unlock
    objStream.close
    Set objStream = Nothing
    objFile.close
    Set objFile = Nothing
    End Sub
    </SCRIPT>

    Pro zápis a čtení textového souboru je použit standartní ASP objekt FileSystemObject. V metodě Application_OnEnd je vytvořen vždy nový ASCII soubor do kterého je zapsán aktuální stav proměnné Application(„navsteva“).
    V metodě Application_OnStart je soubor otevřen a hodnota v něm zapsaná je uložena do proměnné Application(„navsteva“).

    Před zápisu do proměnné Application(„navsteva“) (obecně při zápisu do libovolné proměnné Application) je třeba použít příkaz Application.Lock, který zabrání zápisu do proměnné jinému procesu. Po provedení zápisu do proměnné je třeba provést Application.Unlock, čímž se proměnné objektu Application zpřístupní. Po provedení zápisu či čtení souboru je třeba zavřít soubor a zrušit použité instance objektu FileSystemObject.

    Podrobnější popis práce se soubory bude uveden v některém z dalších článků.

    Starší komentáře ke článku

    Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

  • Žádný příspěvek v diskuzi

    Odpovědět