Az ASP alapjai
Bevezetés

Amikor annak idején a HTML-t kitalálták, még senki sem gondolt arra, mi lesz a dolog vége. A HTML hipertext-leírónyelv eredetileg arra való, hogy segítségével egyszerű dokumentumokat hozunk létre, amelyek egyes részei esetleg hivatkoznak más dokumentumok részeire (ez a hiperhivatkozás, hiperlink). Az eredeti HTML nyelv a hivatkozásokon kívül alig néhány elemet tartalmazott, amelyek különböző szintű címsorok, idézetek, esetleg listák létrehozását segítették. A sors fintora, hogy az Internet megjelenésével éppen a HTML lett az internetes kommunikáció egyik alapja. (Nincs ezen mit csodálkozni: különféle adatok és közöttük felépített kapcsolatok leírására volt szükség, és a HTML éppen kapóra jött.) A ma használatos HTML persze már jócskán több, mint egyszerű dokumentumleíró nyelv – pontosan annyi köze van az “ős“ HTML-hez, mint a mai dokumentumoknak az akkoriakhoz. Régen az adatok struktúrája képezte az alapot, ma inkább azok megjelenítése. Ahogy telt az idő, úgy szivárogtak bele a nyelvbe a tartalmat nem, azok megjelenítését annál inkább érintő elemek: képek, táblázatok, keretek (framek), színek, méretek, betűtípusok, külső objektumok, scriptrészletek és ki tudja még mi minden. A HTML 4-es változatát többek között pontosan azért alkották meg, hogy valamelyest (újra) szétválaszthassuk a tartalmat a megjelenítéstől, ezzel is csökkentve a HTML oldalak kódjában található nem kis káoszt. A tartalom és megjelenítés szétválasztása azóta szinte minden területen hódít, függetlenül attól, hogy a hálózaton található HTML oldalak nagy része a mai napig nem használja ki a HTML 4 lehetőségeit (köszönhető ez egyébként a szabványokkal többé-kevésbé hadilábon álló böngésző programoknak is).

Mozgásba lendül a kód…

Az idő múlásával egy másik területen is sokat fejlődött a HTML, illetve annak felhasználása. Kezdetben elég volt, ha egy dokumentumot létrehoztunk, annak tartalma nem, vagy csak ritkán változott. Később felmerült az igény arra, hogy a gyakran változó HTML oldalak tartalmát dinamikusan hozzák létre. Kezdettől két irányvonal létezett, attól függően, hogy a kiszolgálóra, vagy pedig a dokumentumot felhasználó ügyfélprogramra bízták a feladatot. Ez utóbbi megoldás nem biztos, hogy működik (senki sem garantálja, hogy az ügyfélprogram képes ezt a feladatot végrehajtani), ráadásul több szempontból előnytelen is: ha a cél az, hogy 100 dologból csak egy valami jelenjen meg az ügyfél képernyőjén, felesleges mind a százat elküldeni neki, majd ott kiválasztani a szükséges egyet – egyszerűbb, biztonságosabb és olcsóbb, ha már eleve csak a számára érdekes adatok kerülnek hozzá. Ehhez viszont a kiszolgálónak kell erőfeszítéseket tennie. A kiszolgálóoldali megoldások közös tulajdonsága, hogy a kiszolgáló mindig kész, feldolgozható HTML kódot küld az ügyfélnek – a kód tartalma viszont dinamikus, időről időre változik. Magyarán: a cél az, hogy HTML kódot generáljunk. A legkézenfekvőbb megoldás az volt, ha kész, teljes programokat írtak az egyes feladatok végrehajtására. A programok szabványos bemeneten (stdin) keresztül kapták a bemenő adatokat, majd a szabványos kimeneten (stdout) továbbították az általuk létrehozott kódot. A webkiszolgáló és a programok közötti kapcsolatot az ún. CGI (Common Gateway Interface) valósította meg, így a programok látszólag a kiszolgáló részeként működtek (és működnek ma is). Ezt a módszert CGI programozásnak nevezzük, és bár néhány területen még ma is használatos, hátrányai miatt lassan kiszorul. Mert: mit tehetünk, ha azt szeretnénk, hogy a CGI program mostantól más kódot generáljon? Egy: újraírjuk, újrafordítjuk és kicseréljük a programot. Kettő: Eleve olyan CGI alkalmazást írunk, ami a bemenő adatok segítségével paraméterezhető. Sőt, mi lenne, ha a bemenő paraméter egy valamilyen formában meghatározott parancssorozat, vagy akár egy valamilyen nyelven megírt script kód lenne? A CGI program azt értelmezi, végrehajtja, és visszaadja az eredményt – ez a megoldás a scriptnek köszönhetően teljesen dinamikus és bármire használható lenne – és az is. Jó példa erre a Perl nyelv, ahol a webprogramozás lelke a perl.exe. Bemenete egy Perl nyelven írt script, kimenete pedig a kész HTML kód.

