Úvod do technológie ASP stránok

Aktívne serverové stránky (ASP) sú vlastne súbory rešpektujúce syntax HTML, ktoré môžu (ale nemusia) obsahovat príkazy v nejakom skriptovom jazyku. Aby server rozpoznal, že ide o ASP stránky, majú tieto súbory príponu ASP. Najjednoduchšia ASP stránka bez vložených skriptových príkazov vznikne premenovaním prípony súboru z HTM alebo HTML na ASP. Týmto postupom síce získame regulárnu ASP stránku, ale novú kvalitu prinesie až použitie skriptov. Kedže ASP stránky pochádzajú z dielne Microsoftu, ako primárny skriptový jazyk je použitý VBScript. Tento jazyk je odvodený od Microsoft Visual Basic alebo presnejšie Visual Basic for Aplications. Alternatívne je možné použt implementáciu Java Scriptu, v podaní Microsoftu má názov JScript. Skriptový jazyk nastavujeme pomocou príkazu:
<% LANGUAGE=jazyk %> 
kde parameter jazyk môže byt VBScript alebo JScript. Príkazy alebo riadky skriptového kódu sú od zvyšku stránky so syntaxou HTML oddelené párovými znakmi
<% ..... %>
My budeme používat VBScript. V definícii tohto jazyka (JScript je na tom podobne, ak nie horšie) chýbajú niektoré velmi potrebné funkcie, napríklad na prácu so súbormi a databázami. Preto je možné na ASP stránkach požívat aj iné objekty a komponenty. Sú to knižnice DLL, objekty ActiveX a Component Object Model (COM).

Objekty sú prvky AciveX, ktoré sú interne zabudované do ASP. Netreba ich na použitie explicitne vytvárať. Sú to napríklad Application, Request, Response, Session, Server a iné.

Komponenty sú knižnice DLL existujúce na serveri mimo ASP. Teda je možné vytvoriť si ich v ľubovoľnom vhodnom programovacom jazyku, napríklad Ad Rotator, Browser Capabilities, Content Linking, Database Access, File Access a mnohé dalšie.

Opis skriptového jazyka VBScript

Na úvod výkladu programovacieho, v tomto prípade skôr skriptového jazyka, samozrejme, budeme rešpektovat tradíciu a každý si domyslí, čo bude teraz nasledovať. Správne, bude to program Hello World!
<HTML>
<HEAD> <title>Moja prva ASP stránka</title></HEAD>
<h1>Hello World</h1>
<BODY>
<%="Hello World !"%>
</BODY>
</HTML>
HTML kód, ktorý dostal klient od servera, bude:
<HTML>
<HEAD> <title> Moja prva ASP stránka </title></HEAD>
<h1>Hello World</h1>
<BODY>
Hello World !
</BODY>
</HTML>
Vidíme rozdiel medzi skriptom na strane servera a kódom, ktorý bol poslaný klientovi. Riadok <%="Hello World !"%> bol interpretovaný ako Hello World ! Príkaz '<%=…%>' je vlastne skrátený zápis príkazu Response.write, ktorý zabezpečuje formátovaný výpis textu, resp. premennej. Pre pochopenie technológie ASP treba aspon v hrubých črtách poznať, co sa odohráva na strane servera pri spracovaní ASP stránky. Server zistí, či súbor s príponou ASP obsahuje nejaké riadky skriptového kódu. Ak neobsahuje, obsah súboru je poslaný klientovi bez zmeny ako HTML kód. Ak stránka obsahuje riadky skriptového kódu, ASP vrstva tieto príkazy interpretuje a výsledky sú vložené medzi ostatný HTML kód a poslané klientovi. Teraz sa pokúsime modifikovať predchádzajúci príklad tak, aby použitie skriptového kódu malo nejaký význam. V druhom príklade použijeme cyklus.
<HTML> <BODY>
<%premenna = "Hello world!<BR>"%>
<%FOR i=1 TO 5%>
<%=premenna%>
<%NEXT%>
</BODY></HTML>
V tomto príklade nám použitie skriptu prinesie úsporu kódu. Ovela lepší by bol tento zápis:
 
