Active Server Pages

Jiří Kosek ml.

Dnes se podíváme na skripty z dílny Microsoftu. Microsoft z počátku nástup Internetu poněkud zaspal, ale dnes již nabízí ucelenou řadu produktů pro vytvoření aplikací pracujících v prostředí Internetu.

Na straně klienta dnes svádí boj Internet Explorer s konkurenčním Netscape Communicatorem. Ve své poslední verzi je Internet Explorer prohlížečem s nejlepší podporou HTML 4.0 a kaskádových stylů -- na druhou stranu se pravidelně objevují zprávy o odhalení různých bezpečnostních děr.

Na poli WWW-serverů nabízí Microsoft několik produktů. Pro komerční nasazení je určen Internet Information Server (IIS). Pro jednodušší a méně rozsáhlé aplikace je určen Personal Web Server (PWS).

Oba dva dříve zmíněné servery lze doplnit o podporu skriptů. U Microsoftu těmto skriptům říkají Active Server Pages (ASP). ASP fungují na principu serverem vkládaných vsuvek -- stránku doplníme o příkazy, které se vždy před odesláním stránky provedou na serveru. Jako skriptovací jazyk můžeme použít VBScript nebo JScript. (JScript je implementace JavaScriptu od Microsoftu.) Další firmy nabízejí moduly i pro jiné jazyky -- např. pro Perl, REXX a Python.

Pokud jsme chtěli dříve používat ASP, byla to celkem nákladná legrace. Museli jsme si pořídit Windows NT Server a IIS, což není žádná laciná záležitost. K tomu je ještě potřeba přičíst zvýšené nároky na hardware. Ať chceme nebo ne, je řešení postavené nad produktech od Microsoftu více náročné na systémové zdroje než obdobné řešení založené na volně šiřitelných produktech pro Unix.

Cenovou náročnost částečně eliminuje Windows NT Option Pack, který uvolnil Microsoft na konci roku 1997. V balíku zdarma dostaneme i Personal Web Server s podporou ASP. To již dostačuje pro vývoj aplikací založených na ASP. Pokud však chceme, aby s výslednou aplikací mohlo pracovat větší množství uživatelů, musíte ji spustit pod Windows NT Server, na kterém poběží Internet Information Server.

Kombinování ASP s HTML

Příkazy ASP se od běžného HTML kódu oddělují pomocí znaků '<%' a '%>'. Oproti SSI nejsou použity k ohraničení příkazů komentáře, takže si téměř nemá cenu prohlížet ASP stránku v prohlížeči bez předchozího zpracování všech příkazů serverem. Výhodou je, že zápis znaků pro oddělení ASP příkazů je kratší než zápis komentářů. I tak je však volba oddělovacích znaků přinejmenším podivná, protože jazyk SGML (pomocí, kterého je HTML definováno) vyhrazuje pro podobné účely znaky '<?' a '>'. Text mezi nimi ignorují např. programy pro syntaktickou kontrolu HTML kódu. Před touto možností však máme s ASP dveře uzavřeny.

Jak jsme již řekli, můžeme ASP psát ve více jazycích. V našich ukázkách budeme používat VBScript, což je skriptovací jazyk velmi příbuzný Visual Basicu. Standardní skriptovací jazyk, který se na stránkách používá lze nastavit v konfiguraci serveru. Pokud chceme na stránce použít jiný skriptovací jazyk, použijeme na začátku stránky následující direktivu:

<% LANGUAGE=jazyk %>
Jako jazyk můžeme běžně použít VBScript nebo JScript.

Aby server mohl odlišit běžné stránky od těch s ASP, ukládají se ASP do souborů s příponou .asp.

Základy ASP

Mezi nejjednodušší příkazy patří v každém jazyce vypsání hodnoty výrazu. K těmto účelům můžeme v ASP použít <%= výraz %>. K zobrazení aktuálního času na serveru můžeme použít funkci Now:
<%= Now %>
K přiřazení hodnoty do proměnné se používá '='. Pokud tedy na stránce definujeme proměnnou pozdrav
<% pozdrav = "Ahoj Karle!" %>
Můžeme ji pak dále používat ve výrazech nebo vypsat pomocí příkazu <%= pozdrav %>.

K řízení toku běhu programu můžeme použít příkaz If. Následující ukázka zobrazí na stránce velkými červenými písmeny pozdrav. Text pozdravu se bude měnit podle toho, kdy se uživatel podívá na stránku.

<FONT SIZE="+3" COLOR=RED>
<% If Time >= #12:00:00 AM# And Time <= #12:00:00 PM# Then %>
Dobré ráno!
<% Else %>
Dobré odpoledne!
<% End If %>
</FONT>
Ukázka zaslouží malé vysvětlení. První řádka způsobí použití většího, červeného písma. Následuje podmínka, která zjišťuje zda je dopoledne či odpoledne -- aktuální čas zjišťujeme pomocí funkce Time. Pokud je dopoledne, prohlížeči se pošle text "Dobré ráno!", v opačném případě do prohlížeče dorazí "Dobré odpoledne!".

Dopoledne tedy bude výsledkem skriptu následující HTML kód, který bude poslán prohlížeči:

<FONT SIZE="+3" COLOR=RED>
Dobré ráno!
</FONT>
Naopak odpoledne do prohlížeče dorazí:
<FONT SIZE="+3" COLOR=RED>
Dobré odpoledne!
</FONT>
Příklad jsme rozebrali podrobněji, abychom si uvědomili, že při použití ASP a skriptů na straně serveru vůbec, dorazí do prohlížeče zcela běžné HTML. Veškeré příkazy jsou vykonány na serveru těsně před odesláním stránky.