Az ASP megjelenése

A fenti megoldás egy kicsit mégis kényelmetlen: milyen jó lenne, ha a HTML oldalak általában statikus részét hagyományos módon, akár egy kényelmes WYSIWYG szerkesztővel készíthetnénk, és csak a dinamikus részt kellene programozni! Az Active Server Pages (ASP) elve pontosan ez: amikor azt mondjuk, ASP, tulajdonképpen egy HTML kódba ágyazott, speciális programozási módszerről beszélünk. (Fontos, hogy az ASP nem egy programozási nyelv, hanem csak egy keretrendszer). Az ASP oldal végrehajtásakor a webkiszolgáló végigszalad az oldal tartalmán, és ha abban ASP scriptrészletet talál, végrehajtja. A HTML oldal és a script által esetleg visszaadott kódrészletek együttesen képezik az eredményt, amit azután az IIS elküld a böngészőnek.

Lássunk egy példát:

<HTML><HEAD><TITLE></TITLE></HEAD>
<BODY>
<%
Response.Write("<center>Hello World!</center>")
%>
</BODY>
</HTML>

 A HTML kód belsejében található <% és %> jelzi az ASP kód kezdetét és végét. A köztük található kódrészlet elvileg soha nem jut el az ügyfélhez, csakis a kód futtatása során keletkező kimenet (ami esetünkben a Response.Write() metódusnak átadott szövegrész). Az ASP scriptek beágyazásának módjáról kicsit később még lesz szó, most lássuk, mi lesz az eredmény:

 <HTML><HEAD><TITLE></TITLE></HEAD>
<BODY>
<center>Hello World!</center>
</BODY>
</HTML>

Az ASP kód által generált kimenet tehát összemosódott a HTML kóddal. Ez jó, hiszen ráérünk az oldalt teljes egészében elkészíteni egy külső, kényelmes HTML szerkesztővel, majd utólag beágyazhatjuk az ASP kódot. Egy gondolat az ASP használatáról: mint látható, az ASP az IIS webkiszolgáló része. A Windows NT 4.0 Option Pack segítségével telepíthető Internet Information Server 4.0 (Windows NT 4.0 Workstation-ön, illetve a Windows 9x-en Personal Web Server) már tartalmazza az ASP kezeléséhez szükséges komponenseket, amelyek a Windows 2000 IIS5 webkiszolgálójában természetesen alapértelmezett tartozékok. Ha azt szeretnénk, hogy egy fájlt az IIS tényleg ASP oldalként kezeljen, adjunk a fájlnak .asp kiterjesztést (ha ezt nem tesszük, a kód végrehajtás nélkül eljut az ügyfélhez, mintha a HTML oldal tartalma lenne).

Az ASP kódok beágyazása

Az ASP scripte(ke)t az oldalba több módon is beágyazhatjuk. Lássuk mindenekelőtt a HTML szabványnak megfelelő módot:

<HTML><HEAD><TITLE></TITLE></HEAD>
<BODY>
<SCRIPT runat="server" language="vbscript">
Response.Write("<center>Hello World!</center>")
</SCRIPT>
</BODY>
</HTML>

A SCRIPT HTML elem segítségével tehát ugyanúgy ágyazhatunk be kiszolgálóoldalon futó kódot, mintha ügyféloldali scriptet írnánk – csak adjuk meg a runat="server" attribútumot. Hasonlóan az ügyféloldali megoldáshoz, természetesen kiszolgálóoldalon sem muszály az oldalon belül megírni a scriptet, megadhatunk fájlnevet is (src attribútum):

 <SCRIPT runat="server" src="scfile.vbs">

Látható, hogy itt elhagytuk a scriptnyelv meghatározását. Ebben az esetben a kiszolgáló az alapértelmezett scriptnyelvet használja. Ezt két helyen határozhatjuk meg: egyrészt, az adott .asp oldal tetejére írt, úgynevezett ASP direktíva segítségével :

<%@ Language=VBScript %>

Ha pedig ez hiányzik, a kiszolgáló a saját beállításait használja, amit az adott IIS web vagy virtuális könyvtár tulajdonságai között, a “Home Directory“ oldalon, az “Application Settings“ részben található “Configuration“ gombra kattintva megjelenő “Application Configuration“ dialógusablak “App Options“ oldalán, a “Default ASP language:“ mezőben állíthatunk be.