<%
premenna = "Hello world!<BR>"
FOR i=1 TO 5
Response.write premenna
NEXT
%>
Znak rovnosti ako skrátený zápis príkazu Response.write môžeme použit len v jednoriadkovom skripte. Tento zápis je zároven aj najoptimálnejší a najrýchlejší, pretože interpreter ASP stránky nemusí po každom riadku skúmat,ci riadok obsahuje alebo neobsahuje príkaz skriptového jazyka. Jednoduchým pokusom sa o tom môžeme rýchlo presvedciť. Použijeme obidva spôsoby a porovnáme doby trvania cyklov. Zavedieme si do ASP stránky meranie časov obidvoch cyklov. Príkaz Now() uloží na začiatku programu do premennej start aktuálny cas. Po ukončení cyklov vypíšeme rozdiel v sekundách medzi časom začiatku a časom konca skriptu. Pre vyššiu objektivitu vypíšeme v cykle len jeden znak bez prechodu na nový riadok, aby sme eliminovali vplyv rýchlosti skrolovania u klienta na výsledok pokusu.
<HTML>
<%
Dim start
start = Now()
%>
<%premenna = "!"%>
<%FOR i=1 TO 1000%>
<%=premenna%>
<%NEXT%>
<hr>1 sposob: Trvanie cyklu = <%= DateDiff("s", start, Now()) %> sekund
<hr>
<%
start = Now()
premenna = "!"
FOR i=1 TO 1000
Response.write premenna
NEXT
%>
<hr>2 Sposob: Trvanie cyklu = <%= DateDiff("s", start, Now()) %> sekund
</HTML>
Po vyskúšaní zistíme, že druhý spôsob zápisu je vhodnejší. Teoreticky najnevhodnejší je zápis v tvare
<%FOR i=1 TO 5%>
Hello world!<BR>
<%NEXT%>
ked sa vnútri každého cyklu strieda skriptový a neskriptový kód. Dokážeme toto tvrdenie tak, že doplníme náš testovací program o kód pre tretí spôsob zápisu cyklu:
<hr>
<%start = Now()%>
<%FOR i=1 TO 1000%>
!
<%NEXT%>
Trvanie cyklu = <%= DateDiff("s", start, Now()) %> sekund
Výsledok bude z hľadiska rýchlosti priam otrasný. Interpreter ASP stránky totiž musí v každom cykle prepínať medzi skriptovým enginom a priamym posielaním kódu HTML klientovi.

Skúsme vytvorit ASP stránku, ktorá bude trochu „chytrá“ a aj slušná, tak že využijeme podmienku.

<HTML><BODY>
<%IF Hour(time)>23 OR Hour(time)<6 THEN%>
Dobru noc!
<%ELSE%>
Dobry den!
<%END IF%>
</BODY></HTML>
Výsledkom bude pozdrav na HTML stránke, ktorý bude iný cez deň, iný večer.Použili sme predtým z hľadiska rýchlosti zatratené striedanie skriptového a neskriptového kódu. V tomto prípade, na rozdiel od cyklu sa kód vykoná iba raz, takže zdržanie bude rádovo milisekundové. Optimálny zápis z hladiska rýchlosti je o nieco zložitejší, ale možno prehľadnejší:
<HTML><BODY>
<%
IF Hour(time)>23 OR Hour(time)<6 THEN
Response.write "Dobru noc!"
ELSE
Response.write "Dobry den!"
END IF
%>
</BODY></HTML>

Z týchto príkladov vyplýva, že pri tvorbe ASP stránok je nevyhnutné nielen dodržal syntax, ale musíme citlivo uvážiť aj spôsob zápisu. Niekedy pri zložitom kóde je lepšie pripustiť mierne spomalenie na úkor väčšej prehľadnosti kódu.

Spracovanie údajov z formulára na HTML stránke skriptom na ASP stránke

