|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
Programarea aplicatiilor Web | ||||||
|
||||||
CGI (Common Gateway Interface) m8o16oq PHP (PHP: Hypertext Preprocessor) ASP (Active Server Pages) Cookie-uri Concluzii -------------------------------------------------------------------------------- 1. CGI (Common Gateway Interface) 1.1 Programele CGI programul scrie datele la iesirea standard (stdout) programul genereaza antete ce permit serverului Web sa interpreteze corect iesirea scriptului (folosindu-se specificatiile protocolului HTTP) Cele mai multe script-uri CGI sint concepute pentru a procesa datele introduse in formulare. Un formular se defineste in HTML folosindu-se tag-uri specifice pentru afisarea continutului si introducerea datelor de catre client (asa cum am vazut in unul dintre capitolele precedente), iar script-ul CGI, executat de server, va prelua continutul acelui formular si-l va prelucra, returnind, eventual, rezultatele. Antetul trimis serverului de catre programul CGI va respecta specificatiile MIME, continind de exemplu Content-type: text/html (document HTML) sau Content-type: image/jpeg (imagine JPEG) ori Content-type: text/plain (text obisnuit). Dupa cum vom vedea mai jos, programului CGI i se vor transmite in diverse variabile de mediu sau in linia de comanda informatii referitoare la datele de procesat sau la clientul care a initiat cererea (de exemplu, SERVER_PORT, REQUEST_METHOD, SCRIPT_NAME, QUERY_STRING, REMOTE_HOST etc.) in functie de metoda de transfer utilizata. 1.2 Variabilele de mediu accesate de un program CGI Variabile independente de metoda cererii si setate pentru toate cererile HTTP: SERVER_SOFTWARE furnizeaza numele si versiunea serverului Web ce proceseaza cererea HTTP si ruleaza scriptul CGI. SERVER_NAME da numele de host, alias-ul DNS sau adresa IP a masinii pe care ruleaza serverul Web. GATEWAY_INTERFACE stocheaza versiunea specificatiei CGI folosite (CGI/1.0 ori CGI/1.1 in prezent, CGI/1.2 in viitorul apropiat). Variabile de mediu specifice cererilor ce vor fi transmise spre programul CGI: SERVER_PROTOCOL da numele si versiunea protocolului de transmitere a datelor (e.g. HTTP/1.0). SERVER_PORT furnizeaza portul asociat serverului care va procesa cererea (de obicei, portul 80). REQUEST_METHOD specifica metoda prin care va fi formulata cererea: GET, POST, PUT etc. PATH_INFO furnizeaza informatii suplimentare despre calea de directoare; scripturile CGI pot fi accesate folosind cai virtuale urmate de informatii suplimentare care se regasesc in aceasta variabila. PATH_TRANSLATED ofera o versiune translatata a lui PATH_INFO care asociaza cailor virtuale nume de directoare reale, asa cum se gasesc pe calculatorul pe care ruleaza serverul Web. SCRIPT_NAME desemneaza calea virtuala pina la scriptul ce va fi executat. QUERY_STRING contine toate informatiile de dupa ? din URL-ul ce refera scriptul CGI, informatii ce vor trebui decodificate de acel script. REMOTE_HOST indica hostul care a formulat cererea (calculatorul care a apelat scriptul CGI prin intermediul unei pagini Web). REMOTE_ADDR furnizeaza adresa IP a clientului care a formulat cererea, asociata adresei simbolice date de REMOTE_HOST. AUTH_TYPE da metoda de autentificare utilizata sa valideze utilizatorul, daca serverul suporta autentificarea utilizatorilor si scriptul este protejat. REMOTE_USER indica numele utilizatorului, daca serverul suporta autentificarea utilizatorilor. REMOTE_IDENT furnizeaza identitatea clientului ce a formulat cererea, asa cum este returnata de demonul identd, conform specificatiilor RFC 931. CONTENT_TYPE indica tipul continutului datelor vehiculate, pentru cererile care au atasate informatii suplimentare, precum PUT sau POST. CONTENT_LENGTH contine numarul de octeti ai datelor trimise de client. Suplimentar, liniile antet (daca exista) receptionate de la client prin intermediul protocolului HTTP vor fi plasate in variabile de mediu avind numele prefixate de HTTP_. Serverul poate exclude liniile antet deja procesate, precum Authorization, Content-type sau Content-length. Ca exemple de astfel de variabile, pot fi mentionate: HTTP_ACCEPT indica tipurile MIME pe care le va accepta clientul, fiecare tip fiind despartit de virgula asa cum specifica protocolul HTTP: tip/subtip, tip/subtip. HTTP_USER_AGENT furnizeaza numele si versiunea browserului Web ce a formulat cererea, in formatul general: software/versiune biblioteca/versiune. Urmatorul script Perl va afisa toate variabilele de mediu la care are acces prin intermediul interfetei CGI: #!/usr/bin/perl Variabila predefinita ENV este un tablou asociativ continind perechile (nume de variabila de mediu, valoarea variabilei). Un posibil rezultat al executiei scriptului de mai sus poate fi: HTTP_ACCEPT_LANGUAGE=en 1.3 Exemple CGI /* salut-cgi.c Un alt exemplu, de script bash (Bourne Again Shell) folosit pentru inregistrarea intr-o baza de date a participantilor la Colocviul studentesc de informatica InfoJunior, program conceput de Mirela Petrea: #!/bin/bash # Se trimite intii tipul MIME echo "Content-type: text/html" # Se evalueaza parametrii introdusi in formular de catre utilizator... echo "<P>" echo '<A HREF=" https://www.infoiasi.ro/Ipetrea/infojr.html ">
\ 1.4 Apelarea programelor CGI din formularele HTML De cele mai multe ori, un script CGI va fi apelat din cadrul unui formular HTML la apasarea butonului de trimitere a datelor catre server (butonul submit). Sa presupunem ca avem urmatorul exemplu in care un utilizator introduce prin intermediul unui formular doua numere intregi, iar programul CGI va genera o pagina Web continind maximul dintre ele. Formularul HTML va fi: <form action="https://www.infoiasi.ro/cgi-bin/max.cgi" method="GET"> De exemplu, introducind numerele 7 si 4 si actionind butonul etichetat "Afla maximul", vom primi o pagina Web care va afisa textul "Maximul dintre 7 si 4 este numarul 7" (vezi figurile de mai jos). Presupunind ca in cele doua cimpuri ale formularului (purtind numele nr1 si respectiv nr2) am introdus valorile 7 si 4 respectiv si am apasat butonul submit, navigatorul va trimite, prin intermediul protocolului HTTP, o cerere catre serverul Web aflat la adresa data de URL-ul https://www.infoiasi.ro (adresa este preluata din valoarea atributului action din <form>). Desigur, in loc de o adresa absoluta, putea fi specificata o cale relativa, insemnind ca se foloseste serverul pe care se gaseste pagina continind formularul. Atunci cind se trimite cererea HTTP, navigatorul construieste un URL avind ca sufix informatii despre datele introduse in cimpurile formularului, in cazul nostru https://www.infoiasi.ro/cgi-bin/max.cgi?nr1=7&nr2=4 folosindu-se o codificare speciala. Pentru fiecare cimp al formularului, se va genera o pereche nume_cimp=valoare delimitata de &, iar caracterele speciale (ca de exemplu slash-ul sau apostroful) vor fi inlocuite de codul lor numeric, in hexazecimal, precedat de caracterul procent (%). Spatiile vor fi inlocuite cu semnul plus (+). Pentru a trimite valoarea Cina de la Maxim's se va folosi codificarea Cina+de+la+Maxim%27s. Serverul spre care cererea a fost trimisa (in cazul site-ului www.infoiasi.ro un server Apache) va procesa datele receptionate conform regulilor proprii. Tipic, configuratia serverului defineste unde sint stocate in cadrul sistemului de fisiere directoarele si fisierele CGI. De cele mai multe ori, demonul HTTP (adica serverul Web) ruleaza pe masina sub auspicii de utilizator fictiv (din ratiuni de securitate ca nobody), fisierele sale fiind stocate de obicei in directorul /home/httpd. Aici se afla si directorul cgi-bin unde ar trebui sa fie stocate toate fisierele CGI apelate din cadrul paginilor Web. Asadar https://www.infoiasi.ro/cgi-bin/max.cgi va insemna pentru serverul Web de la adresa www.infoiasi.ro urmatoarea actiune: "executa programul max.cgi aflat la /home/httpd/cgi-bin". Astfel, in loc sa trimita catre navigatorul Web ce a initiat cererea HTTP un document HTML sau un fisier de alt tip, serverul va invoca programul ori scriptul CGI specificat in cadrul URL-ului (in acest caz max.cgi) si-i va pasa datele furnizate de sufix, de dupa semnul intrebarii (adica nr1=7&nr2=4). Actiunea de invocare va avea o semantica diferita in functie de scriptul sau programul CGI conceput. Pentru un script Perl, serverul va invoca un interpretor Perl (in cazul Apache, un modul special mod_perl; de fapt, pentru a permite executia de programe CGI, serverul Apache se va folosi de serviciile modulului mod_cgi). Pentru un program executabil (compilat de pilda intr-unul din limbajele C sau C++), serverul va lansa programul ca un proces separat. Extensia de fisier .cgi nu are nici o relevanta in general, dar pot exista diverse reguli de numire a fisierelor CGI executabile dependente de server sau de sistemul de operare pe care ruleaza, asa cum se intimpla la serverul Internet Information Services (IIS) conceput de Microsoft. Procesarea datelor din formularele HTML prin metoda GET Desigur, in functie de limbajul de programare ales pentru conceperea scriptului CGI, datele vor fi accesate via QUERY_STRING si prelucrate. In limbajul C, vom putea folosi functia getenv() aflata in biblioteca standard stdlib. Tot ce mai ramine de facut este sa decodificam valorile din variabila QUERY_STRING. Scriptul CGI in mod uzual va genera date de iesire care vor fi trimise navigatorului Web de catre server, utilizindu-se iesirea standard (stdout): #include <stdio.h> #define CONTENT "Content-type: text/html\n\n" int main(void) Obligatoriu, inainte de a fi expediate alte informatii spre client, scriptul CGI va trebui sa trimita linia Content-type in care se va specifica, folosindu-se tipurile MIME, ce tip de date va primi navigatorul Web (un CGI poate trimite nu numai documente sau fragmente de documente HTML, ci orice altceva: imagini GIF sau JPEG, text obisnuit, arhive ZIP etc). Conform protocolului HTTP, intre cimpul Content-type si restul informatiilor trebuie lasata o linie vida, de aceea am introdus doua caractere "\n". Programul, dupa compilare, va trebui plasat (in cele mai multe situatii) in directorul cgi-bin al serverului Web. Pentru a putea fi accesat, va fi necesar sa poate fi executat de proprietar (de obicei utilizatorul special nobody in UNIX), de grup si de altii (drepturile 755 in UNIX). Dupa instalarea scriptului, orice utilizator din Internet (daca nu sint impuse restrictii de catre administratorul Web) il va putea accesa si executa prin intermediul unui formular HTML. Astfel, scriptul va trebui sa fie capabil sa proceseze orice tip de data si sa semnaleze posibilele erori. De asemeni, orice script CGI va trebui sa nu permita accesarea de date confidentiale de pe masina pe care ruleaza, administratorul Web trebuind sa ia masurile necesare de securitate. Procesarea unui formular prin metoda POST Daca in exemplul anterior, realizam numai o simpla prelucrare care nu afecta in nici un fel starea serverului (nu se modifica nici un fisier de pe server) si cererea de aflare a maximului celor doua numere putea fi trimisa de oricite ori doream fara a genera probleme (exceptind poate consumul unor resurse), in acest caz prin intermediul scriptului se va schimba continutul fisierului vizat, deci si starea serverului. Pentru aceasta vom folosi metoda POST. Ca si la metoda GET, un program CGI are acces la intreg mediul sistemului de operare pe care ruleaza. Pentru formularele utilizind metoda POST, datele pasate scriptului vor putea fi accesate de la intrarea standard (stdin), iar lungimea (in octeti) datelor trimise va fi disponibila in variabila de mediu CONTENT_LENGTH. Desi citirea de la intrarea standard ar putea fi considerata mai simpla decit citirea dintr-o variabila de mediu, exista urmatoarele aspecte pe care trebuie sa le luam in considerare: serverul nu garanteaza ca va trimite toate datele catre scriptul CGI, deci vor trebui citite atitea caractere cite indica variabila de mediu CONTENT_LENGTH, nu mai multe. Formularul prin care se va solicita linia ce va fi adaugata la fisier este: <form action="https://www.infoiasi.ro/cgi-bin/addproj.cgi" methof="POST"> <input name="data" size="50" maxlength="80"> <input type="submit" value="Trimite"> </form> Programul C care accepta datele si le adauga la fisierul proj.txt va fi urmatorul: #include <stdio.h> #define MAXLEN 80 /* numele fisierului */ /* functie de decodificare a datelor pasate programului CGI */ void unencode(char *src, char *last, char *dest) /* functia principala */ int main(void) /* scrie Content-type, urmat de setul de caractere (optional) */ printf("%s%c%c\n", Putem scrie un program CGI care sa afiseze continutul fisierului proj.txt. Acest program va fi apelat prin intermediul formularului HTML de mai jos: <form action="https://www.infoiasi.ro/cgi-bin/viewproj.cgi" method="GET"> Programul C este: #include <stdio.h> /* numele fisierului */ /* functia principala */ int main(void) 1.5 Server Side Includes (SSI) Fiecare comanda SSI va putea fi introdusa in paginile Web printr-un comentariu special <--#command -->, unde command este o comanda suportata de specificatia SSI. Din moment ce este inclusa ca si comentariu, navigatorul Web o va ignora, dar va fi procesata pe partea server si comentariul va fi inlocuit cu iesirea acelei comenzi. Fisierele HTML utilizind comenzi SSI vor avea extensia .shtml in loc de .html, dar aceasta conventie nu este obligatorie. Pentru ca in documentele HTML sa se poate executa comenzi SSI, chiar daca ele nu au extensia .shtml, in fisierul de configurare a serverului Web (httpd.conf pentru Apache) sau in cadrul fisierului .htaccess (care va fi plasat in directorul unde sint stocate paginile Web) va fi inserata linia: AddType text/x-server-parsed-html .html .htm In fisierul de configurare httpd.conf administratorul Web va trebui sa includa o linie Allow Includes pentru a permite interpretarea comenzilor SSI. Daca din motive de securitate nu se doreste executia comenzii SSI exec (vezi mai jos), atunci se va include linia Allow IncludesNoExec. Desigur, serverul se poate configura astfel incit doar anumitor documente sa li se permita apelarea de scripturi CGI ori de comenzi SSI. Comenzile SSI uzuale sint urmatoarele: echo Cu ajutorul lui echo pot fi afisate diverse informatii preluate din variabilele de mediu, precum data si timpul curent, adresa IP a clientului care vizualizeaza pagina, tipul de navigator folosit etc. Iata citeva exemple: <p>Data si timpul sint Un posibil rezultat al comenzilor echo de mai sus este ilustrat de urmatoarea figura: <a href="<!--#echo var="HTTP_REFERER" -->">Inapoi</a> fsize Va furniza lungimea unui fisier existent pe server. Lungimea acestei pagini Web este: <!--#fsize file="web6.html" --> flastmod Va returna data si timpul celei mai recente modificari a unui fisier specificat. Ultima actualizare a avut loc <!--#flastmod file="web6.html" --> config Este utilizata la diverse configurari SSI. De exemplu, pentru a configura afisarea datei, vom folosi o constructie de genul: <!--#config timefmt="%a %d %b %y" --> unde %a indica numele abreviat al zilei saptaminii, %d specifica ziua, %b indica numele abreviat al numelui lunii, %y furnizeaza numarul anului (ultimele doua cifre). Pentru timp, putem folosi %H ora curenta (de la 0 la 23), %M minutele, %S secundele sau %T timpul curent ca %I:%M:%S:%p, in care %I indica ora (de la 1 la 12), iar %p va fi a.m. ori p.m.. exec Probabil cea mai folosita comanda SSI, va rula un program CGI pe server, iar rezultatul va fi plasat in locul invocarii lui exec. Programul CGI va trebui sa aiba setate permisiunile de executie. Un exemplu Scriptul CGI care afiseaza citatul este conceput in Perl si va fi numit quotes.pl, fiind executat printr-o comanda SSI din pagina Web: <html> Dam in continuare sursa Perl a scriptului CGI (denumit quotes.pl): #!/usr/bin/perl # variabile globale include Aceasta comanda permite includerea unui fisier (de orice tip, in mod uzual text) in cadrul unei pagini Web, fiind utila pentru generarea de antete si note de subsol fara a folosi scripturi CGI ori putind fi folosita ca alternativa la exec, in cazul in care exec nu este permisa din ratiuni de securitate. <blockquote>Asa cum se afirma in cuvintul de deschidere: 2. PHP (PHP: Hypertext Preprocessor) PFP (in versiunea curenta PHP 4.0) este un pachet puternic care ofera un limbaj de programare accesibil din cadrul fisierelor HTML, limbaj asemanator cu Perl sau C, plus suport pentru manipularea bazelor de date intr-un dialect SQL (dBASE, Informix, MySQL, mSQL, Oracle, PostgreSQL, Solid, Sybase etc.). De asemeni, PHP suporta incarcarea fisierelor de pe calculatorul client: upload (standard propus de E.Nebel si L.Masinter de la Xerox, descris in RFC 1867) si ofera suport pentru cookies (mecanism de stocare a datelor in navigatorul client pentru identificarea utilizatorilor, propus de Netscape). Aceasta aplicatie este disponibila gratuit pe Internet, pentru medii Unix si mai nou pentru medii Windows (inclusiv sursele), integrindu-se in popularul server Apache. Istoria PHP-ului incepe la sfirsitul anului 1994, cind Rasmus Lerdorf dezvolta prima versiune, ca proiect personal. PHP este facut public in debutul anului 1995 sub denumirea Personal Home Page Tools, fiind considerat un analizor simplist care interpreta citeva macrouri ce puteau fi incluse in cadrul documentelor HTML, permitind contorizarea accesului la paginile Web sau accesarea unei carti de oaspeti (guestbook). Analizorul a fost rescris in mijlocul aceluiasi an si denumit PHP/FI versiunea 2.0, unde FI era o alta aplicatie scrisa de Rasmus Lendorf, un interpretor de formulare HTML. A fost adaugat si suportul pentru bazele de date mSQL si astfel PHP/FI a inceput sa aiba succes, fiind disponibil gratuit pe Web. La sfirsitul lui 1996, se estima ca PHP/FI era utilizat de cel putin 15000 de site-uri Web, iar in anul 1997 numarul lor era de 50 de mii. Programatorii Zeev Suraski si Andi Gutmans rescriu analizatorul PHP si noua aplicatie formeaza nucleul versiunii PHP 3 care a inclus o parte din vechile surse PHP/FI 2.0. Relativ recent, la inceputul anului 2000, a fost facuta publica versiunea PHP 4.0, utilizind puternicul motor de scriptare Zend si oferind suport nu numai pentru serverul Apache, ci si pentru alte servere Web. Se estimeaza ca numarul de site-uri folosind PHP este de peste un milion. 2.1 Limbajul PHP Un exemplu <form action="/cgi-bin/php.cgi/Iuser/display.html" method="post"> <input type="submit"> </form> Se cer utilizatorului numele si virsta care vor fi procesate de programul (scriptul) PHP continut in fisierul display.html. Acesta ar putea contine: <? if ($virsta>50); echo "<p>Salut $nume, esti virstic...</p>"; elseif ($virsta>30); echo "<p>Salut $nume, esti matur...</p>"; else; echo "<p>Salut $nume, esti tinar...</p>"; endif; Dupa cum se observa, PHP ofera un limbaj script puternic si simplu, accesul la cimpurile formularului realizindu-se prin intermediul unor variabile create automat. Scripturile PHP pot fi incluse in paginile Web in diferite moduri, asa cum arata exemplul de mai jos: 1. <? echo ("cea mai simpla cale de introducere...\n"); ?> 3. <script language="php"> echo ("anumite editoare nu accepta tag-uri necunoscute"); Comentariile pot fi incluse in stilul comentariilor din limbajele C, C++ sau shell-urile UNIX. In PHP exista de asemeni o multitudine de functii predefinite: matematice de conversie de manipulare a sirurilor de caractere de prelucrare a tablourilor de acces la resursele sistemului de operare si de lucru cu fisiere de manipulare a bazelor de date privitoare la conexiunile Internet (HTTP, FTP) pentru accesarea fisierelor avind tipuri speciale: PDF, GIF, XML etc. generale 2.2 Exemple <?php Vizualizarea unei colectii de imagini. Utilizatorul are la dispozitie imaginile la rezolutie scazuta (thumbnails) si poate opta sa vizualizeze imaginea dorita la rezolutie inalta. Scriptul PHP este urmatorul: <? // numarul de imagini pe un rind // latimea unui thumbnail // inaltimea unui thumbnail // numarul de imagini pe o linie de tabel ?> <!-- se includ imaginile intr-un tabel --> <? // se cauta in directorul "path" imaginile GIF... S Un script PHP care afiseaza in fereastra navigatorului lista fisierelor .html dintr-un director, atasind la numele acestora si ancore, in plus furnizind lungimea in octeti a fisierului, data crearii si autorul acestuia, daca fisierul respectiv contine un tag <meta name="author" content="...">. Programul este urmatorul: <p>La URL-ul "<tt>https://<?echo $SERVER_NAME ?>/</tt>"
exista urmatoarele fisiere <tt>.html</tt>:</p> O ipostaza a executiei scriptului este data mai jos: Toate paginile din componenta site-ului sint generate dinamic prin utilizarea preprocesorului PHP versiunea 3. Unul dintre modulele implementate contine definitia unei clase (PHP permite programarea orientata pe obiecte, dar pe baza unui model mai simplificat fata de C++/Java) descriind layout-ul unui limbaj de programare oarecare (din perspectiva a ce este nevoie in meniul acestui sit). Instantieri ale acestei clase pentru diversele limbaje de programare sint memorate folosind un vector de limbaje. Separat, exista un alt vector al legaturilor si al descrierilor lor. Prin afisarea acestora cu un anume layout de limbaj ales de utilizator rezulta layout-ul final in care este afisat meniul sitului. Fiecare limbaj si fiecare legatura sint descrise exact o singura data. Adaugarea/eliminarea ulterioara de layout-uri de limbaje de programare sau de legaturi nu necesita nici un fel de modificari conexe. Caracterul complet dinamic al sitului este conferit de asamblarea acestor seturi de date. Alte componente generate in mod dinamic sunt: includerea unor stiluri CSS diferite in functie de browser un formular de selectare a layout-ului cu buton de submit pentru Lynx (care nu implementeaza JavaScript) note de subsol ale unor sectiuni care nu sunt vizibile utilizatorilor din afara infoiasi.ro 3. ASP (Active Server Pages) Scripturile ASP vor rula pe serverul Web - in mod uzual un motor ASP distribuit de Microsoft pentru Windows 9x sau serverul Microsoft Internet Information Server (IIS) pentru Windows NT/2000 - stocate fiind intr-un director special, denumit \InetPub\scripts (similar directorului cgi-bin) si vor putea accesa diverse variabile de mediu transmise de catre server. Paginile Web in mod uzual pe server sint memorate in directorul \InetPub\wwwroot. Exista si diverse implementari ISP pentru diverse versiuni de UNIX (e.g. Instant ASP), Novell sau Lotus Notes/Domino. 3.2 Fisierele ASP ASP poate oferi medii de scriptare si pentru alte limbaje, ca REXX sau Perl. Comenzile script si expresiile de iesire in ASP sint delimitate de <% si %> (in PHP aveam <?...?>). Scripturile pot fi incorporate in fisiere ASP sau pot fi stocate in fisiere externe care vor fi incarcate si rulate pe server: <html> <script runat="server" language="JScript"> function hello_world() A ASP ofera suport partial pentru SSI (Server Side Includes) prin implementarea doar a directivei de preprocesare #include menita sa includa intr-un fisier .asp continutul altuia: <!--#include virtual="nume_fisier"--> Este recomandabil ca fisierele incluse sa aiba extensia .inc, desi sint acceptate orice nume valide de fisiere. Cuvintul cheie virtual specifica faptul ca fisierul este stocat intr-un director virtual, iar daca se foloseste file atunci fisierul este memorat intr-un director relativ la directorul curent. Includerea fisierelor se realizeaza inainte de executia scripturilor din fisierul ASP. Astfel, nu se pot concepe scripturi care sa genereze dinamic numele unui fisier ce va fi inclus ulterior prin #include. Comenzile script si functiile/procedurile trebuie sa fie continute complet intre <% si %> sau tag-urile <script> si </script> ori <object> si </object>. Nu se poate deschide un delimitator de script intr-un fisier ASP care include un fisier unde se inchide acel delimitator. Urmatorul exemplu este gresit: <% for (i = 1 ; i < 10 ; i++) ASP poate fi utilizat pentru modificarea unui script destinat a fi rulat pe partea client de catre un script executat pe server: <script language="JScript"> Desigur, aceasta abordare poate fi realizata si in CGI sau PHP. 3.2 Obiecte ASP predefinite Request preia informatii despre utilizator; Response trimite informatii la utilizator; Server controleaza mediul de executie ASP; Session stocheaza informatii despre sesiunea unui utilizator; Application partajeaza informatii intre utilizatorii unei aplicatii. De asemeni pot fi definite si tag-uri noi care vor fi procesate de catre motorul ASP. 3.3 Obiectul Request QueryString (preia informatii din variabila QUERY_STRING setata de serverul Web), Form (stocheaza valorile cimpurilor unui formular), Cookies (contine informatii referitoare la cookie-uri), ServerVariables (ofera informatii despre variabilele serverului; e.g. SERVER_PORT sau REMOTE_ADDR), ClientCertificate (furnizeaza informatii despre certificatele de autentificare). Exemple <p align="center"> Textul afisat de navigator va fi: Welcome, Sabin Buraga. Your age is 26. Urmatorul fragment de cod VBScript va oferi o pagina Web in limba dorita de utilizator, pe baza consultarii variabilei HTTP_ACCEPT_LANGUAGE furnizata de serverul Web: <% language = Request.ServerVariable("HTTP_ACCEPT_LANGUAGE") if language = "ro" then 3.4 Obiectul Response a trimite informatii direct browserului (Write), a redirecta utilizatorul spre alt URI (Redirect), a controla tipul de date trimis clientului (ContentType), a seta valorile unui cookie (Cookies), a utiliza buffere de date pentru stocarea locala a documentelor sau reimprospatarea continutului (Buffer). Exemplu <% if (!Session("home_page")) 3.5 Obiectul Server Metodele cele mai utilizate sint CreateObject care creeaza o instanta a unei componente oferind un anumit serviciu, URLEncode care codifica un URL conform regulilor prezentate in cadrul sectiunii despre CGI, MapPath asociind o cale virtuala unei cai de directoare fizice. Exemple <!-- Instantierea componentei --> Urmatorul exemplu scris in VBScript citeste dintr-un fisier text o lista de legaturi spre anumite pagini si construieste o pagina Web cu aceste legaturi: <% set links = Server.CreateObject("MSVC.NextLink") count = links.GetListCount("/links/list.txt") 3.6 Obiectele Session si Application Atunci cind vorbim de aplicatii ASP ne referim si la starea acestora, starea constind din instantierea si folosirea ulterioara a doua obiecte: Application (toate informatiile despre o aplicatie sint disponibile tuturor utilizatorilor acesteia, in mod global) si Session (informatiile pot fi accesate doar de un anumit utilizator in cadrul unei sesiuni particulare). Fiecare aplicatie ASP va avea asociat un fisier numit Global.asa (extensia provenind de la Active Server Application) care va fi localizat in directorul radacina al directorului virtual al acelei aplicatii. Acest fisier va fi prelucrat de server fie la o cerere de initializare, imediat dupa ce serverul Web a fost activat, fie cind un anumit utilizator caruia inca nu i-a fost creata o sesiune doreste sa acceseze un fisier .asp al aplicatiei respective. Fisierul Global.asa poate include: proceduri de tratare a evenimentelor de initializare a aplicatiei, a unei sesiuni ori a ambelor; proceduri de tratare a evenimentelor de terminare a aplicatiei, a unei sesiuni sau a ambelor; marcatori <object> care creeaza diferite obiecte (componente ActiveX de obicei). Sesiuni ASP De mentionat faptul ca o sesiune este terminata automat de server daca utilizatorul nu mai acceseaza o pagina a aplicatiei pentru o perioada anumita de timp (e.g. 20 de minute). Explicit, o sesiune poate fi terminata executind metoda Session.Abandon. O aplicatie se termina atunci cind serverul Web este oprit. O sesiune poate incepe in urmatoarele trei maniere: un utilizator nou face o cerere a unui URL corespunzator unui fisier .asp al unei aplicatii; un utilizator stocheaza o valoare intr-un obiect Session; un utilizator cere un fisier .asp al aplicatiei si fisierul Global.asa corespunzator va fi utilizat pentru a se instantia in cadrul unei sesiuni un obiect (definit printr-un <object>). Informatiile vehiculate in cadrul unei sesiuni pot fi facute private, fiind accesibile teoretic numai in acea sesiune. Fiecare sesiune poseda un identificator unic, denumit SessionID, care este trimis clientului pentru a se creea un cookie nepersistent corespunzator sesiunii in cauza. In cadrul acestui cookie vor fi memorate diverse informatii (private) despre sesiune. De fiecare data cind serverul ASP receptioneaza o cerere, se va verifica in antetul HTTP existenta cookie-ului corespunzator identificatorului SessionID. Despre cookie-uri vom discuta in detaliu in unul dintre subcapitolele urmatoare. In cadrul unui astfel de cookie pot fi retinute anumite preferinte ale utilizatorului, valori ale cimpurilor formularelor, date despre browser etc. Stocarea variabilelor intr-un obiect Session se realizeaza in modul urmator: <% Consultarea variabilelor se poate face in maniera de mai jos: <% if Session("Color") = "Green" then %> Urmatorul exemplu de script ASP scris in VBScript numara cite cifre "0" si cite cifre "1" au fost generate aleatoriu la fiecare accesare a paginii Web: <% Fiecare utilizator care acceseaza documentul va avea o sesiune privata, cu propriile sale variabile-contor. Datele sesiunii sint intotdeauna stocate pe server, iar fiecare sesiune are un identificator propriu, memorat intr-un cookie pe masina client. Operatorul & realizeaza concatenarea sirurilor de caractere. Aplicatii ASP Intr-un obiect Application nu se pot memora insa obiectele ASP predefinite. Exemplul de mai jos va genera eroare: <% Pentru a asigura integritatea accesului concurent la resurse comune, Application poseda metodele Lock (previne modificarea proprietatilor obiectului de catre alti clienti) si Unlock (permite ca proprietatile sa fie modificate). Iata un script care poate fi folosit pentru contorizarea numarului de vizite: <% Componentele ActiveX prezente intr-o aplicatie pot avea urmatoarele domenii de vizibilitate: la nivelul aplicatiei Componenta este instantiata o singura data la momentul initializarii aplicatiei si este disponibila tuturor cererilor provenite de la orice client. la nivelul sesiunii Se creeaza o instanta a componentei pentru fiecare sesiune in parte si se distruge la terminarea acelei sesiuni. O sesiune activa va avea o unica instanta a unei componente particulare. la nivelul paginii Componenta se instantiaza pentru procesarea unei pagini de catre un anumit client. Domeniul de vizibilitate implicit este cel situat la nivelul paginii. Declararea unei instante de componenta ActiveX vizibila la nivelul aplicatiei sau la nivelul sesiunii se realizeaza in cadrul fisierului Global.asa prin intermediul tag-ului <object>, ca in exemplul de mai jos: <object runat="server" scope="Application" id="MSVRML2C"
classid="clsid:90A7533D-88FE-11D0-9DBE-0000C0411FC3"> Se defineste in acest mod un control ActiveX de vizualizare a lumilor VRML avind domeniul de vizibilitate situat la nivelul aplicatiei si fiind rulat pe server. Identificatorul global universal de clasa (classid) corespunde unei intrari in registry a componentei respective. Serviciile oferite de o componenta ActiveX sint ilustrate in figura urmatoare: Controalele ActiveX pot fi folosite pentru si activitati de administrare a resurselor sistemului de operare sau pentru detectia, prin Web, a virusilor. Chioscurile informationale si educationale sau jocurile in retea pot beneficia, de asemeni, de serviciile oferite de tehnologia ActiveX. Dezavantajul consta in dependenta clara de platforma si in utilizarea de unelte de dezvoltare proprietare Microsoft. 3.7 Componente hipertext <PUBLIC:COMPONENT NAME="componenta"> // codul scriptului care implementeaza metoda </SCRIPT> Exemplu Vom defini o componenta stocata in fisierul blink.htc a carei actiune va fi realizarea efectului de clipire: <PUBLIC:COMPONENT name="blink"> // functia de initializare apelata la aparitia In cadrul documentului Web, va trebui sa atasam un comportament elementului <blink> prin constructia: <style> |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|