Az ASP alkalmazás beállításai az IIS-ben

Ezt a dialógusablakot érdemes megjegyezni, mert sok más, fontos beállítás is itt található. Az alapértelmezett kiszolgálóoldali scriptnyelv egyébként a VBScript. Ezt a nyelvet “használja“ a korábban már bemutatott, rövidített formátum is:

<%
Response.Write("<center>Hello World!</center>")
%>

A <% és %> használata rövidebb és kényelmesebb is, ezért cikkünk további részében – hacsak kifejezetten nincs szükség másra – ezt használjuk. Természetesen egy oldalon belül több scriptblokk is szerepelhet. Az ASP oldal tartalmát az IIS elölről hátrafelé haladva értékeli ki, beleértve magát a HTML kódot is. Az ASP kód által visszaadott kód az eredményben ott jelenik meg, ahol maga a script szerepel, például a …

1<% Response.Write("a") %>2
<% Response.Write("b") %>3

… eredménye “1a2b3" és nem “ab123" vagy “123ab". A fenti példában láthatjuk azt is, hogy akár soron belül is készíthetünk scriptblokkot (inline script), nem ritka az alábbihoz hasonló megoldás:

<INPUT type="textbox" value="<% =sTxt %>">

Ezután a szövegmezőben az sTxt változó tartalma jelenik meg. Újabb újdonsággal találkoztunk: a <% után írt = a Response.Write rövidítése, tehát a <%="Hello!"%> egyenértékű a <%Response.Write("Hello!")%> sorral.

Még egy fontos tudnivaló a több részletben beágyazott scriptekről: nem tilos az sem, hogy a script “közepén“ egyszer csak tiszta HTML kód jelenjen meg. Ilyenkor az úgy viselkedik, mintha a kód része lenne, azaz ha az adott szakaszra rákerül a vezérlés, az is megjelenik, különben rejtve marad.

<% For i=1 To 10 %>
<center>Hello World!</center>
<% Next %>

A fentiek hatására például a "Hello World!" felirat tízszer íródik ki, az alábbi kódrészlet pedig véletlenszerűen vagy “Egy”-et, vagy “Kettő”-t ír ki (de sosem egyszerre, mint a kettőt!):

<% Randomize ' Fontos, különben nem lenne véletlen! %>
<% If Int(Rnd()*10) > 5 Then %>
<center>Egy</center>
<% Else %>
<center>Kettő</center>
<% End If %>

Így könnyedén szegmentálhatjuk az oldalt. Ha például egy ASP oldalon több minden jelenhet meg, de nem egyidőben, akkor legjobb, ha HTML szerkesztővel létrehozzuk az oldalt, benne az összes opcionális résszel, majd ezeket a részeket utólag “körbeépítjük“ scripttel, ami majd eldönti, hogy az adott szakasz látsszon-e vagy sem. Bár a <% és a %> nem szerepelnek a HTML szabványban, mi bátran használjuk, hiszen ezek a jelek soha nem hagyják el a kiszolgálót. Ha az ASP script által generált kimenő kód HTML-kompatíbilis, nyugodtak lehetünk abban, hogy mi minden tőlünk telhetőt megtettünk a szabványos kommunikáció érdekében.

Konstansok, változók

A programozási feladatok megoldása során, nélkülözhetetlen az alapvető adatstruktúrák, adatszerkezetek megismerése. Ilyen alapvető adatelemek a konstansok, változók, illetve a rekord adatszerkezet. Az ASP sajátosságából adódóan, mivel az adatbázis-kapcsolatot objektumként kezeli, fontos megemlíteni az objektumváltozó fogalmát is. Az alábbiakban ezeket az adatstruktúrákat ismertetjük.

CONST utasítás

Konstansokat deklaráló utasítás.

Szintaxis

CONST konstansnév [AS típus] = kifejezés

A CONST utasítás a következő részekből áll:

Elem

Leírás

konstansnév

A konstans neve, amely követi a szabványos változó elnevezési konvenciót.

típus

A konstans adattípusa

kifejezés

Szöveg vagy egyéb konstans, illetve bármilyen kombináció beleértve az aritmetikai és logikai műveleti jeleket is.

Példa:

CONST db AS integer = 25

DIM utasítás

Változókat deklarál és lefoglalja a számukra szükséges tárhelyet.

Szintaxis

DIM változónév[([tömbindex])] [AS típus] [, változónév[([tömbindex])] [AS típus]]...

