1. Active Server Pages Microsoft® Active Server Pages (ASP) on serveripoolne laiendus skriptide abil dünaamiliste ja interaktiivsete WWW-rakenduste tegemiseks. Sellise lahenduse puhul ei oma tähtsust klientprogrammi võimalused (erinevatest skriptidest arusaamine/ java-toetus jne), vaid server teeb kogu töö skriptidega ja genereerib HTML-lehe, mis edastatakse klientprogrammile. 1.1 Hüpertekst areng 1.1.1 Staatiline mudel WWW oli algselt mõeldud staatilise linkide süsteemina (ja paljud WWW-serverid jäävadki sellisteks): HTML-lehti tuleb käsitsi muuta, et mingisuguseid (ka kõige väiksemaid) muutusi sisse viia. Klientprogramm kasutab spetsiaalset Interneti protokolli (Hypertext Transport Protocol - HTTP) HTML-lehtede saamiseks WWW-serverilt. Server, saanud kätte päringu, saadab vastava lehe klientprogrammile, mis teisendab selle väljastatavasse formaati. Kuigi see mudel võimaldab juurdepääsu hästi kujundatud lehtedele, ei võimalda see kiiresti muutuvas infoajastus kiiret info muutmist. 1.1.2 Dünaamiline mudel Dünaamilised liidesed nagu CGI (Common Gateway Interface) ja ISAPI (Internet Server Application Programming Interface) lubavad teha ajas muutuvaid (dünaamilisi) dokumente. Selle mudeli korral küsib klientprogramm WWW-serverist konkreetset rakendust, mitte HTML-lehte. Server käivitab rakenduse, mis väljastab HTML-lehe, mille server saadab klientprogrammile (rakendus võib näiteks lugeda klientprogrammi poolt saadetud infot, seda töödelda või lihtsalt väljastada mingeid ajas muutuvaid andmeid). Selliste rakenduste miinuseks on, et neid on raske teha või muuta, kuna see nõuab rakenduse eelkompileerimist. Sellised rakendused ei ole integreeritud HTML-i, vaid nende tegemiseks on hoopis teine lähenemine kui staatilise HTML-i korral. 1.1.3 Dünaamiline HTML Kui staatilise HTML-i võimalustest jääb väheseks ja CGI-programmide tegemiseks pole võimalust (vajalikke oskusi), võib kasutada nn. dünaamilist HTML-i. Sellel puhul on skriptid HTML-i laienduseks, st. skript on lülitatud HTML-teksti sisse ja klientprogramm käitub vastavalt skripti juhenditele. Enamlevinud skriptikeeleks, mida HTML-is kasutatakse, on JavaScript, kasutatakse ka Jscripti ja VBScripti. Kuid selline lahendus seab suured nõudmised klientprogrammile ja tavaliselt esitatakse ka kasutaja arvutile suuremad nõudmised. Et saavutada paremat interaktiivsust, tuleb kasutada Java-rakendusi, mis loovad küll suuremad võimalused, aga nõuavad samas ka suuremaid ressursse kasutajalt. 1.1.4 ASP-i mudel ASP-i mudelis saab käivitatavad skriptid lülitada otse HTML-i. Sellisel moel muutub HTML-i arendamine ja skriptide kirjutamine üheks, mis lubab keskenduda HTML-lehtede kujundamisele lisades dünaamilised elemendid vastavalt vajadusele. Ühe sellise lähenemisviisi on kasutusele võtnud firma Netscape® oma WWW-serverite loomisel. Enamkasutust on leidnud firma Microsoft® toode (WWW-serveri laiendus) Active Server Pages. Suurimaks plussiks ASP-i korral on selle hind, õigemini toote vaba kasutus (tasuta saadaval). ASP-rakendused on: * täielikult integreeruvad HTML-lehtedega. * lihtsalt programmeritavad, käsitsi kompileerimine (ja linkimine) puudub. * objekt-orienteeritud ja laiendatavad ActiveX serveri komponentidega. ASP-skriptides võib kasutada suvalist skriptikeelt, kui leidub vastav skripti interpretaator (näiteks PerlScript). ASP toetab vaikimisi kahte skriptikeelt: Microsoft® Visual Basic® Scripting Edition (VBScript) ja JScript. Vaikimisi kasutatakse VBScripti. Samuti võib kasutada serveri ActiveX komponente. ASP alustab tööd, kui klientprogramm soovib näha mõnda .asp-laiendiga faili (asp-fail) WWW-serverist. WWW-server kutsub välja ASP-i, mis loeb küsitud asp-failist HTML-i ja skripti; täidab selles olevad skripti käsud, koostab lõpliku HTML-lehe ja saadab selle klientprogrammile. ASP mudel ASP töötab kõige paremini firma Microsoft® WWW-serverite puhul. Nendeks on: * Microsoft® Internet Information Server versioon 3.0 või uuem Windows NT Serveril * Microsoft® Peer Web Services versioon 3.0 või uuem (alates versioonist 4.0 kannab nime Personal Web Server) Windows NT tööjaamal * Microsoft® Personal Web Server Windows 95-l Ka teistele WWW-serveritele toodetakse ASP-i toetust. 1.2 ASP-skriptid 1.2.1 Mis on ASP-fail? ASP-fail on tekstifail, mis võib sisaldada suvalist kombinatsiooni järgnevatest osadest: * Tekst * HTML elemendid * Skripti käsud. Seega on lihtsaim viis ASP-faili tekitamiseks HTML-failil htm(l)-laiendi asp-laiendiga (.asp) asendamine. Klientprogramm näeb tulemusena täpselt sama, mis .htm(l)-laiendi korral. Tegelikult alustab ASP tööd kui lisada HTML-i ka skripti käske. Skript on rida käske, mis võivad näiteks: * Omistada väärtusi muutujatele. * Käskida WWW-serveril saata midagi (näiteks mingi muutuja väärtuse) klientprogrammile. * Koondada käske protseduurideks. Skripti käivitamisel (klientprogrammi pöördumisel ASP-faili poole) täidetakse käsud interpretaatori poolt ja klientprogrammile saadetakse HTML. 1.2.2 ASP-i süntaks ASP ei ole programmeerimiskeel, ta pigem loob keskkonna mis võimaldab sisaldada HTML-is skripte. HTML elemendid on tavalisest tekstist eraldatud eraldajatega (sümbolid < ja >), ASP-i puhul peavad aga eraldajad skripti osa eraldama nii tekstist kui HTML elementidest. Selleks kasutatakse <% skripti alguses ja %> skripti lõpus. Spetsiaalsed eraldajad on väljundi saamiseks (näiteks mingi muutuja väärtuse saatmiseks klientprogrammile): <%= alguses ja %> lõpus. Skript võib sisalduda suvalises kohas HTML-i sees. Seega on õige: Kell on <%=Now()%>. Toodud näites näeb klient ainult lauset, mis sisaldab funktsiooni Now poolt tagastatud väärtust. Selleks, et täpsustada skriptikeelt, milles skript on kirjutatud, tuleb kasutada HTML elemente koos atribuudiga LANGUAGE (sellega teatatakse ASP-le skripti keel). Et eristada klientprogrammis käivitatavaid skripte serveris käivitatavatest, tuleb määrata ka atribuut RUNAT=SERVER (sellega teatatakse ASP-le, et skript tuleb käivitada serveris). Tuleb aga meeles pidada, et selle meetodiga saab defineerida ainult protseduure, et neid siis välja kutsuda. Kui soovitakse muuta kogu ASP-faili skriptikeelt (keelt, mida kasutatakse eraldajate <% ja %> vahel), tuleb ASP-faili alguses määrata ASP-i direktiiv <%@ LANGUAGE %>, mille süntaks on järgmine: <%@ LANGUAGE=Skriptikeel %> Skriptikeel tähistab keelt, mida selles ASP-failis kasutatakse. ASP võimaldab ASP-failidess sisestada teisi faile. Tavaliselt kutsutakse seda metoodikat Server Side Includes. ASP-is on realiseeritud selle metoodika üks käsk/element: #INCLUDE, mille süntaks on: Selle meetodiga sisestatakse fail (mille nimi on antud atribuudiga failinimi) ASP-faili enne kui ASP töötleb faili. Võtmesõna VIRTUAL võimaldab ette anda faili virtuaalse tee (see on tee, mis on määratud WWW-serveris füüsilisele teele vastavaks). Võtmesõna FILE lubab ette anda faili füüsilise tee jooksvast kataloogist alates. 1.3 ASP-rakendused ASP-rakendus koosneb (virtuaalsest) kataloogist ja kõikidest selles olevatest failidest ja alamkataloogidest. ASP-rakendus võib olla üks ASP-lehekülg, mis võib sisaldada mitmeid dünaamilisi lehti (eri kasutajate jaoks erinev leht, eri klientprogrammi jaoks erinev leht jm) või see võib koosneda mitmetest (omavahel loogiliselt seotud) lehtedest. Kasutades ASP-rakendusi saab säilitada kasutaja seisu (informatsiooni hoidmine kasutaja kohta), mida on kahte tüüpi: * Rakenduse seis, mille korral säilitatakse kogu rakenduse kohta käivat infot ja see info on kättesaadav kõikidele rakenduse kasutajatele. * Sessiooni seis, mille korral säilitatakse konkreetse kasutaja seis rakenduse kasutamise ajal. Säilitatav info on kättesaadav ainult ühele kasutajale. Sessiooni seisu on võimalik säilitada kasutajate kohta, kes kasutavad küpsiseid toetavat klientprogrammi. ASP-i objektid Application (rakenduse info hoidmiseks ja kõikide kasutajate vahel jagamiseks) ja Session (konkreetse kasutaja info hoidmiseks kui, see kasutaja rakendust kasutab) võimaldavad neid seise hallata. 1.3.1 Fail Global.asa Igal ASP-rakendusel võib olla üks fail nimega Global.asa (laiend asa tuleneb väljendist Active Server Application), mis peab asuma rakenduse peakataloogis. ASP loeb faili Global.asa, kui: * peale WWW-serveri käimapanekut toimub esimene pöördumine mõne rakenduse ASP-faili poole. * kasutaja, kellel ei ole aktiivset selle rakenduse sessiooni, pöördub mõne rakenduse ASP-faili poole. Fail Global.asa võib sisaldada protseduure juhtimaks rakenduse ja sessiooni töölealgamist ja lõppemist: * mida teha rakenduse ja/või sessiooni alguses (vastavad protseduurid on Application_OnStart ja Session_OnStart). * mida teha rakenduse ja/või sessiooni lõppedes (vastavad protseduurid on Application_OnEnd ja Session_OnEnd). * objektide elemente (esindajate loomist). 1.3.2 Sessioonid Sessioon luuakse järgnevatel viisidel: * kasutaja pöördub ASP-faili poole rakenduses, mille spetsiaalfailis Global.asa on defineeritud protseduur Session_OnStart. * ASP-failis salvestatakse mõni väärtus sessioonimuutujasse (Session-objekti muutujasse). * kasutaja pöördub ASP-faili poole rakenduses, mille spetsiaalfailis Global.asa on loodud mõni sessiooni-objekt (elemendiga OBJEKT). WWW-server loob sessiooni (ehk siis Session-objekti), kui sessiooni mitteomav kasutaja pöördub mõne rakendusse kuuluva ASP-lehe poole. Protseduuri Session_OnStart süntaks on järgmine: ScriptLanguage tähistab skriptikeelt, milles vastav protseduur kirjutatud. Selles protseduuris on kõik ASP-i sisseehitatud objektid kättesaadavad. Sessiooni loomisel genereeritakse igale kasutajale vastav numbriline identifikaator (SessionID), mille kaudu ASP (ja programmeerija ehk ASP-rakenduse looja) tunneb konkreetset kasutajat. Klientprogrammile saadetakse spetsiaalne küpsis (mida kasutaja pool ei säilitada, kuna küpsis kaotab koheselt oma kehtivuse), mille alusel genereeritakse identifikaator. Seepärast pole võimalik Session-objekti luua kasutajatele, kelle klientprogramm ei toeta küpsiseid. Sessiooni identifikaatori poole saab pöörduda (ainult lugemiseks) Session-objekti omaduse Session.SessionID kaudu. Session-objekti võib salvestada muutujaid (näiteks kasutaja info säilitamiseks). Muutujate säilitamise süntaks on järgmine: Session(muutuja) = väärtus muutuja võib olla tavaline string või string-tüüpi muutuja. Samuti saab salvestada objekte, kui väärtus on objekti loomise käsk. Session-objekt hävitatakse, kui sessioon kaotab kehtivuse (kasutaja ei pöördu teatud aja jooksul ühegi rakenduse ASP-faili poole) või kui sessioon lõpetatakse. Vaikimisi kehtib sessioon 20 minutit, aga seda saab ASP-failides muuta, kasutades Session-objekti omadust Session.Timeout (määratakse minutites). Objekti süntaks on järgmine: Session.Timeout [ = Minutid ] Sessiooni lõpetamiseks on loodud Session-objekti meetod Abandon, mille süntaks on järgmine: Session.Abandon Tegelikult hävitatakse Session-objekt alles pärast ASP-faili, milles lõpetus välja kutsuti, käskude täitmist. Seega on võimalik samal lehel kasutada kõiki Session-objekti muutujaid. Sessiooni lõpetamisel kutsutakse välja protseduur Session_OnEnd, mida saab defineerida spetsiaalfailis Global.asa. Protseduuri süntaks on järgmine: Selles protseduuris on kättesaadavad ainult järgmised ASP-i sisseehitatud objektid: Application, Server ja Session st. suhtlemine kasutajaga on selleks ajaks lõpetatud. 1.3.3 Rakendused Rakenduse objekt luuakse, kui peale WWW-serveri töö alustamist esimene kasutaja pöördub mõne ASP-faili poole rakenduses. Järgmiste pöördumiste korral rakendust ei looda, vaid see säilub kuni WWW-serveri seiskamiseni. Selleks, et rakenduse alguses midagi teha (nt. kõikidele kasutajatele mõeldud muutujate algväärtustamine), tuleb failis Global.asa defineerida protseduur Application_OnStart. Protseduuri Application_OnStart süntaks on järgmine: Selles protseduuris on kättesaadavad ainult rakenduse (Application) ja serveri (Server) sisseehitatud objektid. Rakenduse tasemel saab näiteks WWW-serveri administraator saata kõikidele kasutajatele päevakohast infot. Samuti saab rakenduse tasemel kasutada loendurit külastajate üle arve pidamiseks (rakenduse alguses võib loenduri nullida, külastajate andmebaasis algseise taastada jm.). Rakenduse tasemel olevate muutujate poole saab pöörduda suvalises rakenduse ASP-failis. Muutujate poole pöördutakse järgmise süntaksiga: Application(muutuja)[ = väärtus] muutuja võib olla tavaline string või string-tüüpi muutuja. Samuti saab salvestada (serveri) objekte, kui väärtus on objekti loomise käsk. Selleks, et kuskil rakenduses (näiteks ASP-failis) rakenduse muutujate (objektide) poole pöörduda, kartmata, et keegi teine (mõne ASP-faili kaudu) samal ajal selle muutuja/objekti väärtust muudab, on loodud kaks funktsiooni (meetodit): Application.Lock keelab teistel rakenduse muutujate väärtusi muuta. Application.Unlock lubab teistel rakenduse muutujate väärtusi muuta. Lock-meetodiga pääseb rakenduse muutujaid muutma ainult see ASP-fail (koos konkreetse kasutajaga), milles Lock meetod välja kutsuti. Unlock-meetod võimaldab teistel ASP-failidel muuta rakenduse muutujaid. Kui Unlock-meetodit välja ei kutsuta, vabastatakse rakenduse muutujad ASP-faili lõppedes või sessiooni lõppedes (vt. Sessioonid). WWW-serveri seiskamisel lõpeb ka rakenduse töö. Et rakenduse lõppedes mingeid toiminguid läbi viia, võib failis Global.asa defineerida protseduuri Application_OnEnd. Selle süntaks on järgmine: Selles protseduuris on kättesaadavad ainult rakenduse (Application) ja serveri (Server) sisseehitatud objektid. Ainus erand on Server-objekti meetod MatPath, mida pole lubatud siin välja kutsuda. Seega, kui WWW-server lõpetab normaalselt töö, otsitakse kõikide rakenduste failidest Global.asa protseduure Application_OnEnd ja täidetakse neis olevad käsud.