Veľmi dôležité je vyrieši? komunikáciu webovej aplikácie s používate?om. Napríklad pri návrhu internetovej aplikácie typu e-business potrebujeme, aby sa používateľ identifikoval prístupovým heslom, niečo si objednal a podobne. Na tento účel sa používajú formuláre. Klient vo väčšine prípadov komunikuje s webovou aplikáciou prostredníctvom ovládacích prvkov, ktoré sú podobné ovládacím prvkom klasických aplikácií. Ovládacie prvky sú v rámci HTML stránok zoskupené do formulárov.
<FORM ACTION="stranka.asp" METHOD="metoda" ..>
..ovládacie prvky ..
</FORM>
Formulár môže obsahovať vstupné prvky (INPUT), prvky na vytváranie zoznamov (SELECT) a prvok na zadávanie rozsiahlejších textových údajov (TEXTAREA). Po zatlačení tlačidla s významom „O.K.“ alebo „Odoslať“ sa údaje, ktoré zadal klient, odovzdajú prostredníctvom príkazu SUBMIT na server.
<INPUT TYPE=SUBMIT VALUE=" O.K ">
Formulár môže odovzdať parametre ASP stránke metódou POST alebo GET. Metóda POST zabalí všetky potrebné údaje z formulára a odošle ich na server.
<FORM ACTION=stranka.asp METHOD=post id=form1 name=form1>
..ovládacie prvky ..
<INPUT type=submit value=" O.K ">
</FORM>
ASP stránka na serveri prečíta tieto údaje volaním objektu Request, metódy Form. Ako parameter metódy Form uvedieme meno položky, ktorú chceme použiť.
hodnota=Request.Form("meno_polozky")
Metóda GET odovzdá parametre ASP stránke ako súčasť URL adresy, napríklad http://.../pr.asp?heslo=pokus. Ak formulár obsahuje viac parametrov, tie sú oddelené znakom &.
<FORM ACTION=stranka.asp METHOD=get id=form2 name=form2>
..ovládacie prvky ..
<INPUT type=submit value=" O.K ">
</FORM>
Na strane serverovej ASP stránky použijeme na zistenie parametrov metódu QueryString objektu Request. Podobne ako v predchádzajúcom prípade použijeme ako parameter metódy QueryString meno položky. hodnota=Request.QueryString("meno_polozky") Na lepšie pochopenie výmeny informácií medzi klientom a serverom je potrebné aspoň v hrubých črtách vysvetliť, ako vlastne ASP stránka pracuje. Webový server odovzdá stránku na spracovanie vrstve ASP. Táto vrstva (tvorí ju dynamicky linkovateťná knižnica DLL) postupne po riadkoch číta obsah súboru. Ak riadok obsahuje skriptový kód, ten sa interpretuje a jeho výstupy sú vložené do HTML stránky pre klienta. Ak riadok neobsahuje skriptový kód, je vložený do HTML stránky priamo. Novšie verzie serverov najskôr skontrolujú celý súbor, a ak ten neobsahuje nijaký skriptový kód, priamo ho vložia do HTML stránky. Preto môžeme používať príponu ASP pre všetky stránky bez ohľadu na to, či obsahujú alebo neobsahujú nejaký skriptový kód. Nie vždy klient vyplní všetky údaje správne. Preto je potrebná ich kontrola. Máme dve možnosti. Môžeme údaje prekontrolovať po ich odoslaní na server a v prípade, že sú zadané nesprávne, oznámiť klientovi, kde urobil chybu, a žiadať opätovné vyplnenie správnych údajov. Nie je to však najvhodnejšie riešenie, pretože neustálou komunikáciou medzi klientom a serverom zaťažujeme sieť a neustálym čakaním odrádzame používateľa. Oveľa výhodnejšia je kontrola údajov priamo skriptom na HTML stránke u klienta. Niektoré skutočnosti, napríklad duplicita údajov, sa dajú zistiť len na serveri porovnaním zadaných údajov s údajmi v databázach.

Vytvoríme HTML stránku, ktorá bude obsahovať formulár na zadanie prístupového hesla. Heslo budeme kontrolovať prostredníctvom ASP stránky na serveri.