Nemáme zde dostatek prostoru pro rozebrání všech možností, které VBScript nabízí, ale ve stručnosti si ještě ukážeme, jak lze využít cykly.

Pokud chceme na stránce zobrazit všech sedm velikostí písma, které nám HTML nabízí, můžeme si zápis ušetřit pomocí tohoto krátkého skriptu:

<% For I = 1 to 7 %>
<FONT SIZE=<%= I %>>Ukázkový text</FONT><BR>
<% Next %>
Do prohlížeče pak ve skutečnosti dorazí mnohem delší text:
<FONT SIZE=1>Ukázkový text</FONT><BR>
<FONT SIZE=2>Ukázkový text</FONT><BR>
<FONT SIZE=3>Ukázkový text</FONT><BR>
<FONT SIZE=4>Ukázkový text</FONT><BR>
<FONT SIZE=5>Ukázkový text</FONT><BR>
<FONT SIZE=6>Ukázkový text</FONT><BR>
<FONT SIZE=7>Ukázkový text</FONT><BR>
Vidíme, že pomocí ASP příkazů můžeme ovlivňovat i přímo hodnotu atributů jednotlivých elementů -- v našem případě atributu SIZE.

ASP a formuláře

Opravdová sílá skriptů na straně serveru se objeví v okamžiku, kdy skripty reagují na požadavky uživatele. HTML obsahuje možnost do stránky vložit formulář, který se skládá ze vstupních polí. Do každého pole uživatel může zapsat nějaký údaj. Všechny údaje z formuláře se pak odešlou na server, kde s nimi skript naloží podle svých potřeb.

Formulář se do HTML stránky vkládá pomocí elementu FORM.

<FORM ACTION=obsluha.asp METHOD=GET>
Jméno: <INPUT TYPE=TEXT NAME=jmeno><BR>
Věk: <INPUT TYPE=TEXT NAME=vek><BR>
<INPUT TYPE=SUBMIT VALUE="Odeslání formuláře">
</FORM>
Atribut ACTION určuje jméno skriptu, který bude použit pro zpracování obsahu formuláře. Formulář obsahuje dvě vstupní pole pro zadání jména a věku. Pole se jmenují jmeno a vek. Posledním prvkem formuláře je tlačítko, které slouží k odeslání formuláře. Vzhled formuláře v prohlížeči si můžeme prohlédnout na obr. 1.

Obr. 1: Jednoduchý formulář

Formuláři se budeme zabývat podrobněji v samostatném díle našeho seriálu, nyní nám postačí náš jednoduchý formulář pro demonstraci spolupráce ASP s formuláři.

Ve skriptu, který obsluhuje formulář (v našem případě obsluha.asp), můžeme zjistit obsah jednotlivých vstupních polí pomocí kolekce Request.QueryString. Konkrétně jméno zjistíme pomocí Request.QueryString("jmeno") a věk pomocí Request.QueryString("vek").

Ukážeme si, jak by mohl vypadat soubor obsluha.asp. Budeme chtít, aby se jméno vypsalo společně se slovním pojmenováním věkové kategorie.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>Obsluha formuláře</TITLE>
</HEAD>
<BODY>
<H1>Výsledek obsluhy formuláře</H1>
<%= Request.QueryString("jmeno") %> je
<% vek = Request.QueryString("vek")
   If vek < 10 Then
   	Response.Write "pěknej mlíčnák"
   ElseIf vek < 20 Then
   	Response.Write "teenager"
   ElseIf vek < 60 Then
   	Response.Write "v nejlepších letech"
   ElseIf vek < 100 Then
   	Response.Write "je pravděpodobně prarodič"
   Else 
   	Response.Write "je někde mezi stovkou a smrtí"
   End If %>.
</BODY>
</HTML>
Příkaz Response.Write zapíše zadaný text přímo do těla generované stránky. Stejného výsledku dosáhneme i použitím poněkud odlišného zápisu bez použití Response.Write.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>Obsluha formuláře</TITLE>
</HEAD>
<BODY>
<H1>Výsledek obsluhy formuláře</H1>
<%= Request.QueryString("jmeno") %> je
<% vek = Request.QueryString("vek")
   If vek < 10 Then %>
   	pěknej mlíčnák.
<% ElseIf vek < 20 Then %>
   	teenager.
<% ElseIf vek < 60 Then %>
   	v nejlepších letech.
<% ElseIf vek < 100 Then %>
   	je pravděpodobně prarodič.
<% Else %>
   	je někde mezi stovkou a smrtí.
<% End If %>
</BODY>
</HTML>
Výsledek naše ASP skriptu po zadání jména "Karel Karafiát" a věku 37 si můžeme prohlédnout na obrázku 2.

Obr. 2: Výsledek obslužného ASP

V dnešním díle jsme možnosti ASP jen velmi zhruba nastínili. Vůbec jsme se nezmínili o možnostech, které ASP nabízejí pro spolupráci s databázemi -- této problematice se budeme věnovat až v druhé půli našeho seriálu.

Pokud vám možnosti tvorby dynamických stránek pomocí ASP připadají přímo skvělé, máte pravdu. Budeme však objektivní a příště se podíváme na systém PHP3. Ten nabízí obdobné možnosti jako ASP a má i některé výhody. Jednak je zdarma a jednak je i svižnější než ASP. Navíc netrpí známou nectností ASP -- pokud ASP stránky na jednom serveru vyžaduje příliš mnoho uživatelů najednou, server se zastaví a je potřeba jej restartovat Jak této situaci předejít a řádně otestovat výkonnost aplikace na serveru bude samozřejmě náplní některého z dalších pokračování seriálu.

© Jiří Kosek 1999