<% 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.
<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.
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.
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
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%>
Dobru noc!
<%ELSE%>
Dobry den!
<%END IF%>
</BODY></HTML>
<HTML><BODY>
<%
IF Hour(time)>23 OR Hour(time)<6 THEN
Response.write "Dobru noc!"
ELSE
Response.write "Dobry den!"
END IF
%>
</BODY></HTML>
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.
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.
<FORM ACTION="stranka.asp" METHOD="metoda" ..>
..ovládacie prvky ..
</FORM>
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.
<INPUT TYPE=SUBMIT VALUE=" O.K ">
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ť.
<FORM ACTION=stranka.asp METHOD=post id=form1 name=form1>
..ovládacie prvky ..
<INPUT type=submit value=" O.K ">
</FORM>
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 &.
hodnota=Request.Form("meno_polozky")
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.
<FORM ACTION=stranka.asp METHOD=get id=form2 name=form2>
..ovládacie prvky ..
<INPUT type=submit value=" O.K ">
</FORM>
pr2.asp<!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>
<%@ 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í.
<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.