pr2.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
	<head>
		<title>Príklad 2</title>
		<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
	</head>
	<body>
		<h4>Spracovanie údajov z formulára na HTML stránke skriptom na ASP stránke
		</h4>
		<P></P>
		<P>Prihlasenie pouzivatela do systemu</P>
		<FORM ACTION="pr2.asp" METHOD="post" id="form1" name="form1">
			Heslo:<INPUT id="heslo" type="password" name="heslo">  
			      <INPUT type="submit" value="Prihlas sa" ID="Submit1" NAME="Submit1">
		</FORM>
	</body>
</html>
pr2.asp
<%@ Language=VBScript %>
<HTML>
	<HEAD>
		<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
		<title>Priklad 2 ASP</title>
	</HEAD>
<body>
<h4>Priklad 2 ASP </h4>
<%
On Error Resume Next
err.Clear

ZadaneHeslo = Request.Form("heslo")
'Response.write ZadaneHeslo
if ZadaneHeslo = "computer" then
Response.write "Vitajte v systeme"
else
Response.write "Nespravne heslo"
end if

if err.number<>0 then
Response.Write("
"&err.Description) & "
" err.clear end if %> </BODY> </HTML>

Posielanie mailov z ASP stránky

Ak potrebujeme poslať mail prostredníctvom mailového klienta, musíme vyplniť jednoduchý formulár, ktorý obsahuje informácie o odosielateľovi, adresátovi a adresy pre zaslanie prípadných kópií.

From: odosielatel@skmi.science.upjs.sk
To: imro@pobox.sk
Copy: slaninka@skmi.science.upjs.sk
Subject: SPS
Text: Nemam co robit, preto pisem, nemam co pisat, preto koncim.

Podobne budeme postupovať aj pri návrhu skriptového kódu na ASP stránke. Vytvoríme objekt cdonts.newmail a definujeme všetky jeho vlastnosti: from reťazec, ktorý obsahuje mailovú adresu odosielateťa, to reťazec, ktorý obsahuje mailovú adresu adresáta, prípadne zoznam viacerých adries oddelený stredníkom, cc reťazec, ktorý obsahuje mailovú adresu adresáta, alebo zoznam viacerých adries oddelený stredníkom. Títo adresáti dostanú kópiu mailu, subject reťazec obsahuje predmet odosielaného mailu, body reťazec obsahuje vlastný text mailu. Metóda send slúži k vlastnému odoslaniu mailu.
<html><head></head><body><h1>Posielanie e-mailov</h1>
<%
on error resume next
err.clear
set e_mail=server.CreateObject("cdonts.newmail")
e_mail.from="odosielatel@skmi.science.upjs.sk"
e_mail.to="imro@pobox.sk"
e_mail.cc="slaninka@skmi.science.upjs.sk"
e_mail.subject="Pripomienky"
e_mail.body="Nemam co robit, preto pisem..."
e_mail.send
if err.number<>0 then
Response.Write ("Mail nemohol byt odoslany")
err.clear
else
Response.Write ("Mail bol odoslany")
end if
%>
</BODY></HTML>
Mail s vopred známym textom môžeme dokonca poslať jediným príkazom send bez predchádzajúceho vypĺňania parametrov.
Set objNewMail = CreateObject("CDONTS.NewMail")
objNewMail.Send "odosielatel@sk.sk", "adresar@sk.sk", "Pozdrav", "Pokusny mail!", 0
Objekt cdonts.newmail umožňuje nastaviť aj ľahšie parametre, napríklad prioritu:
e_mail.importance=priorita
kde:
0 – nízka priorita, systém doručí správu počas nízkeho prevádzkového zaťaženia,
1 – normálna priorita, systém sa pokúsi odoslať a doručiť správu v časovom limite,
    ktorý je nastavený pre doručenie mailov,
2 – vysoká priorita, systém sa pokúša odoslať a doručiť správu okamžite.
Maily môžu obsahovať aj prílohu. Akýkoľvek súbor môžeme pripojiť príkazom:
e_mail.AttachFile(strSource [, StrFileName][, kodovanie])
StrFileName je nepovinný parameter, pomocou ktorého môžeme určiť, pod akým názvom sa pripojený súbor zobrazí adresátovi. Ak tento parameter vynecháme, zobrazí sa mu skutočný názov pripojeného súboru.