A DIM utasítás a következő részekből áll:

Elem

Leírás

változónév

A változó neve, amely követi a szabványos változó elnevezési konvenciót.

tömbindex

A tömbváltozó dimenziója, legfeljebb 60 dimenzióig deklarálható. A tömbváltozó szintaktikája a következő:
[alacsonyabb To] magasabb [, [alacsonyabb To] magasabb] . . .
Ha nincs meghatározva az alsó érték, akkor az alsó érték nulla.

típus

A változó adattípusa.

Példa:

DIM db AS integer = 25

TYPE utasítás

A felhasználó által definiált, egy vagy több elemet tartalmazó, rekord adattípus létrehozásához használt utasítás. 

Szintaxis

TYPE változónév
 elemnév
[([tömbindex])] AS típus
 [elemnév [([tömbindex])] As típus]
 . . .
END TYPE

A TYPE utasítás a következő részekből áll:

Elem

Leírás

változónév

A felhasználó által definiált típus neve, amely követi a szabványos változó elnevezési konvenciót.

elemnév

A felhasználó által definiált típus elemének a neve. Az elem nevek szintén követik a szabványos változó elnevezési konvenciót, azzal a kivétellel, hogy kulcsszavak is használhatók.

tömbindex

A tömbváltozó dimenziója. Ha nincs meghatározva az alsó érték, akkor az alsó érték nulla.

típus

Az elem adattípusa.

Példa:

TYPE Személy
 Név
AS String
 
Beosztás AS String
END TYPE

DIM Dolgozók(1 To 100) AS Személy

SET utasítás

Objektum és annak tulajdonságainak változóhoz történő hozzárendelése. Ezt a változót nevezzük objektumváltozónak.

Szintaxis

SET objektumváltozó = {objektumkifejezés | Nothing}

A SET utasítás a következő részekből áll:

Elem

Leírás

objektumváltozó

A változó neve. amely követi a szabványos változó elnevezési konvenciót.

objektumkifejezés

A megadott objektumot és annak tulajdonságait társítja az objektumváltozóhoz.

Nothing

Megszünteti az objektumváltozó–t. Ha Nothing-ot rendelünk az objektumváltozóhoz az felszabadítja az összes rendszer és memória erőforrást amely kapcsolatban volt az előzőleg társított objektummal.

Példa:

<%SET Conn = Server.CreateObject("ADODB.Connection")%>

Eljárások, függvények

A struktúrát programozás nélkülözhetetlen elemei az eljárások és függvények. Különösen akkor előnyös az alkalmazása, ha egy bizonyos kódrészletet többször, több oldalon is használni szeretnénk. Ilyenkor elég a script-et egyszer megírni egy .scr fájlban és a többi oldalon, a korábbi fejezetbe leírtaknak megfelelően (Az ASP kódok beágyazása) csak hivatkoznunk kell a kódrészletet tartalmazó .scr fájlra.

SUB utasítás

Eljárás deklarálásához használható utasítás.

Szintaxis

SUB név [(paraméterek)]
 [utasítások]
 [EXIT SUB]
 [utasítások]
END SUB

A SUB utasítás részei:

Elem

Leírás

név

Az eljárás neve, amely követi a szabványos változó elnevezési konvenciót.

paraméterek

A változók listája, amelyek átadódnak az eljárásnak híváskor. A változókat vesszővel kell elválasztani.

utasítások

Az utasítások bármilyen csoportja, amely végrehajtható az eljáráson belül.

Példa:

SUB Megnyit
 Set Conn = Server.CreateObject("ADODB.Connection")
 Conn.ConnectionString ="File Name=" & Server.MapPath("db.udl") & ";"
 Conn.Open
END SUB

FUNCTION utasítás

Függvény deklarálásához használható utasítás.

Szintaxis

FUNCTION név [(paraméterek)] [AS típus]
 [utasítások]
 [név = kifejezés]
 [EXIT FUNCTION]
 [utasítások]
 [név = kifejezés]
END FUNCTION

A FUNCTION utasítás a következő részekből áll:

Elem

Leírás

név

A függvény neve, amely követi a szabványos változó elnevezési konvenciót.

paraméterek

A változók listája, amelyek átadódnak a függvénynek híváskor. A változókat vesszővel kell elválasztani.

típus

A függvény által visszaadott értéknek adattípusa.

Utasítások

Az utasítások bármilyen csoportja, amely végrehajtható a függvényen belül.

kifejezés

A függvény által visszaadott érték.

 

Összeállította:

Ajánlott felbontás:
800 x 600