BJamesB ima dosti spraševanja in razsvetli veliki misterij
Več vprašanj je padlo v zadnjem času na temo guestbookov, indeksov, trgovin in ostalih interaktivnih zadevicah, ki jih lahko dosegamo preko vsemreže. Ker sem rahlo sit venomerponavljajočihsevprašanj, sem za tomesečni članek sklenil, da z dobrohotnim usmiljenjem, ki mi je lastno, namenim nekaj besed izobraževanju zvestih bralcev o tej posvečeni tematiki.
Statične spletne strani dodobra poznamo. To so html dokumenti, ki jih je avtor kreiral in naložil na strežnik, tako da lahko od tam potujejo preko žice do deskarjev vsepovsod po svetu. Statične strani, kot že ime pove, se ne spreminjajo. Ostajajo iste, ne glede na to kolikokrat jih pogledamo, pač dokler se avtor ne odloči in jih spremeni. V tem našem interaktivnem svetu pa je to tudi njihova največja pomanjkljivost. Ker so predisponirane, se ne morajo odzivati na akcije uporabnikov, ki je le statični subjekt – pasivni opazovalec nemih prič preteklosti/sedanjosti/prihodnosti/neverlanda. Edina interakcija, ki jo dinamične strani omogočajo je izbira povezav, ki jih je avtor kodiral vanje. Vseskupaj pa to pomeni, da je stran neglede na to, ali jo obiščemo prvič ali tisočič, enaka, ter da nam za nadaljnje raziskovanje omogoča le tiste linke, ki smo jih lahko sledili tudi prejšnjič enkrat ali tisočkrat. Vsi gifi, glasbena ozadja ali migajoče slikice so le kozmetika na telesu mrtveca, ki je postavljen na ogled žalujočim ostalim. Tega pa jasno svojemu homepagu ne privoščimo, kajne?
Rešitev je v dinamičnih spletnih straneh. In čim rečemo “dinamične” to pomeni, da se nekaj dogaja, da je nekaj v premikanju/spreminjanju/interakciji oziroma enostavno povedano, nasprotno statičnemu tako kot je dan v nasprotju z nočjo. Dinamične strani kreira strežnik na podlagi programa, ki teče na njem in se odziva na akcije uporabnika.
Dinamične spletne strani so lahko vse, kar si želimo. Spreminjajoči se indeksi povezav, baze malih oglasov, internet trgovine, guestbooki, igre, spremenjljive knjige, sledilci gibanja uporabnika po strežniku… You name it, we got it, baby! Da pa ne zaplavamo prehitro v globoko vodo metafizike si moramo pod noge najprej nasuti prijetne mivke tropskih plaž, ki nas bo počasi vodila proti prostemu lebdenju modrosti.
Teorija#1: kaj je dinamična spletna stran
Kot že povedano, se dinamična stran generira na zahtevo obiskovalca. Njena značilnost torej je, da ne obstaja v obliki html dokumenta nekje na strežniku, ampak da html izoblikuje program, ki pošlje podatke v html obliki uporabniškemu brkljalniku. Hitro torej ena slika:
slika:delovanje dinamične spletne strani
Če lepo sledimo puščicam od začetka do konca vidimo najprej brkljalnik, v katerem so na voljo polja za vpis imena in priimka in gumb “Pošlji” ki pošlje podatke nazaj strežniku. Tako obliko .html strani imenujemo form in si jo bomo podrobneje pogledali v tretji točki teorije. Gumb je povezan z URLjem programa, ki naredi sprogramirano akcijo, v našem primeru pozdrav obiskovalca. Navadno so vsi programi, namenjeni dinamičnim stranem spravljeni v posebnem direktoriju, ki ima največkrat ime cgi-bin oziroma scripts. Odkje ime cgi-bin? Enostavno, programom, ki kreirajo dinamične strani pravimo cgi programi (CGI=…) bin pa izhaja iz binaries, torej programi. WWW strežnik iz URLja sklepa, da mora v našem primeru pognati program PRIJ.DLL, ki se nahaja v direktoriju scripts. Zatorej se ne obremenjuje pretirano, temveč posreduje podatke, ki mu jih je URL sporočil temu programčku in odpre kanal, po katerem program svoje rezultate sporoči nazaj brkljalniku. Dejansko torej komunicirata brkljalnik in cgi program brez intervencije www strežnika – ta igra le vlogo posrednika med njima. Programova naloga je, da na podlagi prejetih podatkov (spremenjljivk) izdela primerno HTML formatiran dokument, ki ga bo brkljalnik znal pokazati.Tako, in to je v bistvu tudi vsa umetnost dinamičnih strani.
Primer vračila cgi-programa brkljalniku
Teorija#2: kakšni so cgi-programi in v čem so napisani
CGI programi tečejo na strežniku in so torej odvisni od tipa procesorja in operacijskega sistema, ki teče na strežniku. Načeloma so lahko programi v perlu, batch jeziku ali pa so to samostojni izvajalni programi. Vsak tip www strežnika predpisuje, kako se mora program obnašati, na kakšen način se posredujejo podatki med programom in a predpisuje, kako se mora program obnašati, na kakšen način se posredujejo podatki med www strežnikom in programom, ter kako mora program posredovati podatke nazaj.
CGI programi so bili najprej pisani v posebnem programskem jeziku imenovanem perl, ki je še danes osnova večine .cgi skript, ki tečejo na UNIX sistemih. Perl je posebna interpreterska školjka, ki prevaja ukaze programskega jezika v strojni jezik gostitelja. Zaradi tega so perl programi neodvisni od strežnika na katerem tečejo in jih lahko uporabljamo na vsakem www strežniku, za katerega je napisan perl interpreter. Spoznamo jih po končnici .pl.
Primer perl jezika
Perl pa ima tudi slabo stran. Kot vsi interpretirani jeziki je počasen. To pa je pri internetu, kjer lahko pričakujemo, da bo precej uporabnikov hkrati posegalo po programu dokaj nerodno. Zaradi tega v zadjem času perl nadomeščajo resni programi, napisani za točno določene strežnike. Navadno so pisani v C-ju ali na Windows platformi v Delphi 2.0 (Delphi 1.0 je neprimeren, saj ne podpira večnitnih programov in 32-bitne kode, potrebne za vse NT strežnike). Programi uporabljajo poseben API (Application Program Interface), ki je sestavljen iz funkcij za prenos podatkov v in iz uporabniškega progama. Poleg UNIX APIjev sta najznačilnejša NSAPI, ki ga uporabljajo Netscape strežniki ter ISAPI, ki ga uporabljajo Microsoft strežniki. Spoznamo jih po končnici .dll ali .exe.
Ti programi so težji za razvoj, saj je potrebno skrbeti za njihovo stabilnost (marsikateri strežnik je že obležal pod težo zaciklanega cgi programa), večnitnost (program mora podpirati več hkratnih zahtevkov po izvrševanju in to celo v različnih fazah), ter mora svoje delo opraviti čimhitreje in s čimmanj sistemskega overheada, ki divje porablja čas in resurse.
slika: večnitnost cgi-programa
Teorija#3: posredovanje podatkov od uporabnika do strežnika
Ena izmed glavnih težav pri programiranju dinamičnih spletnih strani je posredovanje podatkov med brkljalnikom in cgi programom. Brkljalnik ima le omejeno možnost posredovanja podatkov, ki je največkrat izvedena s pomočjo formov. Form sicer omogoča več različnih načinov vnosa (npr. vpisno polje za tekstovne spremenljivke, izbirne menuje, radijske gumbe), vendar pa kaj kmalu ugotovimo, da je njihova uporabnost omejena. Dodatna težava nam postane jasna, ko pogledamo format, v katerem brkljalnik sporoča rezultate. Vsak odgovor iz forma se prenese k strežniku v obliki URLja klicanega cgi-programa, ki mu sledijo parametri izbranih spremenjljivk.
slika
primer HTML teksta
Predpostavimo, da imamo form, ki dovoli vpis imena in priimka, vnos starosti ter izbiro prikljubljene barve. Brkljalnik nam bo po uporabnikovem pritisku na gumb pošlji poslal naslednji URL:
http://www.joker.si/scripts/prij.dll?I=Janez&P=Novak&starost=3&B=2
Vidimo, da je URL cgi programa ločen od posredovanih parametrov z znakom ? ter da so posamezni parametri ločeni med seboj z znakom &. Vsi parametri imajo obliko ime_spremenljivke=vrednost_spremenjljivke. Naš program navadno dobi od www strežnika posredovano podatkovno vrstico, torej I=Janez&P=Novak&starost=3&B=2 in naša naloga je, da to vrstico pretvorimo v dejanske spremenjljivke in njihove vrednosti, ki jih bomo nato obdelali.
Ne brkljalnik ne www strežnik ne ohranjata stanja. Vsak klic programa se obravnava kot edinstven. To pa nam prinaša težave, dokler se ne navadimo stanja programa spremljati interno in ga posredovati nazaj kot poseben parameter. Zakaj? Recimo, da želimo od uporabnika v naslednjem koraku zvedeti, kateri pisci so mu v Jokerju najbolj všeč. Jasno bi lahko to naredili že v prvem koraku, a v tem primeru bi bil dokument precej nepregleden. Navadno se temu izognemo tako, da vpeljemo posebno spremenljivko, ji določimo enkratno vrednost in z njo označujemo vse zahtevke tega uporabnika. Tako spremenljivko imenujemo ID in jo v vsakem koraku pošljemo brkljalniku, da jo te la vključi kot del prenašanih parametrov pri naslednjem klicu. Naslednji korak brkljalnika bo torej izgledal tako:
slika
primer HTML teksta
S pritiskom na gumb pošlji dobimo nazaj URL
http://www.joker.si/scripts/prij.dll?ID=00001&BJB=5&QTR=4&ZONE=4&FEBO=3
Parameter ID nam torej ob upoštevanju prej zbranih podatkov označuje, da je omenjeno glasovanje izvršil Janez Novak.
Posredovanje stanja brkljalnika s parametrom ID pa je dokaj neprijazno, saj moramo pri vseh straneh, ki jih posredujemo brkljalniku ta parameter vključiti v HTML kodo forma. Zaradi tega so si brihtne glave izmislile piškotke (cookies), ki so posebna oblika spremenljivke, ki si jo brkljalnik zapomni in se ne prenaša preko mreže. Piškotek je posebna, časovno omejena spremenljivka formata
ime_spremenljivke,vrednost_spremenljivke,čas_trajanja_spremenjljivke
S cgi programom lahko postavljamo in preverjamo vrednost piškotkov. Tako lahko pošljemo cookie z ID parametrom in mu določimo čas trajanja na recimo pet minut. Informacija v piškotku bo tako vidna za ta strežnik pet minut. Piškotke pa lahko tempiramo tudi na dlje časa in tako ugotovimo, ali je uporabnik že kdaj obiskal to stran, oziroma celo kolikokrat jo je obiskal, tako da mu na eni in isti strani vedno prikažemo drugo vsebino. Posredovanje piškotkov med brkljalnikom in www strežnikom je za uporabnika nevidno (razen če ima vkljopljeno opcijo za izpisovanje opozoril ob njihovem prejemu). Če želite torej ob vsakem obisku uporabnika presenetiti z drugačno vsebino vaše strani, vam toplo priporočam, da si pobližje ogledate njihovo delovanje.
Teorija#4: povezava strani s podatkovno bazo
Prave možnosti pa se odprejo, ko cgi program povežemo s podatkovno bazo. Najenostavnejši primer je na primer guestbook, v katerega uporabniki lahko zapisujejo svoja mnenja o strani in prebirajo mnenja drugih. Ker je to v bistvu enostavna podatkovna baza, v katero se dodaja zapis in omogoča njihovo pregledovanje, lahko tako ustvarimo takojšen feedback za uporabnika. Čim bo vpisal in poslal svoj komentar, bo le ta viden.
Težave pri povezavi s podatkovnimi bazami se pojavijo, ko želimo naresti sistem, ki bo odgovarjal v realnem času. Bolj ko je kompleksna in velika podatkovna baza, več časa bo porabljenega za same dostope do podatkov. To pa pomeni, da se bo utilizacija strežnika večala in lahko celo doseže točko, ko zaradi preobremenjenosti strežnik ne bo mogel sprejemati novih uporabnikov. Temeljni prijem je, da poskrbimo za čimhitrejše odzivne čase. To pa navadno ni niti najmanj enostavno in zahteva precejšnje programerske spretnosti.
slika: povezava s podatkovno bazo
Praksa#1: izdelava dinamičnih strani
Za izdelavo dinamičnih strani potrebujete najprej privolitev sistemskega administratorja oziroma webmasterja, ki se bo strinjal s tem, da se igrate na njegovem strežniku. Kot rečeno, dinamične strani lahko požrejo precej sistemskih resursov, slabo programirane aplikacije pa lahko celo zabašejo strežnik do te mere, da ne more več servirati niti statičnih html dokumentov. Preden se torej lotite navdušenega programiranja najprej pripravite teren in argumente, s katerimi boste prepričali po definiciji skeptične webmasterje, da vam dovolijo dostop do posvečenega cgi-bin direktorija.
Pozanimajte se dobro, kater operacijski sistem teče na strežniku in dodobra preštudirajte navodila in napotke za izdelavo cgi skript. Preden naložite svoj program ga dodobra stestirajte. Nič vam ne bo hitreje zapravilo naklonjenosti skrbnika kot (ne)namerno zrušenje obremenjenega www strežnika. Zavedajte se tudi nečesa: pri precej www strežnikih je težko ali skoraj nemogoče odstraniti aktiven cgi program iz delovanja strežnika. To pa zelo oteži razhroščevanje, saj vsak se postopek začne ponavljati v krogu: skompaliraj program, naloži na strežnik, poženi, ugotovi zakaj ne dela, reštartaj www strežnik (beri reset strežnika ali ustavitev www servisov, kar pomeni, da je strežnik nedostopen), popravi program, …
S svojim ustvarjanjem lahko še tako potrpežljivega webmasterja spravite ob živce (verjemite, I have seen it) in zatorej so dinamične spletne strani Valhalla spletnega ustvarjanja. Če vam pač ne uspe, se raje lotite jave.
Lep pozdrav in ostanite še naprej z nami,
BJamesB