Sunteți pe pagina 1din 96

1

PROGRAMARE N WEB

Lect.dr.Cristina Mndru

CUPRINS
1. CONCEPTELE DE BAZ ALE ARHITECTURII WEB CLASICE ................................. 5 1.1 ARHITECTURI PENTRU INTERNET................................................................................. 5 1.1.1 Arhitecturi hardware pentru Internet................................................................................... 5 1.1.2. Arhitecturi software pentru Internet................................................................................... 7 1.1.3. Arhitectura client-server aplicat la Web........................................................................... 8 1.2 PROTOCOLUL HTTP ............................................................................................................ 9 1.2.1 Protocolul HTTP............................................................................................................... 10 1.2.2 Identificare resurse: URI i URL ...................................................................................... 10 1.2.3. Cererea HTTP .................................................................................................................. 11 1.2.4.Rspunsul HTTP............................................................................................................... 12 1.3 MODELUL DOM-HTML .................................................................................................... 12 1.3.1 Structura informaiilor pe site-uri Web ............................................................................. 12 1.3.2 MODELUL DOCUMENT- OBIECT (DOM)................................................................ 13 1.3.3 MODELUL DOM HTML ................................................................................................ 14 1.4 HTML (HyperText Markup Language)............................................................................... 16 1.4.1. ELEMENTELE LIMBAJULUI HTML ......................................................................... 16 1.4.2. FORME............................................................................................................................ 18 1.4.3 CADRE (FRAMES) ......................................................................................................... 19 Cadrul in-line ........................................................................................................................ 19 Crearea unui set de cadre ...................................................................................................... 20 Comunicarea ntre cadre ....................................................................................................... 21 1.4.4 HTML DINAMIC (DHTML).......................................................................................... 22 Structura documentului ......................................................................................................... 22 1.4.5 FOILE DE STIL (SS Style Sheets) ................................................................................ 23 Modelul de formatare a unei entiti din document............................................................... 23 Definiia de stil...................................................................................................................... 24 Mostenirea stilului................................................................................................................. 24 Particularizri ale utilizrii stilului pentru un anumit tag. ..................................................... 25 2. ARHITECTURI PENTRU EXTINDERE FUNCIONALITATE LA CLIENT ................. 28 2.1. COMPONENTE .................................................................................................................... 28 2.2 OBIECTE N PAGINI WEB ................................................................................................. 29 2.2.1 PLUG-ins .......................................................................................................................... 29 2.2.2 COMPONENTE ActiveX................................................................................................. 30 2.3 JAVA SCRIPT........................................................................................................................ 31 2.3.1. Specificaiile standardului ECMAScript.......................................................................... 31 2.3.2. Identificarea obiectelor din ierarhia JavaScript................................................................ 31 2.3.3. Modelul evenimentelor ................................................................................................... 33 2.3.4. Structura paginilor HTML ce conin JavaScript .............................................................. 35 Exemple ..................................................................................................................................... 35 2.4 APPLET .................................................................................................................................. 39 2.4.1 Apel applet........................................................................................................................ 39 2.4.2 Operatiile realizate de browser ......................................................................................... 40

2.5 STRII PERSISTENTE LA CLIENT ................................................................................. 43 2.5.1 COOKIE-s ........................................................................................................................ 43 2.5.2 Crearea unui cookie .......................................................................................................... 43 2.5.3 tergerea unui cookie........................................................................................................ 44 2.5.4 Accesul clientului la cookie .............................................................................................. 44 3. ARHITECTURI PENTRU EXTINDERE FUNCIONALITATE LA SERVER ............... 45 3.1 CONTAINER-ul WEB ........................................................................................................... 45 3.2 CGI (Common Gateway Interface)....................................................................................... 46 3.3 Tehnologii de scripting la server ........................................................................................... 48 3.3.1 TEHNOLOGIA ASP (Active Server Pages) .................................................................... 48 3.3.2 Modelul Obiect al tehnologiei ASP .................................................................................. 50 3.3.2.1 Obiectul Request ....................................................................................................... 50 3.3.2.2 Obiectul Response..................................................................................................... 50 3.3.3 Aplicaii ASP .................................................................................................................... 51 3.3.3.1 Obiectul Application ................................................................................................. 52 3.3.3.2 Obiectul Session........................................................................................................ 52 3.3.3.3 Tratarea evenimentelor la nivelul aplicaiei .............................................................. 53 3.3.2 PROGRAMARE LA SERVER CU PHP ......................................................................... 53 3.3.2.1 Tehnologia PHP ........................................................................................................ 53 3.3.2.3 Sesiuni i variabile globale ale unui script ................................................................ 55 4. ACCESUL LA DATE PERSISTENTE.......................................................................... 58 4.1 COMPONENTE ActiveX ...................................................................................................... 58 4.2 FUNCII PHP PENTRU OPERAII CU FIIERE........................................................... 59 4.3 COMPONENTE DE ACCES LA BAZE DE DATE ........................................................... 60 4.3.1 INTERFEE DE ACCES SI CONEXIUNI LA BAZE DE DATE .................................. 60 4.3.2 ETAPE ALE ACCESULUI STANDARD LA BAZA DE DATE ................................... 61 Conectarea............................................................................................................................. 61 Accesul i prelucrarea informaiilor ...................................................................................... 61 Operaii pentru consisten si corectitudine .......................................................................... 62 Servicii de acces la baze de date ........................................................................................... 62 4.3.3 Serviciul ADODB............................................................................................................. 62 3. Utilizarea obiectului conexiune......................................................................................... 65 4. Obiectul Recordset ............................................................................................................ 65 6. Etapele realizrii de operaii cu baze de date .................................................................... 67 4.3.4 ACCESAREA BAZELOR DE DATE UTILIZAND PHP............................................... 68 5. TEHNOLOGII JAVA PENTRU EXTINDEREA FUNCIONALITII LA SERVER .... 71 5.1 SERVLET ............................................................................................................................... 71 5.1.1 Componentele pachetelor Java servlet API....................................................................... 71 5.1.2 Configurarea servletului.................................................................................................... 74 5.1.3 Excepii servlet ................................................................................................................. 75 5.1.4 Cerere i rspuns ............................................................................................................... 75 5.1.5 Sesiune servlet .................................................................................................................. 78 5.1.6 Context servlet .................................................................................................................. 78 5.1.7 Colaborare servlet ............................................................................................................. 79

5.2 JSP (Java Server Pages)......................................................................................................... 81 5.2.1 Arhitectura MVC .............................................................................................................. 81 5.2.2 JSP (Java Server Pages) .................................................................................................... 82 5.2.2.1 Bazele tehnologiei JSP .............................................................................................. 82 5.2.2.2 Funciile containerului JSP........................................................................................ 84 5.2.2.3 Structura i componentele unei pagini JSP ............................................................... 84 5.2.2.4 Directive.................................................................................................................... 84 5.2.2.5 Elemente de scripting ................................................................................................ 85 5.2.2.6 Aciuni standard ........................................................................................................ 85 5.2.2.7 Tipurile de acini standard......................................................................................... 85 5.2.3 Obiecte implicite............................................................................................................... 88 5.2.4 Proiectarea aplicaiilor care utilizeaz JSP ....................................................................... 88 5.2.4.1 Abordarea client-server, orientat pagin.................................................................. 88 5.2.4.2 Abordarea dispecer.................................................................................................... 89 6. EXERCIII..................................................................................................................... 92

1. CONCEPTELE DE BAZ ALE ARHITECTURII WEB CLASICE


Vom prezenta cteva noiuni fundamentale despre arhitecturi de sisteme de calcul i vom continua cu arhitecturi hardware care stau la baza Internetului i cu arhitecturi software construite peste acestea, insistnd pe arhitectura client/server. Apoi vom descrie arhitectura client-server aplicat la Web. Urmtoarea seciune a capitolului prezint protocolul HTTP. n continuare este descris modelul DOM aplicarea acestuia la HTML. Capitolul se ncheie cu prezentarea de principiu a limbajului HTML.

1.1 ARHITECTURI PENTRU INTERNET


Arhitectura reprezint perspectiva structural asupra unui sistem de calcul. Aceasta conine numrul, tipurile i subtipurile resurselor componente i interconectrile lor. Fiecare tip de component corespunde unui mecanism pe care aceasta l realizeaz n sistem. Interconectarea componentelor este realizat pe baza unor abloane care definesc modul de interconectare ntre componente prin reguli i restricii de interconectare. 1.1.1 Arhitecturi hardware pentru Internet. Internet-ul este o reea de reele format din platforme (sub-reele) multiple i eterogene care trebuie s comunice ntre ele. Pentru aceasta se utilizeaz diferite ci de comunicare (cablu, fibr optic, unde radio) i componente ce distribuie informaiile ntre platforme, numite router-e.
Reea 1 CLIENT c1 Router Router k Reea k

Reea 2 CLIENT c2

Router 2

Fig.1 Arhitectura hardware pentru Internet

Privit din punct de vedere logic, comunicarea ntre clienii c1 i c2 aflai n subreele diferite, posibil cu protocoale de comunicare de nivel inferior diferite, este o

comunicare direct. Din punct de vedere fizic aceast comunicare se poate face pe cel puin dou ci: de la clientul c1 la router-ul R1, de la R1 la router-ul Rk i apoi la routerul R2. De la R2 informaia este transmis clientului c2. A doua cale este format de succesiunea de corespondeni client c1, router R1, router R2 i client c2. Exist dou variante de realizare a unei comunicari logice ntre clienii Internetului. Anterior am prezentat varianta care utilizeaz routere. A doua varianta este mai complex i este reprezentat de furnizorul de servicii Internet. Fiecare din aceste variante ofer clienilor servicii specifice pentru comunicare n Internet. Router-ul realizeaz transparena comunicrii fizice pentru cei doi clieni. Din punctul de vedere al clienilor avem urmtoarea arhitectur:
Client 1 Cale de comunicare backbone Client 2

Fig.2. Comunicare logic in Internet

Router-ul este o component Internet ce furnizeaz doua servicii clienilor: serviciul de tranzit i serviciul de acces. Serviciul de tranzit realizeaz legtura ntre regiuni cu lrgimi mari de band i viteze mari de transfer. Serviciul de acces realizeaz comunicarea ntre clieni prin linii dedicate i comutate. Fiecare router gestioneaz informaii referitoare la zona sa de aciune. Routerele comunic ntre ele n mod dinamic n vederea stabilirii cii optime de transmitere a fiecrui pachet de informaii. La acest nivel sunt rezolvate dinamic problemele care apar datorit unor defecte n reeaua fizic de comunicare sau datorit congestionrii traficului. Identificarea corespondenilor se face pe baza unui set de identificatori numerici unici disponibili la nivelul reea (IP). Pentru uzul nivelelor superioare, de care ne ocupm n lucrarea de fa, se utilizeaz o schem de nume explicite bazat pe o organizare pe domenii i subdomenii a mainilor din Internet. Traducerea acestor nume n valorile numerice ale identificatorilor unici se face pe baza corespondenelor coninute n baze de date specializate aflate n servere care funcioneaz ca servicii de nume la nivel de domeniu (DNS - Domain Name Server). A doua varianta de comunicare ntre clieni Internet este reprezentat de furnizorul de servicii Internet. Acesta este o form pentru intermedierea comunicaiilor n Internet superioar router-ului.

ISP

Internet

ISP

Client 1

Client 2

Fig.3. Comunicare utiliznd furnizori de servici Internet

Furnizorul de servicii Internet (ISP Internet Service Provider) ofera mai multe tipuri de servicii clienilor si. Serviciul de tranzit i serviciul de acces au aceleai funcii ca i cele oferite de router. Furnizorul de servicii Internet ofer n plus servicii cu valoare adaugat. Acestea sunt servicii de server Web, servicii de firewall, servicii de intranet i servicii de extranet. Serviciile de server Web realizeaz gzduirea de site-uri Web ca i accesul la acestea. Serviciile de firewall asigur protecia controlat a accesului clienilor la diferite servicii. Serviciile de intranet permit crearea de retele private cu acces limitat doar la clienii reelei respective. Serviciile de extranet ofer posibilitatea crerii de reele virtuale deoarece permit extinderea unui intranet cu posibilitatea de a iei n Internet ctre anumite noduri privilegiate, noduri pentru care se relaxeaz restriciile din firewall. Nodurile privilegiate au ataate nivele de privilegiu bazate pe structura de comunicare logic definit pentru reeaua virtual. De exemplu, se pot defini nivele de privilegiu diferite pentru diferite categorii de utilizatori cum ar fi clieni, furnizori sau prieteni. 1.1.2. Arhitecturi software pentru Internet Paradigma care st la baza arhitecturilor software pentru Internet este paradigma CLIENT-SERVER. Paradigma client/server se bazeaz pe doi actori: clientul i serverul. Clientul are rolul de a solicita un serviciu, iar serverul are rolul de a oferi clientului serviciul solicitat. Schimbul de informaii ntre procesele client i server se face prin intermediul unui canal de comunicaie prin care circul mesaje de cerere de la client la server i mesaje de rspuns de la server la client.
cerere CLIENT rspuns SERVER

Fig.4. Principiul arhitecturii client/server

O arhitectur simpl bazat pe paradigma client-server este compus dintr-un server i mai muli clieni.
Cerere Raspuns Client

Client

Server

Client

Fig.5 Arhitectura cu un server i mai muli clieni

Aceast arhitectur este o arhitectur pe dou nivele i este utilizat de aplicaiile client/server cu server centralizat. Solicitrile clienilor sunt rezolvate n ntregime de ctre server, acesta coninnd toate informaiile i procesele necesare construirii rspunsului. n cazul n care serverul are un grad mare de complexitate, o arhitectur bazat pe paradigma client/server este organizat pe mai multe straturi.
cerere rspuns cerere cerere

SERVER

rspuns

CLIENT

rspuns

SERVER
raspuns rspuns cerere cerere

SERVER

rspuns

Fig.6 Arhitectura client/server cu straturi multiple

n acest caz, pentru realizarea unui serviciu, un client apeleaz la un server care, pentru a oferi serviciul solicitat, necesit o serie de funcii pe care le obine apelnd la rndul su la unul sau chiar mai multe servere. Un proces poate fi client al unuia sau mai multor procese, dar, n acelai timp, poate fi server pentru alt set de procese. 1.1.3. Arhitectura client-server aplicat la Web. Arhitectura client-server pe dou nivele aplicat la Web este compus din clieni de tip browser si server de tip WebServer. Server-ul Web are dou interfee. Prin interfaa cu clienii se realizeaz operaiile de preluare a solicitrilor acestora i de transmitere a rspunsului. Clienii solicit documente aflate pe server care sunt depozitate n fiiere de tip *.html.
HTTP WebServer Interfaa client Interfaa cu site-ul Web

Browser

Cerere Rspuns

Fig.7 Arhitectura Web clasic

Fisiere *.html aflate n sistemul de fiiere al mainii gazd

Serverul Web are ca principala funcie asigurarea accesului la fiierele *.html, care formeaz cea mai simpl varianta de site Web. Vom vedea n capitolele urmtoare modaliti de extindere a acestei funcionaliti simple att pe partea clientului ct i pe partea server-ului. Administrarea unui site Web presupune i gestionarea fiierelor componente ale site-ului ca si a drepturilor de acces la acestea.

1.2 PROTOCOLUL HTTP


Realizarea unui transfer prin interfaa cu clientul se face n mai multe etape. Acestea sunt: stabilirea conexiunii, emiterea unei cereri de ctre client, emiterea raspunsului de ctre server i nchiderea conexiunii. Comunicarea ntre componentele arhitecturii Web are loc pe baza unui protocol de comunicare specific, numit HTTP. Protocolul de comunicare este colecia de reguli care definesc comunicarea ntre doua entitati, n cazul nostru ntre componentele unei arhitecturi client/server. Aceste reguli se refer la structurarea datelor care se transfer i la ordinea de realizare a transferurilor. Protocolul de comunicare ntre aplicaii Internet este o entitate complex care se bazeaz pe o stiv de protocoale. Fiecare nivel al acestei stive utilizeaz serviciul de comunicare oferit de nivelul inferior. Ultimul nivel aparine comunicrii fizice. Modelul general al comunicarilor ntre aplicaii este modelul OSI care conine apte nivele: aplicaie, prezentare, sesiune, transport, reea, legatur de date i nivelul fizic. Modelul TCP/IP utilizat n reele de calculatoare acoper primele patru nivele inferioare ale modelului OSI i reprezint un standard pentru nivelele reea (Internet) i transport. La nivelul reea Internet este definit protocolul IP care asigur legtura ntre calculatoare identificate prin adrese numerice unice de Internet numite IP. ntre acestea sunt transmise pachete cu informaii. La nivelul transport sunt furnizate servicii de gestionare a pachetelor IP. Aceste servicii realizeaz modelul comunicrii end-to-end (surs i destinaie cunoscute), rendez-vous al conexiunilor i controlul fluxului pentru comunicare date. Peste TCP/IP se suprapune un singur nivel (corespunzator nivelelor superioare din modelul OSI) care reprezint nivelul aplicaiei . Pentru acest nivel exist mai multe protocoale, cele mai semnificative fiind urmtoarele: - Telnet protocol pentru conectarea clientului la o interfa de lansare comenzi, n regim de terminal - FTP protocol pentru transfer fisiere (File Transfer Protocol) - SMTP protocol pentru e-mail (Simple Mail Transfer Protocol) - POP protocol pentru e-mail - DNS protocol pentru numire masini Internet (Domain Name Server) - HTTP protocol pentru comunicaare hipertext (HyperText Transfer Protocol)

10

1.2.1 Protocolul HTTP HTTP (HyperText Transfer Protocol) este protocolul de comunicare cu serverul Web. Att clientul Web (browser) ct i serverul Web implementeaz acest protocol. Pentru aceasta, fiecare are un modul software care conine aceast implementare. Protocolul HTTP este de tip cerere/rspuns de la o resurs identificat cu URI (Unified Resource Identifier) Protocolul HTTP ofer o funcionalitate sporit fa de alte protocoale, incluznd un subset al funcionalitii de transfer de fiiere, abilitatea de a solicita cutarea unui index, negociere automat a formatului i abilitatea de a deferi cererea clientului ctre un alt server. HTTP realizeaz unificarea diferitelor tipuri de date (text, imagine, etc.), a variaiilor de localizare i de protocol, prezentnd clientului un format omogen, sub form de pagini, a informaiilor. Protocolul HTTP definete atat formatul cererii cat si formatul rspunsului. HTTP asigura transferul de fluxuri de caractere organizate pe linii terminate cu <CR>. 1.2.2 Identificare resurse: URI i URL Resursele din Internet sunt identificate in mod unic. Un identificator unic de resursa (URI - Unified Resource Identifier) are urmatorul format general.
protocol: // resurs # subresurs

Resursa este reprezentat de un proces activ pe o main din Internet. Acest proces supravegheaz un port (ascult pe port). In general, exist o serie de porturi standard pe care ascult procese ce comunic prin diferite protocoale (ex. FTP asculta pe portul 25) Procesul server Web comunica prin protocolul HTTP si ascult implicit pe portul 80 al masinii (host) pe care se executa. Aceasta alocare poate fi modificata prin stabilirea altui port de ascultare la reconfigurarea serverului Web. Identificarea unei resurse de pe un server Web se face cu URL (Unified Resource Locator). Un URL se poate specifica fie n manier absolut, caz n care conine identificatorul serverului i a localizrii absolute a resursei pe site-ul respectiv1, fie relativ la directorul curent al documentului care face referirea. Dac procesul solicitat ascult pe un alt port dect cel implicit (80), atunci se specific numrul portului n URL. Sintaxa general a unui URL este urmtoarea:
http: // identificator_proces[:port] / fisier.html

Colectia de fisiere *.html ca si alte tipuri (in cazul serverelor Web cu functionalitate extinsa), formeaza site-ul Web, accesibil clientilor din Internet. Fisierele site-ului Web sunt localizate intr-un director specific pe masina pe care se executa serverul Web. Acesta reprezinta radacina site-ului Web.
1

Rdcina unui site este, n general, diferit de rdcina sistemului de fiiere al sistemului de operare pe care se afl site-ul.

11

De exemplu, in cazul unui server Apache acesta este %APACHE_HOME%/htdocs, unde variabila %APACHE_HOME% contine calea pe care se afla instalat serverul Apache (ex. C:/ProgramFiles/Apache Group/Apache pe o masina Windows). Un alt exemplu este radacina unui site Web accesibil prin IIS, aceasta fiind
C:\InetPub\wwwroot\.

1.2.3. Cererea HTTP Fiecare cerere HTTP utilizeaz o conexiune proprie. Spunem ca HTTP este un protocol stateless deoarece nu pstreaz starea de la o cerere a unui client la alta. Acesta reprezint un dezavantaj ce este acoperit de o serie de tehnologii adugate peste HTTP, att la client (cookies) ct i la server (gestiune sesiuni client). Utiliznd aceste tehnologii se poate realiza gruparea coleciilor de cereri aflate n diferite relaii logice. O cerere HTTP este nsoit de URL. Cererea HTTP este format din patru elemente componente, specificate n figura urmtoare. Component Metoda Antet (header) Linie blank Coninut (body) Semnificaie Comanda de executat asupra resursei:
GET/HEAD/PUT/POST/DELETE/TRACE

Informaii despre cerere i client Separator obligatoriu Date de transferat


Fig.8 Formatul cererii HTTP

Pentru fiecare cerere se defineste o metoda prin care se specifica tipul raspunsului asteptat de client. Daca metoda specificata este GET, clientul primete resursa identificat cu URL Daca metoda este HEAD, clientul primete doar informaii despre resurs (metadate) si nu resursa propriu-zisa. Daca in cerere se specifica metoda PUT serverul plaseaz coninutul transmis prin cerere (body) la locaia identificat cu URL Coninutul transmis devine noua resurs, aceasta fiind o metoda prin care clientul poate modifica continutul site-ului Web. Evident ca aceasta modificare se face in limita permisiunilor acordate de administratorul site-ului. Metoda POST este, de asemenea, destinat transmiterii unei entiti de la client la server. n acest caz se specific identificatorul resursei ce va prelucra entitatea transmis n mesaj. Exist, de asemenea, nc dou metode mai puin utilizate: DELETE prin care se solicit tergerea unei entiti de pe server i TRACE prin care se invoc o cerere de diagnosticare. Prezentm n continuare un exemplu de cerere in care e specificata metoda POST.
POST /servlet/personal.class HTTP/1.0 User-Agent: Mozilla/4.04 Accept: image/gif, image/X-bitmap, image/jpeg, Host: www.pub.ro Content-type: application/x-www-form-urlencoded Content-length: 100 Connection: keep-alive Accept-Charset: ISO-8859-1, Referer: http://www.pub.ro/studenti.html <LF>

12

nume = &prenume=&zi=&luna=&an= urlencoded = browserul preia valorile construiete irul de interogare(QUERY-STRING)

din

FORM

1.2.4.Rspunsul HTTP Rspunsul serverului Web este format din trei elemente componente, specificate n figura ce urmeaz. Component Stare Antet (header) Coninut (body) Semnificaie Versiunea HTTP, cod stare, descriere stare Informaii despre pagina returnat ca rspuns Pagina solicitat n cerere
Fig.9 Formatul rspunsului HTTP

Principalele informaii din antet se refer la tipul serverului Web, la tipurile de date acceptate, la tipul documentului returnat (MIME-type2 - ex. text/html, imagine/gif, audio/basic, multipart/digest, video/mpeg) i la dimensiunea documentului transmis.
HTTP 1.0 200 document follows Server: Apache_Go_Webserver/4.6 Date: Thu, 20 Febr 2003 15:30:00 GMT ANTET Accept-Range: bytes Meta-informaii (informaii despre pagin) Content-type: text/html Content-length: ... Last-Modified: Wed, 19 Febr

Coninutul paginii solicitate S-HTTP (secure HTTP) reprezint o extensie a protocolului cu faciliti de encriptare a informaiilor i cu semnturi digitale, n vederea asigurrii securitii acestora.

1.3 MODELUL DOM-HTML


1.3.1 Structura informaiilor pe site-uri Web Coninutul site-urilor Web este organizat ntr-o o structur ierarhic. Aceast structur se reflect n coninutul paginilor Web sub form de hipertext i hipermedia. Hipertextul este o manier de organizare a documentelor text dup un model ierarhic. Ierarhia conine documente i legturi ntre acestea. Legturile specificate n interiorul documentelor i se numesc hiperlegturi (hiperlink). Specificarea unui hiperlink se face utiliznd URL-ul corespunztor resursei legate.

Multipurpose Internet Mail Extensions reprezint o specificaie tehnic utilizat pentru a descrie transferul de date multimedia cu ajutorul standardelor de pot Internet.

13

Hipermedia este o manier de organizare a documentelor media (grafic, audio, video, etc.) dup un model ierarhic i reprezint o extindere a hipertextului cu elemete de multimedia. Pentru a accesa informaii organizate conform modelului ierarhic, URL are o sintax specific ce evideniaz resurse i subresurse. n varianta clasic, resursele sunt fiiere tip text sau media. n cazul arhitecturilor ce extind funcionalitatea arhitecturii Web clasice resursele pot fi i fiiere ce conin cod executabil. Exist posibilitatea rafinrii identificrii informaiilor prin specificarea paragrafelor dintr-un document text. Sintaxa general a unui URL devine n acest caz
protocol://serviciu (proces).maina/cale/fiier#paragraf

Urmtorul exemplu identific primul capitol dintr-un document numit curs1.html aflat pe calea /mateinfo/cursInternet a mainii univ-ovidius din domeniul ro pe care activeaz serviciul www (World Wide Web).
http://www.univovidius.ro/mateinfo/cursInternet/curs1.html#cap1

1.3.2 MODELUL DOCUMENT- OBIECT (DOM) Modelul obiect din cadrul metodologiei OO specific interfee i obiecte. Modelul definete semantica interfeelor i obiectelor, comportamentul interfeelor i obiectelor, atributele interfeelor i obiectelor i relaiile i dependenele ntre interfee i obiecte DOM (Document Object Model) este o particularizare, pentru domeniul obiectelor de tip document, a modelului obiect din cadrul metodologiei OO. DOM conine specificaiile interfeelor i obiectelor utilizate s reprezinte i s manipuleze documente, specificaii care definesc semantica, comportamentul, atributele, relaiile i dependenele ntre interfeele i obiectele utilizate s reprezinte i s manipuleze documente. DOM conine definiii pentru o interfa de programare a aplicaiilor care prelucreaz documente HTML i XML. Acestea prezint o modalitate structurat de a accesa i modifica coninutul paginilor Web care sunt colecii de elemente HTML. Specificaia DOM este independent de platform i de limbaj. Ea definete structura logic a documentelor ca fiind obiectual i arborescent i reguli pentru accesarea i modificarea lor. Modelul ofer o perspectiv structurat asupra documentului, o manier de specificare a comportamentului documentului i o manier de specificare a comportamentului obiectelor componente ale documentului. Componentele modelului sunt obiecte cu identitate i funcii. DOM are mai multe nivele. Nivelul fundamental este DOM Core care specific interfeele fundamentale ale modelului. Nivelele superioare ofer specificaii mai complexe pentru definire unui model structural pentru submulimile elementelor interne i externe ale documentelor, pentru validarea prin intermediul schemelor (XML Schema), pentru controlul reprezentrii

14

documentelor prin foi de stiluri (CSS, XSL sau alt limbaj pentru specificare stiluri), pentru controlul accesului, pentru sigurana n execuie i pentru lucrul cu evenimente. 1.3.3 MODELUL DOM HTML Modelul DOM-HTML este derivat din DOM Core, fiind extins pentru definirea documentelor HTML. Pe lnga funcionalitatea necesar manipulrii structurilor ierarhice de documente, elementelor i atributelor, DOM-HTML reprezint o specializare a DOM API care adaug funcionalitate specific documentelor i elementelor HTML. De asemenea, grupeaz, sub form de mecanisme specifice, operaii comune i frecvente asupra documentelor HTML. Iat un exemplu de document HTML
<HTML> <HEAD> </HEAD> <BODY> <!> <HR> <UL> <LI> continut 1 <LI> continut 2 </BODY> </HTML>

i reprezentarea sa conform modelului DOM HTML:


HTML <!DOCTYPE>

<HEAD>
<BODY> <!...> <HR> <UL> <LI> <LI> coninut 1 coninut 2

pentru HTML ofer interfeele HTMLDocument, HTMLElement, HTMLCollection i HTMLOptionsCollection precum i extensii ale interfeei HTMLElement corespunztoare specificaiilor HTML care definesc tipurile de elemente, marcate cu tag-uri, ce pot fi coninute n documente HTML. Interfaa HTMLDocument este derivat din DOMDocument i conine operaii i interogri specifice pentru documente HTML. Interfaa HTMLElement conine operaii i interogri specifice pe elementele documentului HTML, inclusiv metode de tip set i get pentru atributele elementelor. Specializarea DOM

15

Specializrile interfeei HTMLElement sunt prezentate n anex. Interfaa HTMLCollection reprezint o list abstract format din noduri identificate fie prin index fie prin nume. Interfaa HTMLOptionsCollection reprezint o list abstract format din noduri ce conin opiuni HTML identificate prin index, prin nume sau prin id. Ierarhia de obiecte DOM-HTML este reprezentat n figura urmtoare. Prin proprietatea elements a documentului se ofera acces la orice element de pe pagin.
window frames frame document

document

document

elements anchors applets objects frames images links plugins forms

form

text textarea radio

an

checkbox select button options

Fig.10 Ierarhii de obiecte DOM-HTML

Foile de stil (Style Sheets) utilizeaz o alt ierarhie de obiecte pentru elementele din pagin asupra crora acioneaz:
document tags all P DIV SPAN H1, H2, H6 etc all nume tag-uri ids

an

classes

Fig.11 Ierarhii de obiecte DOM-HTML pentru foi de stil

16

Standardul definit de W3C permite acces la orice tag i la orice atribut de configurare al acestuia, ofer independen fa de limbaj, independen fa de mediul grafic (fa de browser), i asigurar securitatea browserului.

1.4 HTML (HyperText Markup Language)


1.4.1. ELEMENTELE LIMBAJULUI HTML HTML este limbajul pentru definirea paginilor Web. O pagina Web este un un obiect de tip document, care conine, la rndul lui, obiecte din ierarhia de obiecte DOM-HTML. Elementele limbajului HTML sunt tag-uri (elemente de marcare, numite i etichete) utilizate pentru a descrie obiectele componente ale documentului3. Sintaxa general a unui tag este <nume_tag>. Semantica tag-ului este sugerat de numele acestuia (nume_tag) i este definit n specificaiile HTML. Ea este recunoscut de componenta browserului responsabil cu interpretarea codului HTML. Pagina HTML este, la rndul ei, un obiect. Marcarea unui obiect de tip document HTML se face cu tag-ul HTML astfel:
<HTML> obiectul document </HTML>

Un document HTML se conformeaz unei structuri format din dou componente de baz: antet, a crui prezent este opional, i coninut. Structura general a unei pagini Web este urmtoarea:
<HTML> <HEAD> obiectul antet </HEAD> <BODY> obiectul coninut pagin Web </BODY> </HTML>

Fiecare component a documentului HTML poate fi compus din mai multe obiecte de diferite tipuri. Obiectul antet poate conine obiecte de tip titlu, metainformaii, definiii de stil i cod de funcii n limbaj de scripting. Obiectul coninut pagin Web este, de asemenea, o colecie structurat de obiecte de diferite tipuri, subtipuri ale interfeei HTMLElement definit n modelul DOM-HTML.

Exista cateva exceptii de tag-uri HTML care nu definesc obiecte ci caracteristici de reprezentare a obiectelor text: CENTER, EM, B, U.

17

Un obiect are un tip i o colecie de atribute prin care se definesc proprietile lui. Fiecare tag are un nume care corespunde unui tip de obiect i un set de atribute corespunztoare atributelor obiectelor de tipul respectiv. Pentru a specifica tipul obiectului coninut, acesta este marcat cu tag-ul corespunzator, iar pentru a specifica proprietile obiectului se atribuie valorile corespunztoare atributelor ataate tag-ului. Formatul general pentru specificarea unui obiect al unui document HTML este urmtorul:
<nume_tag atribut1=val1 atribut2=val2 atributn=valn >

De exemplu, tipul de obiect coninut pagin Web este marcat cu tag-ul cu nume_tag = BODY care are atributele:
LINK culoarea pentru hiperlegtur (link) normal ALINK culoarea pentru hiperlegtur activ VLINK culoarea pentru hiperlegtur utilizat BACKGROUND culoare fundal BGCOLOR culoare TEXT culoare text

Pentru a defini un coninut de pagin Web la care culoarea textului este rou iar hiperlegturile active sunt scrise cu albastru se folosete4:
<BODY TEXT=RED ALINK=BLUE> coninut pagin Web </BODY>

n acest exemplu, restul atributelor iau valori implicite. Tag-urile pot fi grupate pe mai multe categorii de funcii. Exist tag-uri pentru structurarea coninutului cum ar fi tag-uri pentru specificarea de titluri de diferite nivele (H1, H6), pentru aliniere text (CENTER), pentru definire de liste (UL, LI sau OL, LI). De asemenea, exist tag-uri specializate n structurarea coninutului sub form de tabele (TABLE, TR, TH, TD), iar fiecare dintre acestea are un set de atribute printre care se numr atribute pentru aliniere (ALIGN), definire culoare (xxxCOLOR), definire contur (BORDER), spaiere ntre celule (CELLSPACING), distribuire coloane (COLSPAN), etc. Exist, de asemenea, tag-uri pentru evideniere coninut, care marcheaz obiecte de tip text cu caracteristici de afiare speciale. Acestea sunt EM pentru scriere cursiv, U pentru subliniere i B sau STRONG pentru supraimprimare. O alt categorie de tag-uri sunt utilizate pentru specificare de hiperlegturi (link), referine la alt document sau paragraf sau la un obiect de alt tip (ex. Obiect grafic).
Reprezentarea valorilor pentru culoare se poate face fie cu nume (RED, BLUE, etc.) fie utiliznd un cod hexazecimal corespunztor culorilor RGB ( #rrggbb ex. FFFFFF alb).
4

18

<A HREF = url >text</A>

indic o referin la o resurs identificat cu url.


<IMG = imagine.gif WIDTH=valW HEIGHT=valH>

indic o referin la o resurs ce reprezint un fiier ce conine o imagine grafic n format GIF, imagine ce va fi afiat ntr-o zon cu dimensiunile specificate de atributele WIDTH (lime) i HEIGHT (nlime). 1.4.2. FORME Colectarea informaiilor client ce vor fi communicate la server se face n containere speciale, numie forme, n care se definesc controale de interfa grafic cu clientul (GUI). Containerele sunt marcate cu tag-ul FORM, conform urmtoarei sintaxe generale:
<FORM atribute> definiii obiecte de tip control </FORM> Urmtoarea construcie <FORM NAME=nume_forma ACTION=url METHOD=POST>

marcheaz o form ecran care conine obiecte de dialog cu utilizatorul utilizate pentru preluare de informaii ce vor fi transmise la server cu metoda POST. Prin valoarea atributului ACTION de tip URL se specific o component aflat pe server responsabil cu prelucrarea informaiilor culese n cmpurile formei. O form e constituit din orice combinaie de obiecte de tip INPUT, TEXTAREA i SELECT. Obiectele de tip INPUT sunt marcate cu tag-ul INPUT care are urmtoarea sintax general:
<INPUT NAME=nume_obiect TYPE=tip MAXLENGTH= ... [CHECKED] [READONLY]> VALUE=val SIZE=...

Exist mai multe tipuri de obiecte INPUT. Tipul asociat unui anumit control INPUT este precizat n atributul TYPE al acestuia. Tipurile de controale pot fi linie de text(TEXT), fiier(FILE), parol(PASSWORD), informaie ascuns (text care se transmite la server dar nu se vede n forma)(HIDDEN), imagine(IMAGE), caset de marcare(CHECKBOX), set de butoane radio(RADIO), butoane pentru specificarea unei aciuni(SUBMIT, RESET). Obiectele de tip TEXTAREA reprezint zona mde text de dimensiuni mai mari i sunt sunt marcate cu tag-ul TEXTAREA.

19

<TEXTAREA NAME=nume-camp ROWS=nr_randuri [READONLY]> continut implicit al zonei de text </TEXTAREA>

COLS=nr_coloane

Obiectele de tip SELECT sunt marcate cu tag-ul SELECT i includ o list de obiecte marcate cu tag-ul OPTION reprezentnd opiunile din care se face selecia. Unul din atributele tag-ului specific, dac e cazul, posibilitatea realizrii de selecii multiple.
<SELECT NAME=nume-camp SIZE=valoare MULTIPLE> <OPTION SELECTED VALUE="val_1"> Valoare_afisata_1 <OPTION VALUE="val_2"> Valoare_afisata_2 <OPTION VALUE="val_3"> Valoare_afisata_3 ... </SELECT> Prin SELECTED specificat ca atribut al unui obiect OPTION se indic faptul c aceasta este selecia implicit. Valoarea atributului VALUE reprezint, ca i n cazul

general, valoarea obiectului de tip select al formei , valoare referit cu


document.nume_form.nume_select.options[index_opiune].value

1.4.3 CADRE (FRAMES) Cadrele sunt zone independente ale unei pagini Web, ce pot fi ncarcate separat (asemntoare unor ferestre distincte). Cadrele se pot defini in-line sau n cadrul unui container specializat marcat cu <FRAMESET> care nlocuiete containerul BODY, conform urmtoarei structuri generale:
<HTML> <HEAD> obiectul antet </HEAD> <FRAMESET> obiectul set de cadre </FRAMESET> </HTML>

Definiia unui cadru se face cu tag-ul <FRAME> care are ca atribute identificatorul cadrului (NAME), localizarea fiierului surs (SRC) pentru coninutul cadrului, specificat prin url, i elemente de descriere a aspectului cadrului. Pentru acestea din urm se folosesc urmtoarele atribute: SCROLLING , NORESIZE i FRAMEBORDER de tip comutator( yes/no, 0/1), MARGINWIDTH i MARGINHEIGHT cu dimensiuni specificate in numar de pixeli, n inch-i sau n centimetri. Cadrul in-line Pentru definirea unui cadru in-line se utilizeaz urmtoarea sintax general:

20

<IFRAME [name=frameName] [src=URL] [frameborder=1 sau 0] [marginwidth=nr.pixeli] [marginheigh=nr.pixeli] [scrolling=yes sau no] [align=bottom, middle, top, left sau right] [heigh=val][width=val] </IFRAME>

Obs. val se poate specifica n numr de pixeli, n procente sau sub form de raport ( nr*). Crearea unui set de cadre Un set de cadre este coninut ntr-un container specializat, marcat cu <FRAMESET>. Cadrele din container pot fi organizate orizontal i/sau vertical. Containerul <FRAMESET> conine o list cu definiiile cadrelor din set.
<FRAMESET [rows=rowWidths] [cols=colWidths] [loadEvents]> lista cu definitii de cadre </FRAMESET>

Pentru definirea unui cadru se utilizeaz tag-ul <FRAME> cu urmtoarea sintax general:
<FRAME SRC="url" NAME="myFrame" SCROLLING=YES|NO|AUTO MARGINWIDTH="value" MARGINHEIGHT="value" NORESIZE FRAMEBORDER=YES|NO BORDERCOLOR="value" >

Identificarea acestuia n document sa face cu "myFrame", valoarea atributului


NAME.

Urmtoarea secven de cod HTML


<FRAMESET SCROLLING=YES COLS=v1%, v2%, , vn%> <FRAME SRC=url NAME=nume_f_1> <FRAME SRC=url NAME=nume_f_n> </FRAMESET>

definete un set format din n cadre organizate pe n coloane, fiecare coloan ocupnd un procent egal cu vi din limea ferestrei de afiare. Mai general, ntr-un set de cadre se poate defini o gril de cadre orientate pe ambele direcii, daca se folosete o definiie de forma :
<FRAMESET ROWS=v1%, v2%, , vn% COLS=v1%, v2%, , vm% >

sau se folosete incluziunea seturilor de cadre ca n exemplul urmtor:


<HTML> <FRAMESET ROWS="25%,50%,25%"> <FRAME SRC="header.htm">

21

<FRAMESET COLS="25%,75%"> <FRAME SRC="label.htm"> <FRAME SRC="info.htm"> </FRAMESET> <FRAME SRC="footer.htm"> </FRAMESET> <NOFRAMES> Text afiat la browserele care nu suport cadre. </NOFRAMES> </HTML>

Nu toate browserele suport cadre. Pentru browserele care nu recunosc cadrele este utilizat tag-ul <NOFRAMES>. Cu acest tag se marcheaz un text care va fi afiat de browserele care nu suport cadre. Comunicarea ntre cadre Un cadru este identificat cu un nume (stabilit cu atributul NAME al definiiei) i conine o resurs localizat cu URL (specificat n atributul SRC al definiiei). Pe baza identificatoarelor de cadru se pot stabili relaii de comunicare ntre acestea. Un cadru este, n general, specificat ca destinaie pentru prezentarea unei resurse. Pentru precizarea cadrului destinaie se folosete atributul TARGET. Orice tag ce suport atributul target poate s-i atribuie acestuia numele unui cadru. Utilizarea etichetei <BASE target = nume1> n antetul unei pagini va afia coninutul fiecrei hiperlegturi din aceasta n frame-ul identificat cu nume1. Pentru a face o alegere a paginilor care se vor afia n cadrul respectiv se utilizeaz construcia <A href=url target=nume1>Link la url</A> pentru fiecare link la paginile ce trebuie afiate n cadrul identificat cu nume1. Astfel, daca un fiier HTML conine
<A HREF=f1.html TARGET=nume_f_3> ... <A HREF=f7.html TARGET=nume_f_3>

atunci att f1.html ct i f7.html se vor afia n cadrul identificat cu nume_f_3. n tabela urmtoare sunt prezentate numele implicite pentru cadre particulare ntro ierarhie printe-descendent.
Nume implicit Tip cadru Fereastra nou, fr coninut Frame-ul apelant Frame-ul printe al frame-ului apelant Frame-ul rdcin

_blank _self _parent _top

22

1.4.4 HTML DINAMIC (DHTML) DHTML reprezint un set de standarde pentru crearea paginilor Web interactive i dinamice. Utilizarea DHTML permite acces dinamic la actualizarea coninutului paginii, a structurii acesteia sau a stilului documentului. Cu DHTML se creaz pagini modificabile autoconinute care i modific coninutul fr cereri suplimentare la server, pe baza unui set local de informaii i aciuni. De asemenea se realizeaz controlul stilurilor de afiare funcie de facilitile de la client ca i de preferinele acestuia. DHTML este standard al consoriului W3 bazat pe DOM (Document Object Model). Acesta ofer faciliti de navigare prin structura documentului i de manipulare a documentului. Pentru a-i realiza funciile dinamice, standardul definete modelul eveniment i modelul obiectului foaie de stil. De asemenea, permite obinerea de informaii generale despre document i browser prin capacitatea de a examina obiecte nglobate (ex. cookies). Exist mai multe implementri ale standardului. Implementarea Netscape i adaug etichete noi i noi tipuri de seturi de caractere descrcabile. Implementarea Microsoft i adaug atribute noi la etichete i controale ActiveX pentru acces la baze de date. Structura documentului Un document DHTML conine unul sau mai multe containere. Ca i n cazul HTML, containerul BODY (sau FRAMESET) este singurul obligatoriu. Tipurile de containere ce pot s apar ntr-un document DHTML sunt antetul, corpul, stilul, scriptul i setul de cadre.
<HTML> <HEAD> ... <STYLE> obiecte de tip stil </STYLE> ... <SCRIPT> cod scripting (funcii) </SCRIPT> ... </HEAD> <BODY> ... <SCRIPT> cod scripting </SCRIPT> ... </BODY> </HTML>

23

Antetul este marcat cu <HEAD> i conine informatii despre document. Corpul este marcat cu <BODY> i conine obiectele afiabile din pagina Web. Containerul pentru stil este marcat cu <STYLE> i conine definiiile stilului de afiare pentru pagina respectiv. Containerul marcat cu <SCRIPT> conine cod de scripting pentru definirea de activiti dinamice iniiate de interaciunea cu utilizatorul. Setul de cadre este marcat cu <FRAMESET> i conine definiii de cadre multiple n acelai document. Containerele de tip stil sunt incluse n antet iar cele de tip script pot sa apara fie n antet fie n corpul documentului. 1.4.5 FOILE DE STIL (SS Style Sheets) Foile de stil conin grupuri de proprieti care definesc aspectul unui document HTML. Utilizarea lor reprezint o modalitate de a separa forma de prezentare a unui document de coninutul acestuia, ceea ce conduce la independen fa de platforma i de browserul clientului. Foile de stil pot fi folosite pentru a unifica prezentarea unui grup de documente ale unui site Web. Au fost standardizate dou nivele de definire a aspectului. CSS1 conine specificaiile nivelului pentru definire font, culoare i spaiere. CSS2 este un nivel superior care suport motenire a foilor, permite definire de efecte vizuale, poziionri i paginri, integrarea diverselor tipuri de media (ex. sunet). n prezent se lucreaz la o propunere pentru CSS3. n HTML exist o serie de tag-uri utilizate pentru formatarea textului cu stiluri fizice. Acestea permit control asupra detaliilor de aspect ale paginii. Principalele tag-uri din aceast categorie sunt <I>, <B>, <U> pentru formatare general, <BIG>, <SMALL> pentru stabilire dimensiune caractere, <STRIKE>, <S>, <DEL> pentru text neactual, <TT> pentru caractere de lime egal, <SUP>, <SUB> pentru indicare super/subcript, <FONT>, <BASEFONT> cu atributele FACE pentru tipul de caractere, SIZE pentru dimensiune i COLOR pentru culoare. Modelul de formatare a unei entiti din document Orice entitate din document este modelat, n vederea aplicrii definiiilor de stil, sub form de casete incluse. Zonele exterioare coninutului propriu-zis sunt opionale. Acestea sunt zona de protecie (padding area), zona de bordur (border area) i zona de margine (margin area). margin edge
zon de margine (margin) zon de bordur (border) zon de protecie (padding) CONINUT

24

Definiia de stil O foaie de stil este o colecie de definiii de stil. Sintaxa general a unei definiii de stil este urmtoarea:
selector {nume_proprietate : valoare_proprietate}

unde selector reprezint tag-ul HTML la care se asociaz definiia de stil reprezentat de perechea (nume_proprietate, valoare_proprietate). Definiia de stil implic punerea n coresponden a doua entiti: tag HTML i stil al unei proprieti a acestuia. Iat o list de proprieti (atribute) i de valori posibile ale acestora:
font-family: nume font font-size: nr.(pt=puncte, px=pixeli, in=inchs, cm=centimetri, %) font-style: (italic, normal, oblique) font-weigh: (extra-light,demi-light, light, mediun, extra-bold, demi-bold, bold) background: culoare text-decoration: (none, underline, italic, line-through) line-heigh: nr.(pt=puncte, px=pixeli, in=inchs, cm=centimetri, %) color: culoare (nume culoare sau #RRGGBB) margin-left: nr. (pt=puncte, px=pixeli, in=inchs, cm=centimetri) margin-right, margin-top, text-ident text-align: (left, center, right) background: culoare (nume culoare sau #RRGGBB)

n definirea unui stil exist mai multe cardinaliti de asociere a entitilor tag i proprietate, astfel:
11 1n n1 nn sel {n_p : v_p} sel {n_p1 : v_p1, n_p2 : v_p2, } sel_1, sel_2, , sel_k {n_p : v_p} sel_1, sel_2, , sel_k {n_p1 : v_p1, n_p2 : v_p2, }

Mostenirea stilului ntre taguri aflate pe o ierarhie printe-descendent, tag-ul descendent motenete stilul tag-ului printe. Se poate defini un stil pe o anumit ramur a unei ierarhii printe(sel_1)descendent(sel_2), indicnd succesiunea de tag-uri de pe calea respectiva astfel:
sel_1 sel_2 {n_p : v_p}

Ca urmare a acestei definiii, stilul este definit pentru tag-ul sel_2 doar dac acesta se afl pe o ramur n care este descendent al tag-ului sel_1.

25

Particularizri ale utilizrii stilului pentru un anumit tag. 1. Clase de stiluri Se pot defini mai multe stiluri pentru acelai tag. Fiecare definiie de stil reprezint o clas de stil identificat printr-un nume. n cadrul unui tag se poate specifica clasa de stil ce se utilizeaz indicnd numele acesteia n atributul CLASS al tag-ului. Fie urmtoarele definiii ale claselor de stil:
.nume_clasa1 {n_p : v_p} .nume_clasa2 {n_p : v_p} .nume_clasa3 {n_p : v_p}

Utilizarea pentru o anumit instan a tag-ului s_1 a stilului definit n clasa


nume_clasa2 este specificat cu sintaxa: <s_1 CLASS=nume_clasa2>

2. Asocieri particulare de stiluri Dac stilul este definit folosind construcia:


#nume_stil {n_p : v_p}

se poate indica utilizarea acestuia doar n anumite instane ale unui tag, instane crora li se asociaz ca identificator numele stilului, astfel:
<selector ID = nume_stil>

Stilul definit cu selectorul #nume_stil se aplic doar instanelor nsoite de atributul ID=nume_stil. 3. Pseudo-clase Pseudo-clasele definesc stiluri care se conecteaz la o anumit stare a unui tag sau a unui obiect al documentului. De exemplu, pentru tag-ul <A> (anchor) se disting trei stri: hiperlegtur normal, hiperlegtur activ i hiperlegtur vizitat, pentru fiecare stare fiind definit un stil propriu (n general, referitor la culoarea textului). De asemenea, pentru un paragraf se pot distinge obiectele de tip linie care pot fi n starea prima linie sau n starea restul paragrafului. Pentru starea prima linie se poate defini o pseudo-clas de stil care se va aplica la prima linie a fiecarui paragraf din document.

26

O foaie de stil este memorat ntr-un fiier de tip *.css. n aceasta trebuie specificat tipul documentului fie prin
Content-Style-Type: text/css

fie utiliznd tag-ul META astfel:


<META http-equiv="Content-Style-Type" content="text/css">

Definirea stilului se poate face la nivel de tag in-line, la nivel de pagin HTML sau n fiier separat, de tip *.css, aplicabil mai multor pagini HTML. Foaia de stil poate fi nglobat n document sau poate fi doar conectat la acesta. Definiia de stil inline se face utilizd atributul style n cadrul altui tag, caz n care afecteaz doar obiectul marcat cu eticheta respectiv:
<h3 style=font-family: Arial; color: red>Titlu de nivel 3</h3>

Definiia de stil poate fi plasat n antetul documentului, caz n care afecteaz toate obiectele marcate cu etichetele pentru care se definete stilul.
<HEAD> <STYLE type="text/css"> definiii de stil </STYLE> </HEAD>

O foaie de stil poate fi nglobata n documentul HTML prin specificarea faptului c se import definiiile dintr-o foaie de stil indicata prin URL. Aceste definiii acionez, de asemenea, la nivelul ntregii pagini HTML.
<STYLE TYPE="text/css"> @import url(http://www.myserver.com/style.css); </STYLE>

Cazul cel mai general este cel al foii de stil extern (legat). Se utilizeaz o foaie de stil aflat ntr-un fiier extern cu extensia .css care se conecteaz la document dup urmtorul prin specificarea acestui lucru n antet astfel:
<link rel=stylesheet href=*.css type=text/css>

Este posibil utilizarea alternativ a mai multor foi de stil. Acest lucru se exprim prin indicarea unui acelai titlu i prin folosirea cuvatului cheie alternate
<LINK TYPE="text/css" REL="alternate stylesheet" TITLE="Example" HREF="A.css"> <LINK TYPE="text/css" REL="alternate stylesheet" TITLE="Example" HREF="B.css">

27

n cazul unui document complex se folosesc stiluri combinate. Exist o disciplin de aplicare n cazul mai multor definiii pentru acelai tag. Aceasta este reflectat de principiul foilor de stil n cascad (Cascading Style Sheets). Stilul unui document HTML poate fi definit n mai multe module de stil. Prin noiunea de cascad se reglementeaz modul n care se pot utiliza mai multe module de definire a stilului pentru un document HTML. Regula spune c dac pentru o pagin HTML exist mai multe module de definire a stilului, acestea sunt parcurse n cascad de ctre browser. Este important de subliniat c se utilizeaz contextul grafic existent pe maina gazd. Avantajele utilizrii foilor de stil sunt modularitatea i reutilizarea modulelor prin indicarea explicit sau implicit (importuri) a fiierelor CSS dorite i personalizarea n contextul utilizrii browser-elor care permit folosirea unor stiluri personale. Dac lum n considerare att contextul de la client ct i definiiile din paginile descarcate de la server putem distinge urmtoarele tipuri de stiluri i prioritile lor. Stilurile definite la nivelul browser-ului sunt implicite i au prioritate minim. Urmeaz stilurile personale setate de utilizatorul client i, cu prioritate maxim, stilurile principale specificate de autor. La nivelul stilurilor specificate de autor exist, de asemenea, o ierarhie de aplicare. Prioritate minim o au stilurile definite n foile de stil conectate, ordinea prioritilor continund cu stilurile nglobate i cu stilurile in_line. Regula spune c stilurile se aplic n cascad, n ordinea prioritilor, iar la prioriti egale, n ordinea specificrii lor. Aplicarea criteriului prioritilor poate fi eludat folosind cuvtul cheie important.

28

2. ARHITECTURI PENTRU EXTINDERE FUNCIONALITATE LA CLIENT 2.1. COMPONENTE


Clientul Web este reprezentat de navigator(browser) i implementeaz o colecie de funcii specifice redrii coninutului paginilor transmise de la server. Aceste pagini pot fi statice, cu coninut nemodificabil, sau pot avea un coninut dinamic. Dinamica coninutului paginilor Web se datoreaz, n general, aciunilor utilizatorului i poate implica modificarea paginilor fie pe baza unei noi curse la server de unde se preiau informaii noi, fie pe baza informaiilor disponibile la client, fr a necesita o curs la server. Acest al doilea caz beneficiaz de extinderea funcionalitii la client conform definiiilor din paginile Web realizate n limbaje pentru care agentul client (browser) dispune de interpretoare.
DATE multimedia Cod HTML Cod JS Cod Java (applet)

Cerere Browser Raspuns Plugins HTML JS JVM

WebServer Interfata client Interfaa cu site-ul Web

Nivel interpretoare cod

Fisiere *.html, *.dhtml, *.js,*.css, *.class aflate n sistemul de fiiere al mainii gazd

Fig.12 Extinderea funcionalitii la CLIENT

Interpretorul pentru cod HTML reprezint funcionalitatea primar a oricrui navigator, fiind responsabil cu interpretarea codului HTML. Plug-ins sunt componente software destinate fie interpretrii de informaii multimedia din fiiere transmise de la server, fie alte aplicaii destinate a fi executate pe maina de la client n vederea completrii funcionalitii unei aplicaii Web. Interpretorul de cod JavaScript permite nglobarea de cod JavaScript n paginile HTML. Acest cod este utilizat pentru a defini aciuni ce se execut ca urmare a unor evenimente declanate la interfaa paginii cu utilizatorul sau cu navigatorul Web. Interpretorul de cod Java (JVM) permite executarea codului Java descarcat de la server sub form de applet.

29

2.2 OBIECTE N PAGINI WEB


2.2.1 PLUG-ins Pentru a extinde funcionalitatea primar oferit de un browser Web, acestuia i pot fi ataate componente software de tip plug-in. Avnd la dispoziie aceste componente, agentul client implementat de browser este capabil execute funcii definite n componente create de programatorul aplicaiei Web sau componente disponibile pe maina client sau n Internet, unele dintre acestea fiind capabile s reproduc date transmide de la server n fiiere multimedia. Procedura general de extindere a funcionalitii la client n acest manier este realizat prin inserarea de obiecte n pagini Web. Unele din aceste obiecte pot fi de diferite tipuri MIME, pentru fiecare astfel de tip. Browser-ul gestioneaz un set de corespondene ntre tipul MIME i plug-in specializat n prelucrarea acestuia. Atunci cnd apare o solicitare de prelucrare a unui astfel de fiier browser-ul identific plug-in necesar i, dac nu este deja instalat, l ncarc pentru ca apoi s-i transfere fiierul spre prelucrare. Pentru specificarea nglobrii unui obiect n pagini Web se utilizeaz tag-ul 5 <OBJECT> . Atributele acestuia identific prin URL plug-in necesar (CLASSID) i fiierul ce conine obiectul (DATA), precizeaz tipul MIME al obiectului inclus sau al fiierului de date al obiectului (TYPE) precum i caracteristici ale cadrului n care este prezentat obiectul respectiv (BORDER, HEIGH, etc). De asemenea, pentru identificarea obiectului n ierarhia de obiecte a paginii Web acesta primete un nume indicat ca valoare a atributului ID. Unui obiect i pot fi transmii parametri, care sunt formai cu tag-ul <PARAM> i sunt nglobai n tag-ul <OBJECT>.
<OBJECT definiii atribute > <PARAM NAME = nume_p1 VALUE = val_p1> <PARAM NAME = nume_p1 VALUE = val_p1> ... </OBJECT>

Pentru browser-ele care nu suport obiecte nglobate n pagini Web se recomand furnizarea de coninut alternativ ca n exemplu urmtor.
<OBJECT DATA = film.avi WIDTH=100 HEIGH=100> <PARAM NAME = AUTOSTART VALUE = TRUE> <A HREF=get_film.htm> <IMG SRC=poza.gif WIDTH=100 HEIGH=100> </A> </OBJECT>

La clienii ce folosesc aceste browsere va fi interpretat doar coninutul corespunztor tag-ului A(ANCHOR).
5

Exist, de asemenea, tag-ul <EMBED> cu o funcionalitate asemntoare dar mai restrns, valabil i la versiuni mai vechi de HTML 4.

30

2.2.2 COMPONENTE ActiveX Funcionalitatea la client poate fi extins i prin includerea n pagina Web a unor obiecte de tip control ActiveX disponibile pe maini client de tip Windows. Acestea sunt, de asemenea, marcate cu tag-ul <OBJECT>. Atributul CLASSID indic obiectul ce va fi inserat prin intermediul numrului unic al acestuia n cadrul coleciei de obiecte de pe maina Windows a clientului. Acesta se obine fie din documentaia controlului respectiv, fie automat utiliznd ActiveX Control Pad pentru inserarea controlului n pagina Web, fie inspectnd coninutul bazei de date Registry pentru a determina valoarea cheii asociat controlului n urma instalrii acestuia pe maina Windows. Sintaxa de specificare a valorii acestui atribut conine clsid urmat de numrul unic, ca n exemplul urmtor n care este utilizat controlul Popup Menu:
<OBJECT id=menu1 classid="clsid:0482B100-739C-11CF-A3A9-00A0C9034920" width=1 height=1 align=left hspace=0 vspace=0 > <PARAM <PARAM <PARAM <PARAM </OBJECT> NAME="Menuitem[0]" NAME="Menuitem[1]" NAME="Menuitem[2]" NAME="Menuitem[3]" VALUE="Optiunea_1"> VALUE="Optiunea_2"> VALUE=" Optiunea_3"> VALUE=" Optiunea_4">

Parametrii sunt marcai cu tag-ul <PARAM> care, pe lng NAME i VALUE, are i atributele TYPE i VALUETYPE care poate lua una din valorile REF,OBJECT sau DATA pentru a specifica semnificaia valorii atributului VALUE. Valoarea REF dat atributului VALUETYPE indic faptul c parametrul este o referin la un obiect identificat prin URLul dat ca valoare a atributului VALUE iar atributul TYPE va specifica tipul acestuia. Valoarea OBJECT indic utilizarea unui alt obiect ca parametru. Valoarea DATA indic un parametru de tip ir de caractere. Atributul ID primete o valoare care identific controlul la nivelul ierarhiei de obiecte n pagina Web, identificator folosit n scripturile care trateaz evenimentele ce apar la control. Aceste evenimnte sunt tratate cu cod VBScript, cod ataat unui eveniment utiliznd atributele FOR (pentru indicarea controlului) i EVENT (pentru a indica evenimentul tratat), ale tag-ului SCRIPT, ca n urmtorul exemplu:
<SCRIPT LANGUAGE="VBScript" FOR="b1" EVENT="Click"> <!-window.alert( "Ati apasat butonul !" ) --> </SCRIPT> <OBJECT ID="b1" WIDTH=96 HEIGHT=32 CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57"> <PARAM NAME="Caption" VALUE="Apasati aici !"> <PARAM NAME="Size" VALUE="2540;847"> </OBJECT>

31

2.3 JAVA SCRIPT


JavaScript este un limbaj de scriptig, orientat obiect, derivat din limbajul Java. JavaScript se conformeaz ECMAScript (European Computer Manufacters Association), standard pentru limbaje orientat obiect, de tip script. JavaScript este un limbaj special conceput pentru manipularea, automatizarea i integrarea facilitilor oferite de un navigator Web. 2.3.1. Specificaiile standardului ECMAScript Conform specificaiilor standardului, orice obiect este membru al tipului Object i reprezint o colecie neordonat de proprieti, fiecare cu zero sau mai multe atribute. Proprietate = obiect | valoarea primitiv | metod Valoare primitiv = Undefined | Null | Boolean | Number | String Metod= funcie asociate unui obiect prin intermediul unei proprieti. Standardul specific, de asemenea, urmtorul set de obiecte predefinite:
{Global,Object,Function,Array,String,Boolean,Number,Math,Date}

Operatori sunt cei cunoscui din limbajele Java i C, excepie fcnd faptul c % are operanzi reali iar && i || ntorc valoarea unuia din operanzi, indiferent de tipul acestuia. Tipurile de instruciuni sunt urmtoarele: bloc de instruciuni delimitat de { } instruciunea vid ; instruciunea de test if iteraii while, for, for-in instruciuni de control return, continue, break, with.

Limbajul ofer o ierarhie de obiecte predefinite, conform cu modelul DOM. Programatorii pot utiliza obiecte predefinite i i pot defini obiecte proprii. Limbajul este mai puin restrictiv i prin faptul c variabilele nu trebuie declarate ca tip, ele lund tipul valorii ce li se atribuie. 2.3.2. Identificarea obiectelor din ierarhia JavaScript Ierarhia obiectelor n documentele HTML este accesibil codului JavaScript dup urmtorul model:
window window.frame window.document window.document.layer window.document.link window.document.image

32

window.document.area window.document.anchor window.document.applet window.document.plugin window.document.form window.document.form.textarea window.document.form.text window.document.form.fileupload window.document.form.password window.document.form.hidden window.document.form.submit window.document.form.reset window.document.form.radio window.document.form.checkbox window.document.form.button window.document.form.select window.document.form.select.option window.location window.history navigator navigator.plugin navigator.mimetype

Fiecare obiect din acest ierarhie are un set propriu de atribute. Acestea sunt identificate prin numele atributului ataat la identificatorul obiectului. Iat cteva exemple de identificatori de atribute:
window.document.name window.document.action window.document.target window.document.form.select.option.value

Crearea unui obiect JS se face utiliznd operatorul new aplicat obiectului rdcin Object, unui obiect predefinit din setul { Global , Object , Function , Array , String , Boolean , Number , Math , Date}, unui obiect din ierarhia JavaScript sau unui obiect definit de programator. Referinele la obiecte se pot face fie indexat (ex. document.forms[0]) fie prin nume (ex. document.nume_forma1). Navigarea n structura documentului se face pe baza relaiei de tip printe descendent, utilizndu-se notaia de identificare a obiectelor dintr-o ierarhie de clase. Exemplul urmtor conine un document simplu HTML i identificatoarele obiectelor pe care le conine, conform ierarhiei DOM-HTML.

33

Cod HTML
<OL id=lista_nivel1> <LI>element1</LI> <LI>element2</LI> <LI>element3</LI> <UL> id=lista_nivel2> <LI>element4</LI> <LI>element5</LI> <LI>element6</LI> </UL> </OL>

Identificare DOM
document.lista_nivel1 document.lista_nivel1[0] document.lista_nivel1[1] document.lista_nivel1[2] document.lista_nivel1.lista_nivel2 document.lista_nivel1.lista_nivel2[0] document.lista_nivel1.lista_nivel2[1] document.lista_nivel1.lista_nivel2[2]

Identificarea obiectului este utilizat pentru realizarea de operaii asupra lui, n momentul apariiei unui eveniment. Exist un model al evenimentelor ce pot fi detectate la nivelul browserului. Acesta sunt lansate, n general, de aciuni (gesturi) ale utilizatorului. Detectarea i posibilitatea de tratarea lor permit realizarea de documente interactive. Evenimentele sunt declanate de operaii asupra controalelor din pagina Web (ex. Button, Submit) sau de operaii mai generale de interfa. Evenimentele sunt detectate de browser care lanseaz, la client, funcia definit (n general n limbaj de scripting) pentru tratarea lor. Definirea funciilor se face n manier clasic, conform urmtoarei sintaxe generale:
function Nume_funcie(list_argumente)

Exist mai multe variante sintactice pentru definirea unei funcii. Fie funcia care calculeaz ptratul numrului indicat ca parametru. Urmtoarele trei definiii ale acesteia sunt echivalente:
function square(x) {return x*x;} var square = new Function(x, return x*x;); var square = function(x){return x*x;}

2.3.3. Modelul evenimentelor Codul JS la client este destinat, n general, tratrii evenimentelor ce provin de la interfaa cu utilizatorul sau de la navigator. Agentul utilizator reprezint clientul Web i este un superset pentru browser. Suportul pentru HTML dinamic ofer posibilitatea tratrii unor manevre utilizator direct la client, far a fi necesar o curs la server. Pentru aceasta se utilizeaz suportul interactiv oferit de sistemul de operare pe care este instalat agentul de utilizator, care transmite aplicaiei (browser), prin mecanismul de callback, evenimentele detectate la interfaa cu utilizatorul. Sistemul de operare detecteaz evenimentul (de exemplu o manevr cu mouse), transmite informaiile ce definesc manevra (poziie cursor, buton

34

apasat, etc) la agentul de utilizator. Agentul utilizator este responsabil cu realizarea corespondenei ntre aceste informaii i pagina Web curent, adic ntre elementul din pagin i rutina de tratare a evenimentului respectiv. Evenimentele transmise de sistemul de operare sunt pstrate ntr-o coad de ateptare la agentul utilizator, n vederea tratrii lor. JavaScript are definit un set de evenimente intrinseci care sunt recunoscute de ctre agentul utilizator. Pentru aceasta agentul utilizator include o rutin de ascultare a evenimentelor (event listener), oferind astfel suportul pentru lucrul cu evenimente. Aceste evenimente sunt standardizate, pentru a fi recunoscute de orice agent utilizator. Ele sunt tratate la client, utiliznd rutine de tratare a evenimentelor (event handler), specificate n limbaj de scripting, pe pagina Web. Astfel se extinde funcionalitatea clientului cu funciile pentru tratarea acestor evenimente. Specificarea corespondenei ntre eveniment i rutina de tratare a sa se face indicnd numele evenimentului ca atribut al unei etichete. Codul de tratare poate fi plasat inline ca valoare a atributului respectiv sau, ca valoare a atributului se poate specifica apelul unei funcii destinat tratrii evenimentului i definit n antetul paginii Web.
<IMG NAME=imagine SRC=fisier.gif onClick=Functie1();>

Urmtorul tabel conine lista evenimentelor HTML 4


Eveniment Onload onunload Onreset Onclick ondblclick Onmousedown onmouseup onmouseover onmousemove onmouseout Onfocus Onblur onkeypress onkeydown Onkeyup onsubmit Onselect onchange Descriere Finalizarea ncrcrii unei ferestre sau set de frame-uri similar Reiniializare formular Click buton mouse Dublu click buton mouse Buton mouse apsat Buton mouse eliberat Cursorul de mouse intra n zona elementului din pagin Cursorul de mouse se mic peste elementul din pagin Cursorul de mouse iese din zona elementului din pagin Focalizarea elementului, cu mouse sau tastatur Defocalizarea elementului Apasare i eliberare tast n zona elementului Apasare tast n zona elementului Eliberare tast n zona elementului Transmitere formular Selectarea unui text Modificarea valorii unui control ntre momentul pierderii focalizrii i momentul n care a recptat focalizarea Etichete BODY, FRAMESET BODY, FRAMESET FORM Orice eticheta pentru marcarea unui element afiabil Idem Idem Idem Idem Idem Idem LABEL, INPUT, SELECT, TEXTAREA, BUTTON Idem Orice eticheta pentru marcarea unui element afiabil Idem Idem FORM INPUT, TEXTAREA INPUT, SELECT, TEXTAREA

35

2.3.4. Structura paginilor HTML ce conin JavaScript Codul de scripting poate s apar att n antetul paginii Web ct i n zona de coninut propriu-zis. Codul din antetul paginii Web (<HEAD>) este marcat cu tag-ul <SCRIPT> i conine definiii de funcii i de obiecte. Codul din pagina Web (<BODY>) poate fi marcat cu tag-ul <SCRIPT> sau poate fi ncadrat ntre dac se afl n interiorul altui tag, ataat unui eveniment, i conine apeluri de funcii i instruciuni. Exemple Pentru descoperirea valorilor proprietilor obiectelor se foloseste urmtorul cod de scripting:
<SCRIPT > var s= for (v in tip_obiect) s+=v+\n; alert(s); </SCRIPT>

Dac, de exemplu, n codul de mai sus nlocuim tip_obiect cu navigator se obin proprietile obiectului navigator. Urmtorul exemplu ilustreaz gestionarea evenimentelor cu cod de scripting la nivel de tag:
<IMG NAME=desen1 SRC=d1.gif onkeydown=window.alert(Constanta);> <IMG NAME=desen2 SRC=d2.gif onkeydown=window.alert(Bucuresti);> <IMG NAME=desen3 SRC=d3.gif onkeydown=window.alert(Brasov);>

Pentru a ilustra cele doua variante de definire a codului de scripting integral n


<BODY> i de definire a funciilor n <HEAD> cu apelarea lor din <BODY> se consider o

pagin Web care realizeaz evaluarea expresiilor introduse de utilizator: Pentru prima variant se consider doar operaia de mprire a dou numere ntregi, operaie implementat astfel:
<HTML> <BODY> <SCRIPT language=JavaScript> var nr1 = window.prompt(Primul numar=, 0); var nr1 = window.prompt(Al doilea numar=, 0); var n1,n2; n1=parseInt(nr1); n2=parseInt(nr2); if (n2==0)

36

window.alert(Operatie ilegala); else document.writeln (Rezultatul este +nr1+/+nr2+=+(n1/n2)); </SCRIPT> </BODY> </HTML>

Pentru a ilustra varianta a doua se consider o pagin Web care realizeaz evaluarea oricarei expresii introdus de utilizator. Pentru aceasta se definete n <HEAD> funcia calcul care primete ca argument un obiect de tip form i care utilizeaz funcia de bibliotec eval.
<HTML> <HEAD> <SCRIPT type=text/javascript> function calcul(obiect) { obiect.rezultat.value = eval(obiect.expr.value); } </SCRIPT> </HEAD> <BODY> <FORM name=evaldinamic> <p> Introduceti o expresie cu valori numerice: <INPUT type=text name=expr size=40> <INPUT type=button name=buton value=Calculeaza! onclick=calcul(this.form)> <p> Rezultatul este: <input type=text name=rezultat size=20> </FORM> </BODY> </HTML>

Una din cele mai frecvente aplicaii ale scriptingului la client este realizarea validrii informaiilor introduse ntr-o form, nainte ca aceasta s fie trimis la server. Urmtoarea form, definit n seciunea BODY a paginii Web, conine cmpuri pentru preluarea unor informaii despre client. O parte din cmpuri trebuiesc completate n mod obligatoriu, lucru identificat prin valoarea true a atributului form.field.optional. De asemenea, un alt criteriu de validare apare la cmpurile numerice pentru care se testeaz tipul coninutului introdus de utilizator care trebuie s fie numeric i pentru care se pot defini, de asemenea, valori minime i maxime admise. Validarea se face pe evenimentul onSubmit folosind funcia verify(f) definit n seciunea HEAD a paginii Web, funcie ce primete ca argument obiectul form pentru cmpurile creia care se face validarea.

37

<BODY> <FORM onSubmit=" this.nume.optional = true; this.telefon.optional = true; this.zip.min = 0; this.zip.max = 99999; return verify(this); "> Nume: <INPUT TYPE=text NAME="nume"> Prenume: <INPUT TYPE=text NAME="pnume"><BR> Adresa:<BR><TEXTAREA NAME="adr" ROWS=4 COLS=40></TEXTAREA><BR> Cod Zip: <INPUT TYPE=text NAME="zip"><BR> Numar telefon: <INPUT TYPE=text NAME="telefon"><BR> <INPUT TYPE=submit> </FORM> </BODY>

n seciunea HEAD sunt definite dou funcii. Prima, isblank(s), identific irurile formate numai din spaii i este folosit de cea de a doua, verify(), responsabil cu validarea coninutului completat n form.
<HEAD> <SCRIPT LANGUAGE="JavaScript1.1">
// Funcia care ntoarce true dac irul primit ca argument conine doar spaii

function isblank(s) { for(var i = 0; i < s.length; i++) { var c = s.charAt(i); if ((c != ' ') && (c != '\n') && (c != '\t')) return false; } return true; }
// Funcia ce realizeaz validarea formei, apelat de rutina de tratare a evenimentului onSubmit. Aceast // rutin ntoarce exact valoarea ntoars de funcia verify(f).

function verify(f) { var msg; var empty_fields = ""; var errors = ""; for(var i = 0; i < f.length; i++) { // parcurge obiectele din form, identificate prin index var e = f.elements[i];

38

if (((e.type == "text") || (e.type == "textarea")) && !e.optional) { // izoleaz obiectele de tip text i textarea care nu sunt opionale if ((e.value == null) || (e.value == "") || isblank(e.value)) { // creaz un ir ce conine numele obiectelor care trebuie s conin text explicit empty_fields += "\n" + e.name; continue; }
// Identific cmpurile ce trebuie s fie numerice

if (e.numeric || (e.min != null) || (e.max != null)) { var v = parseFloat(e.value); if (isNaN(v) || ((e.min != null) && (v < e.min)) || ((e.max != null) && (v > e.max))) { errors += "- Campul " + e.name + " trebuie sa fie un numar"; if (e.min != null)
// verific n raport cu valorile minime i maxime impuse, acolo unde este cazul

errors += " mai mare decat " + e.min; if (e.max != null && e.min != null) errors += " si mai mic decat " + e.max; else if (e.max != null) errors += " mai mic decat " + e.max; errors += ".\n"; } } } }
// n caz de eroare afieaz mesajul corespunztor i este ntoars valoarea false, ceea ce nu permite // trimiterea formei la server // Dac nu sunt erori se ntoarce valoarea true care va declana trimiterea formei la server

if (!empty_fields && !errors) return true; msg = "__________________________________________\n\n" msg += "Forma nu a fost transmisa datorita urmatoarelor erori.\n"; msg += "Corectati-le si retransmiteti\n"; msg += "__________________________________________\n\n" if (empty_fields) { msg += "- Urmatoarele campuri obligatorii sunt necompletate:"+ empty_fields + "\n"; if (errors) msg += "\n"; }

39

msg += errors; alert(msg); return false; } </SCRIPT>

2.4 APPLET
Applet este o aplicaie Java apelat dintr-un document HTML i ncrcat de pe server n momentul accesrii paginii Web ce conine documentul respectiv. Applet-ul este executat n regim de interpretare de ctre maina virtual Java a browserului de pe maina clientului. Execuia acestuia are loc ntr-o fereastr proprie. Un applet este o component Java. Ca orice component, acesta se conformeaz unei interfee. Interfaa applet este definit n pachetul java.applet.* i conine metodele definite n tabelul de mai jos.
Nume metod Funcie
Iniializare (in general, a componentelor grafice) Crearea firelor de execuie. Pornirea firului principal. Actualizarea zonei de afiare ocupat de applet Oprete firele de execuie

Cnd se execut
La instaniere applet.

Comentarii
nlocuieste main(). Trebuie (re)definit de ctre programator.

init()

start()

Imediat dupa init() i la fiecare (re)afiare a applet-ului. Apelat de update(). Primete ca parametru contextul grafic al platformei pe care se afl browser-ul. Firele de execuie oprite nu mai pot fi repornite

paint(Graphic s g) Stop()

Destroy()

Eliberarea resurselor deinute de applet

nainte de destroy(). Cnd applet-ul dispare din fereastra curenta a navigatorului. La ncarcarea altei pagini. Cnd navigatorul elimin applet-ul.

2.4.1 Apel applet Apelarea unui applet se face dintr-un fiier HTML. Pentru aceasta se utilizeaz tag-urile specializate <APPLET> i <PARAM>. n tag-ul <APPLET> se specific identificatorul (CODE) i localizarea (CODEBASE) fiierului *.class ce conine codul applet-ului, dimensiunile ferestrei n care se va afia applet-ul (HEIGH, WIDTH), identificatorul obiectului applet n restul sistemului (NAME) i un text ce apare n linia de stare (ALT). Setul atributelor tag-ului este
{CODE, CODEBASE, HEIGH, WIDTH, NAME, ALT}

40

Tag-ul <APPLET> are urmtoarea sintax general:


<APPLET CODE = App.class [CODEBASE = url] HEIGH = val_h WIDTH= val_w [NAME=nume_app] [ALT=text]>

Ca oricrui program, unui applet i se pot trimite prametrii. Pentru transferul de parametrii se utilizeaz tag-ul <PARAM> pentru specificarea numelui i valorii fiecrui parametru. Setul atributelor tag-ului este {NAME, VALUE} iar sintaxa general este urmtoarea:
<PARAM NAME=nume_parametru VALUE=valoare_parametru>

Structura codului HTML pentru aplelul unui applet conine tag-ul <APPLET> n interiorul cruia este coninut lista parametrilor de apel, astfel:
<APPLET ...> <PARAM ...> <PARAM ...> ... </APPLET>

2.4.2 Operatiile realizate de browser Browser-ul Web conine un container pentru ncrcarea i executarea componentelor de tip applet. Acest container se interfaeaz cu metodele clasei applet i lanseaz un mecanism specific ce st la baza exploatarii applet-ului.
init() start() paint() destroy() Obiectul applet stop()

Container

Acest mecanism execut o succesiune de operaii. Mai nti are loc ncrcarea codului (bytecode) applet-ului de pe server, conform valorilor atributelor tag-ului APPLET. Urmeaz instanierea clasei. Pe obiectul astfel obinut are loc apelul metodei init() urmat automat de apelul metodei start(). Funcie de evenimentele din sistem, determinate n special de gesturile utilizatorului, se lanseaz corespunztor metodele stop(), paint(), destroy().

41

Un applet prezint utilizatorului o interfa, format dintr-o colecie de componente grafice (GUI), definit de programator. Fiecare component grafic este o surs de evenimente pentru aplicaia applet, evenimente ce pot fi lansate prin aciuni ale utilizatorului (prin acionarea mouse-lui sau tastaturii). Spre deosebire de cod scripting la client care realizeaz nregistrarea ca ascultator de evenimente prin realizarea corespondenei ntre eveniment i codul de tratare a acestuia direct ca atribut al obiectului din interfa, applet-ul se nregistreaz ca ascultator la aceste surse de evenimente prin adaugarea explicit a unei interfee de ascultare la fiecare componenta grafic surs de evenimente, astfel: Identifica obiectul applet
componenta_sursa_de_evenimente.addActionListener(this)

Fiecare apariie a unui eveniment este tratat de applet conform definiiilor din codul su, definiii aflate n implementarea, de ctre applet, a metodei actionPerformed() a interfeei ActionListener . Metoda actionPerformed() este lansat de cte ori apare un eveniment GUI, eveniment transmis acesteia ca parametru. Ea are funcia de dispecer de evenimente. n cadrul metodei are loc identificarea sursei evenimentului, urmat de tratarea acestuia. Corespondena ntre eveniment i codul de tratare al acestuia este realizat prin instruciuni de test din aceast metod. Fie urmtorul applet simplu care realizeaz suma i produsul a doua numere. Sgeile indic modul de specificare a corespondenei ntre eveniment i codul pentru tratarea lui.
import java.applet.Applet; import java.awt.*; public class Produs extends Applet { TextField t1, t2; Button b; public void init() { t1 = new TextField(20); t2 = new TextField(20); t3 = new Label(20); b1= new Button(SUMA); b2= new Button(PRODUS); add(t1); add(t2); add(t3); add(b1); add(b2); b1.addActionListener(this); b2.addActionListener(this); } public void actionPerformed(ActionEvent ev) {

42

if(ev.getSource() instanceof Button) { if(ev.getActionCommand().equals(SUMA) t3.setText(parseInt(t1.getText()+parseInt(t2.getText());

if(ev.getActionCommand().equals(PRODUS) t3.setText(parseInt(t1.getText()*parseInt(t2.getText()); } }

Codul JavaScript la client echivalent este urmtorul. Sgeile indic, de asemenea, corespondena ntre eveniment i codul pentru tratarea lui.
<HTML> <HEAD> <SCRIPT type=text/javascript> function suma(f) { f.t3.value = parseInt(f.t1.value) + paresInt(f.t2.value) } function produs(f) { f.t3.value = parseInt(f.t1.value) * parseInt(f.t2.value) } </SCRIPT> </HEAD> <BODY> <FORM ...> <INPUT TYPE=text NAME=t1 SIZE=20> <INPUT TYPE=text NAME=t2 SIZE=20> <INPUT TYPE=text NAME=t3 SIZE=20> <INPUT TYPE=button NAME=b1 VALUE=SUMA onClick=suma(this);> <INPUT TYPE=button NAME=b2 VALUE=PRODUS onClick=produs(this);> </FORM> </BODY> </HTML>

43

2.5 STRII PERSISTENTE LA CLIENT


2.5.1 COOKIE-s Protocolul HTTP, bazat pe cerere-rspuns, transmite n antetul cererii o serie de informaii despre cerere i client, informaii care nsa nu sunt memorate la server, fiind disponibile doar pe parcursul tratrii cererii curente. Astfel, serverul nu pstreaza nici un fel de informaii despre clientii si i despre starea acestora. Cookies se definete ca fiind un mecanism prin care serverul solicit clientului s memoreze un set de informaii, informaii care supravieuiesc unei curse cerere/rspuns i i au ca perioad de via o sesiune client, sesiune format din mai multe curse cerere/rspuns. De asemenea, cookies pot supravieui i unei sesiuni client. Aceste informaii memorate la client vor extinde coninutul antetului cererii i vor fi transmise de browser odat cu fiecare cerere. Putem spune c aceste informaii formeaz o stare persistenta la client, definind clientul n relaia acestuia cu serverul. Definiiile sunt dependente att de preferinele utilizatorului ct i de setri impuse de la server. Memorarea n cookie a preferinelor utilizatorilor pentru completarea unei anumite forme are avantajul reutilizrii informaiilor deja transmise de utilizator. O alternativ poate fi memorarea acestor preferine ntr-o baz de date la server, dar aceasta induce costuri suplimentare n regsirea datelor, dei ar putea reduce costurile de transfer. Instalarea de cookies necesita operaii de scriere pe maina client si are, de asemenea, implicaii legate de confidenialitate. De aceea, permisiunea instalrii de cookies este setat din preferintele browser-ului. Acesta poate fi setat pentru a accepta implicit, cu confirmare din partea utilizatorului sau a nu accepta instalarea de cookies. Dac este acceptat, instalarea de cookies realizeaz o scriere ntr-un fiier cookies.txt (la Windows)sau cookies (la Unix) pe maina client, fr a avea acces la alte operaii ale acesteia. Acest fiier este localizat n subdirectorul Cookies al directorului personal al utilizatorului. Perioada de via a unui cookie este setat de programatorul acestuia. Solicitarea pentru setarea unui cookie este transmis n antetul mesajului de la server la client n formatul:
... Set_Cookie: definitie cookie ...

Un cookie conine o stare definit sub forma de perechi (nume, valoare) precum i o colecie de atribute de validare a cookie-ului: expires, domain, path i secure. 2.5.2 Crearea unui cookie Definiia unui cookie conine perechile (nume, valoare) care definesc starea clientului i valorile atributelor de validare. Atributul expires are ca valoare data expirrii cookie-ului, aceasta fiind implicit nchiderea sesiunii navigatorului.

44

Atributul domain este utilizat pentru specificarea domeniului (ex. ovidius.ro) n care se afl mainile care au dreptul de a accesa informaiile din cookie. Dac acestui atribut i este ataat i un indicator de acces TRUE, toate mainile din domeniul specificat au acest drept. Dac nu se specific acest atribut, accesul este permis implicit mainii pe care se execut serverul Web care a generat cookie-ul respectiv. Atributul path conine un subset de URL-uri din domeniul specificat, pentru a preciza drepturile de acces la cookie. Dac se seteaz atributul secure, cookie-ul va fi transmis numai dac tranzacia este de tip HTTPS(secure). Clientul va transmite cookie-ul dac sunt ndeplinite toate condiiile specificate prin valorile atributelor de validare. Sintaxa general pentru setarea unui cookie este urmtoarea:
Set_Cookie: nume_1=valoare_1;nume_2=valoare_2; ...; expires=data;path=cale;domain=domeniu;secure.

Starea memorata n cookie este transmis de la client la server n antetul cererii conform urmtoarei sintaxe:
Cookie:nume_1=valoare_1;nume_2=valoare_2;...;nume_k=valoare_k.

Aceast transmisie are loc dac sunt indeplinite condiiile specificate n atributele de validare din definiia cookie-ului. ntr-o tranzacie HTTP se pot transmite mai multe solicitri pentru setare de cookie-uri, dimensiune lor fiind limitata la 4koct. Astfel, n antetul unui rspuns de la server la client pot s apar mai multe linii Set_Cookie cu definiii6. 2.5.3 tergerea unui cookie n cazul clasic, tergerea unui cookie este comandat de la server prin transmiterea unei alte setri de cookie cu acelai nume, cu valoare nul i cu timpul de expirare setat n trecut. Totui tergerea se mai poate face fie din navigator, fie acionnd direct asupra fiierului cookies de pe maina clientului. 2.5.4 Accesul clientului la cookie Informaiile din cookie-uri sunt gestionate de navigator. Ele sunt disponibile la client prin accesarea obiectului document.cookie. Acesta se poate afia i prin specificarea la navigator a locaiei:
javascript:document.cookie

Unele browser-e limiteaz totui numrul de cookies (ex. Netscape =20).

45

3. ARHITECTURI PENTRU EXTINDERE FUNCIONALITATE LA SERVER 3.1 CONTAINER-ul WEB


Extinderea funcionalitii la server se face prin includerea de cod definit de programator i care se va executa asupra resurselor aflate la server pentru a genera pagini Web ce vor fi transmise la client. Aceste pagini au coninut dinamic, creat n momentul solicitrii, de ctre o aplicaie ce se execut la server. Pentru aceasta, pe lng intefeele cu clientul i cu sistemul de fiiere, serverul Web conine i o interfa la care se conecteaz aplicaii. Serverul Web cu acest sistem de interfee reprezint un container, containerul Web, n care se conecteaz toate componentele ce formeaz site-ul Web. Putem considera c avem de a face cu un container Web particular i n cazul arhitecturilor fr extinderea funcionalitii la server, caz n care componenta conectat este reprezentat doar de sistemul de fiiere.

CONTAINER WEB
WebServer Browser client cerere rspuns Interfa client Interfa aplicaii Motor servlet Interfa cu sistemul de fiiere

CGI parser

Motor SSJS

aplicaie

JSP Servlet

Script Java

Interfee la baze de date (JDBC, ODBC)

Fiiere *.html, *.css, *.js, *.class

Fig.13 Arhitectur pentru extindere a funcionalitii la SERVER

n figura xx este reprezentat o arhitectur Web pentru extinderea funcionalitii la server orientat pe tehnologii Java. n general, interfaa cu aplicaiile conine instrumentele de lansare, de execuie a aplicaiilor i de comunicare de informaii cu acestea.

46

Lansarea aplicaiilor se face sub controlul interpretorului corespunztor tipului lor. Astfel, o aplicaie n C este deja compilat i va fi executat de sistemul de operare al mainii gazd. O aplicaie n limbaj de scripting va fi executat de interpretorul corespunztor limbajului. Limbajul poate fi shell-ul sistemului de operare sau un limbaj specializat pentru programare n Web (Perl, PHP, SSJS, JSP, ASP, etc). Comunicarea de informaii se face, conform unor specificaii standard de interfa (CGI) prin parametri, extrai din irul de interogare coninut n cererea clientului. CGIparser este un exemplu de component care realizeaz extragerea acestor parametri. Limbajele specializate pentru programare n Web conin obiecte predefinite care modeleaz cererea clientului i rspunsul serverului, informaiile fiind n acest caz obinute din proprietile corespunztoare ale obiectelor respective.

3.2 CGI (Common Gateway Interface)


CGI este o interfa cu server-ul Web implementat de programe scrise n limbaj C de componente ActiveX (coninute n fiiere .dll i .exe), de script-uri (shell SO, Pearl), n vederea comunicrii de informaii cu serverul Web. Specificaia CGI se refer la componentele cererii i rspunsului. Referitor la cerere, interfaa CGI definete o form de identificare a elementelor din cererea clientului. Despre rspuns se precizeaz c este scris la ieirea standard i este formatat conform protocolului HTTP Elementele din cererea clientului sunt reprezentate de valorile pe care le iau controalele formularelor. Conform specificaiilor CGI, un control cu numele tip al formei de dialog cu utilizatorul este identificat cu $FORM_tip i se obine n urma prelucrrii irului QUERY_STRING cu utilitarul cgiparse. La server se creaz un proces ce rspunde acestei cereri prin lansarea aplicaiei definit ca valoare a atributului ACTION al formei de culegere a informaiilor de la utilizator. Utiliznd CGI se creaz cte un proces pentru fiecare cerere. Aceasta conduce la performane scazute n raport cu alte tehnologii de programare la server. Contextul de la server conine un set de variabile disponibile aplicaiilor Web. Setul acestor variabile este urmtorul:
{SERVER_SOFTWARE, SERVER_NAME, GATEWAY_INTERFACE, SERVER_PROTOCOL, SERVER_PORT, PATH_INFO, PATH_TRANSLATED, AUTH_TYPE, CONTENT_TYPE, CONTENT_LENGTH, HTTP_ACCEPT, HTTP_USER_AGENT, HTTP_COOKIES, REQUEST_METHOD, SCRIPT_NAME, QUERY_STRING, REMOTE_HOST, REMOTE_USER, REMOTE_IDENT}

Utiliznd aceste variabile aplicaiile pot afla, de exemplu numele i versiunea serverului Web(SERVER_SOFTWARE), versiunea specificaiei CGI folosit (SERVER_PROTOCOL), cile virtuale pentru scripturile CGI (PATH_INFO), corespondena cale virtual cale real (PATH_TRANSLATED). De asemenea, programele C conectate la CGI utilizeaz funcia getenv() din biblioteca stdlib pentru a prelua i prelucra variabila QUERY_STRING, n cazul specificrii n cerere a

47

metodei GET. Scriptul CGI genereaz raspunsul n format HTML pe care l trimite la server-ul Web utiliznd fiierul stdout. n cazul specificrii metodei POST (pentru volume mai mari de date transmise la server sau pentru informaii confideniale) datele transferate scriptului sunt preluate din fiierul stdout iar lungimea irului n octei din variabila CONTENT_LENGTH. n urmtorul exemplu este prezentat un script, n limbaj Perl, pentru generarea unei pagini Web n care sunt afiate variabilele de context. Variabila ENV este reprezentat sub forma unui tablou asociativ de corespondene ntre numele i valorile variabilelor de context.
#!usr/bin/perl print Content type: text/plain\n\n; print Content : text/plain\n\n; foreach $key (keys %ENV) { printf %16s = %s \n, $key, %ENV{%key};

Un alt exemplu prezint un formular HTML pentru nregistrarea participanilor la o conferin i un script n shell Linux pentru stocarea ntr-un fiier a valorilor preluate n form. Formularul HTML
<form action=httpd://alien/cgi-bin/register.cgi method=GET> Va rugam sa va inregistrati! Numele si prenumele: <input type=text name=name> Universitatea: <input type=text name=univ> Departamentul: <input type=text name=depart> Titlul lucrarii: <input type=text name=paper> <p> <input type=submit value=inregistrare> </form>

Script n shell Linux


#!bin//bash echo Content type: text/html; echo echo <html> echo <head> echo <title>Multumiri</title> echo </head> echo <body><h1>Multumiri</h1> eval /home/httpd/cgi-bin/cgiparse form echo Bine ai venit, $FORM_name ! echo <p>

48

printf %s, %s, $s, $s,\n $FORM_name\ $FORM_univ $FORM_depart \ $FORM_paper >> /home/httpd/conference/participants echo </body></html>

Server side includes (SSI) este o tehnologie simpl pentru extinderea funcionalitii serverului Web. Aceasta permite includerea direct n HTML a unor comenzi ctre maina pe care se afl serverul Web. Sintaxa pentru lansarea unei comenzi suportate de specificaia SSI este urmtoarea:
<!--#command -->

Pentru interpretorul HTML aceast linie reprezint un comentariu n timp ce pentru server reprezint o comand de executat. Rezultatul execuiei va nlocui comentariul n pagina HTML. Un astfel de fiier HTML trebuie s aib extensia .shtml.

3.3 Tehnologii de scripting la server


3.3.1 TEHNOLOGIA ASP (Active Server Pages) ISAPI este acronimul pentru Internet Server Application Programming Interface i reprezint o interfa de programare a aplicaiilor Web pentru serverul IIS Microsoft. Ea este accesibil prin instruciuni VBScript sau Jscript. Interpretorul este orientat pe limbajele VBScript i Jscript dar poate suporta i REXX sau Perl. Interfaa include funcii de conectivitate la baze de date i de execuie de componente ActiveX.

Container WEB Interpretor VBS browser Web server Interpretor JS

Obiecte ActiveX (.dll, .exe) SGBD *.asp

Fig.14 Platforma Microsoft pentru extindere funcionalitate la serverul Web IIS

O caracteristic important este posibilitatea de lucru n regim tranzacional la nivel de pagin Web.

49

O pagin ASP este definit ntr-un fiier *.asp. Ea conine mai multe tipuri de cod: cod (D)HTML i cod scripting executat la server (JScript sau VBScript). Prin intermediul obiectelor create la server se transmite cod specific ctre alte componente de tip ActiveX sau ctre sisteme de gestiune a bazelor de date. Aceste obiecte create la server sunt instane ale componentelor ActiveX utilizate sau obiecte ce modeleaz diferite servicii cum ar fi cele de acces la baze de date (ADODB). Coninutul unei pagini ASP este interpretat de motorul aflat n fiierul Asp.dll (pe calea %WINDIR%\System32\inetsv). Cnd primete o cerere ce conine un URL al unui fisier *.asp, containerul Web lanseaza interpretorul Asp.dll care execut codul din pagina solicitat. Aceast operaie genereaz, dinamic, una sau mai multe pagini HTML. S ne amintim c o cerere ce conine un URL al unui fiier *.html este servit prin transmiterea continuului, static, definit n fiierul *.html. Limbajele VBScript i Jscript sunt subseturi ale limbajelor VisualBasic i Java, cu sintax mai puin restrictiv i cu obiecte predefinite pentru arhitectura client-server corespunztoare tehnologiei Web Limbajul se alege, la nceputul fiierului, cu directiva <%@ LANGUAGE=lang %> unde lang poate lua una din valorile VBScript sau Jscript. Codul de scripting din fiierul ASP este delimitat de marcatorii <% %> . Acest cod nu este vizibil la utilizator deoarece, spre deosebire de codul de scripting marcat cu <SCRIPT> sau de codul corespunztor unui applet, nu ajunge la browser ci este executat direct pe server. La client (browser) ajunge doar rezultatul execuiei acestuia, sub forma de pagini (D)HTML. Exemplificm n continuare cteva variante sintactice de cod ASP. 1. <% = expresie %> Cod pentru definirea unei expresii al crei rezultat este inclus direct n pagin. 2. <%call f( )%> Cod pentru apelul unei funcii. 3. <% set C1 = Sever.CreateObject(nume_Serv.nume_obiect) Cod pentru crearea unui obiect de tip nume_obiect furnizat de un serviciu identificat prin nume_Serv. 4. <OBJECT RUNAT=Server Id=C2 PROGID=nume_Serv.nume_obiect> Cod pentru instanierea unui obiect de tip nume_obiect furnizat de un serviciu identificat prin nume_Serv. 5. <OBJECT RUNAT=Server Id=C2 CLASSID=clsid:nr_unic_obiect> Cod pentru instanierea unui obiect de tip identificat cu identificatorul numeric al clasei. De asemenea, se poate importa cod aflat n fiier extern, prin utilizarea clauzei #include astfel:

50

<!--#include virtual=nume_f>

pentru cod importat dintr-un fiier localizat cu o cale virtual


<!--#include file=nume_f>

pentru cod importat dintr-un fiier localizat cu o cale relativ la directorul curent 3.3.2 Modelul Obiect al tehnologiei ASP Obiectele predefinite n tehnologia ASP sunt orientate pe specificul protocolului HTTP (request i response) i pe dezvoltarea de aplicaii la server (server, session, application). Obiectul Request modeleaz cererea de la client. Acesta poate fi utilizat pentru extragerea componentelor cererii HTTP. Obiectul Response reprezint rspunsul serverului la cererea clientului i este utilizat pentru a construi dinamic acest rspuns. Obiectul Server modeleaz contextul de execuie a scripturilor ASP. Una din metodele sale importante este CreateObject utilizat pentru crearea obiectelor de tipuri diferite de cele predefinite, utilizate n aplicaie. Obiectul Session este folosit pentru gestionarea informaiilor la nivel de sesiune utilizator. Obiectul Application permite gestionarea de informaii la nivel de aplicaie, accesibile tuturor utilizatorilor acesteia. 3.3.2.1 Obiectul Request Obiectul Request conine urmtoarele proprieti, reprezentate prin colecii:
QueryString Form Cookies ClientCertificate ServerVariables TotalBytes

irul de interogare. valorile cmpurilor din formular.


valorile corespunztoare cookies

informaii despre certificatele de autentificare variabilele contextului la server


(ex. SERVER_PORT, REMOTE_ADDRESS, etc.)

dimensiunea mesajului

Pentru a specifica obiectul identificat cu tip al unei forme se utilizeaz sintaxa Request.Form.(tip) . Forma de utilizare Request(tip) este mai general i permite specificarea oricrui element al obiectului Request identificat cu tip, cutarea acestuia fcnduse n toate coleciile proprietilor obiectului, n ordinea de mai sus. Obiectul Request are o singur metod, BinaryRead, utilizat pentru citirea informaiilor transmise de la client cu metoda POST a protocolului HTTP. 3.3.2.2 Obiectul Response Obiectul Request conine un set de proprietti dintre care proprietatea Cookies este reprezentat printr-o colecie. Restul proprietilor sunt Buffer (Y/N), CacheControl(Y/N permisiune pentru caching la proxy-s), Charset,

51

ContentType,

Expires,

ExpiresAbsolute,

IsClientConnected,

Pics

(eticheta PICS ) i Status coninutul liniei de stare ntoars de server. Obiectul Response conine metode pentru pregatirea i trimiterea rspunsului. Metoda Write este utilizat pentru construirea dinamic a paginii Web ce va fi trimis la client. Pentru scrierea unui text n pagina creat dinamic se poate folosi fie forma <% = text%> prin care valoarea unei expresii (n cazul nostru irul text) este inclus direct n pagina Web,fie forma general care utilizeaz obiectul Response.
Response.Write(text)

Alte metode ale obiectului Response sunt BinaryWrite pentru scriere binar, Redirect pentru redirectarea utilizatorului spre alt URI, AddHeader pentru generarea antetului, AppendToLog pentru introducerea cererii n log-ul de pe serverul Web, Clear pentru stergerea ieirilor HTML buffer-ate, End pentru oprirea execuiei codului ASP cu ntoarcerea rezultatul i Flush pentru a fora transmiterea coninutului bufferului. Obiectul Server are proprietatea ScriptTimeout a crei valoare reprezint timpul limit de executare a scriptului. Principala metod este CreateObject utilizat pentru crearea instanelor de componente la server. Acestea pot fi instane de componente ActiveX sau de componente standard incluse n motorul ASP. Principalele componente incluse n motorul ASP sunt componenta de acces la baze de date (ADODB), componenta de interogare a capabilitilor navigatorului (MSWC.BrowserType), componenta pentru lucrul cu fiiere i componenta pentru realizarea legturilor ntre documente. Metoda HTMLEncode realizeaz codificare HTML a unui ir indicat, metoda MapPath permite maparea unei ci virtuale sau a uneia relative la o cale fizic iar metoda URLEncode este utilizat pentru codificarea unui ir corespunztoare regulilor URL. 3.3.3 Aplicaii ASP O aplicaie ASP este o aplicaie client-server, comunicarea facndu-se conform protocolului HTTP. O aplicaie ASP este coninut ntr-o subcolecie de fiiere din site-ul Web. Un site Web este o colecie de fiiere plasate n directorul rdcina al site-ului, specific fiecarui tip de server Web. In cazul IIS, acest director este Inetpub/wwwroot. Orice fiier plasat n acest director este identificat cu un URL de tipul :
http://nume_server/nume_fiier

Un site Web poate conine o ierarhie de directori. Fiecrui director din aceast ierarhie i se poate asocia un alias numit director virtual pentru a simplifica structura URL-ului fiierelor coninute n el. Orice director virtual este un subdirector de prim nivel al rdcinii site-ului Web. Astfel, dac, pe serverul cu numele labinfo se afl un fiier myfile.asp localizat n directorul c:\InetPub\wwwroot\studenti\mi4\laborator5 iar acestui director i s-a creat un alias cu numele labASP atunci URL-ul fiierului va fi:

52

http://labinfo/labASP/myfile.asp

Crearea unui director virtual este, de fapt, crearea unei corespondene ntre numele dat directorului virtual i identificatorul directorului fizic. Aceasta este o operaie ce se realizeaz utiliznd funciile de administrare oferite de gestionarul serviciilor Internet (Internet Services Manager). O alt utilitate important a directorilor virtuali este legat de faptul c pentru fiecare dintre acetia se pot defini i gestiona drepturi individuale de acces. Drepturile de acces pot fi pentru citire (read), executare de scripturi (script), scriere (write). Putem defini aplicaia ASP ca fiind totalitatea fiierelor .asp dintr-un director virtual (reprezentnd rdcina aplicatiei) i din subdirectoarele acestuia. Pe directorul virtual al unei aplicaii este necesar acordarea drepturilor de read i execute. Exist trei domenii de vizibilitate ale variabilelor unei aplicatii ASP. Primul domeniu de vizibilitate este la nivelul unei tranzacie HTTP reprezentat de o curs la server. Urmtorul domeniu de vizibilitate este reprezentat de o sesiune utilizator care ncepe de la prima accesare a unui fiier al aplicaiei de ctre utilizator i se termin la comutarea ctre alt aplicaie, la nchiderea browser-ului sau dup o o anumit perioad de inactivitate la client. Al treilea domeniu de vizibilitate se situeaz la nivelul aplicaiei i este reprezentat de toi utilizatorii cureni ai acesteia. n vederea gestionrii informaiilor de stare ale unei aplicaii Web cu clieni multipli, fiecare client executnd o sesiune proprie ce conine transferuri HTTP (cerererspuns) multiple, sunt utilizate obiectele session i application. 3.3.3.1 Obiectul Application Obiectul application permite partajarea de informaii ntre toi utilizatorii unei aplicaii i este utilizat pentru pstrarea de informaii de stare la nivel de aplicaie, globale, valabile pentru toi utilizatorii acesteia. El conine coleciile contents cu entitile adugate aplicaiei cu comenzi script i StaticObjects cu entitile adugate aplicaiei cu tag-ul <OBJECT>. Metodele obiectului application sunt destinate sincronizrii accesului la informaiile partajate, ele fiind Lock i Unlock. Exist i dou evenimente asociate lansrii, Application_OnStart i repectiv ncheierii aplicaiei, Application_OnEnd. 3.3.3.2 Obiectul Session Odat cu primul acces la o aplicaie, untilizatorul deschide o sesiune de lucru cu aplicaia respectiv. O sesiune poate cuprinde mai multe accese la pagini Web, create static sau dinamic. O sesiune permite definirea i utilizarea unui set de variabile de sesiune prin care se poate asigura transferul de informaii ntre diferite pagini Web. Coninutul variabilelor sesiune este persistent pe timpul sesiunii. Crearea sesiunii se face automat atunci cnd un client specific un URL la un fiier .asp sau la stocarea unei valori ntr-un obiect Session.

53

De exemplu, se creaz o sesiune la setarea unei variabile de sesiune cu comanda


Session(Color) = verde.

Obiectul Session conine informaii de stare la nivel de sesiune utilizator care supravieuiesc unei tranzacii HTTP (cerere-rspuns). Proprietile obiectului Session sunt Contents, colecie ce conine entitile ce descriu sesiunea, StaticObjects colecie cu obiectele create cu <OBJECT> i care au ca domeniu sesiunea, CodePage pentru realizarea corespondenei simbolurilor, LCID identificator local, SessionID identificatorul sesiunii i Timeout timpul maxim de inactivitate la client nainte de nchiderea sesiunii. Obiectul ofer metoda Abandon pentru ncheierea forat a sesiunii. Evenimentele generate de obiectul session sunt asociate lansrii, Session_OnStart, respectiv ncheierii sesiunii, Session_OnEnd. Starea sesiunii este meninut doar pentru browserele care suport Cookies. Identificatorul sesiunii, SessionID, este trimis la client unde va crea un cookie nepersistent corespunztor sesiunii i unde vor fi memorate diverse informaii despre sesiune. Biblioteca ASP conine obiecte i evenimente care permit gestionarea strii. Aceste obiecte asigur funcii de memorare a unui set de informaii specifice sesiunii (stare sesiune) i a unui set de informaii specifice aplicaiei (stare aplicatie), seturi ce pot fi partajate ntre fiiere ASP multiple. 3.3.3.3 Tratarea evenimentelor la nivelul aplicaiei O aplicaie conine fiierul Global.asa (asa de la Active Server Application) localizat n directorul rdcin(virtual) al aplicaiei. Acest fiier este prelucrat de server la o cerere de iniializare a serverului sau la lansarea unei sesiuni pentru un utilizator nou. Fiierul conine cod pentru tratarea evenimentelor de lansare aplicaie (Application_OnStart) i lansare sesiune (Session_OnStart), cod pentru tratarea evenimentelor de terminare aplicaie (Application_OnEnd) i terminare sesiune (Session_OnEnd) precum i cod pentru crearea de obiecte , de obicei componente ActiveX, marcate cu tag-ul <OBJECT>.

3.3.2 PROGRAMARE LA SERVER CU PHP 3.3.2.1 Tehnologia PHP PHP Hypertext Preprocessor este limbaj de programare destinat realizrii de scripturi Web. Motorul PHP este un analizor care interpreteaz codul de scripting pentru a genera dinamic pagini n format (D)HTML. Interpretorul PHP este o extensie a serverului Web APACHE. Din punct de vedere al facilitilor de interfaare cu serverul Web, PHP conine un set de funcii specifice serverului Apache i un set de funcii specifice protocolului HTTP. PHP ofer, de asemenea, funcii pentru programarea i utilizarea de cookies.

54

Din punct de vedere al interfarii cu alte procese i obiecte, PHP conine funcii pentru interconectare cu shell-ul sistemului de operare, cu alte obiect de pe maina client, funcii de interconectare cu baze de date, funcii de interconectare cu sistemul de fiiere. PHP ofera faciliti de interfaare cu date semistructurate reprezentate n XML, cu date memorate n baze de date i accesibile prin SQL i cu date aflate n alte tipuri de fiiere. Limbajul PHP beneficiaz de suport SQL pentru manipularea bazelor de date relaionale, avnd interfee cu majoritatea sistemelor de gestiune a bazelor de date. Prin PHP se asigur acces la sisteme hipermedia. De asemenea, se pot programa operaii de ncarcare fiiere de pe calculatorul clientului pe serverul Web (upload). PHP are o bibliotec bogat de funcii. Pe lnga cele specifice dezvoltrii aplicaiilor Web pe dou i trei nivele, enumerate mai sus, exist funcii de gestiune a timpului, funcii matematice i funcii pentru manipulare funcii. PHP permite dezvoltarea de aplicaii orientate obiect i lucrul cu evenimente. Implementeaz de asemenea, mecanismul de callback pentru care ofer funciile necesare nregistrarii obiectelor. Setul de funcii PHP conine, de asemenea, funciile necesare comunicrii ntre procese prin memorie comun partajat, oferind o implementare pentru semafoare. Ansamblul limbaj i motor PHP, ncepand cu versiunea 4, este un server flexibil de aplicaii destinat dezvoltrii i execuiei de aplicaii Web. 3.3.2.2. Caracteristicile limbajului PHP Variabilele utilizate n programele PHP pot fi definite de programator sau fac parte din dou seturi ce reprezint informaii tipice programrii Web. Un set este reprezentat de controalele din formularele incluse n pagina Web. Identificarea acestor controale cu variabile permite accesarea lor pentru prelucrarea datelor din formular HTML. Un alt set l constituie variabilele care reprezint contextul la server. Sintaxa general a unei variabile n limbaj PHP este urmtoarea:
$nume_variabila

Accesul la variabilele de context se face utiliznd aceeai sintax. Astfel, variabila care conine numele utilizatorului conectat la site-ul Web este identificat prin
$REMOTE_USER.

Variabilele care conin valorile cmpurilor unui formular au sintaxa este valoarea atributului NUME al controlului corespunztor cmpului respectiv. Instruciunile PHP sunt instruciuni tipice programrii structurate. Limbajul ofer o bibliotec bogat de funcii i permite, de asemenea, definirea de funcii de ctre programator folosind cuvntul cheie function. PHP are, de asemenea, un set de constante predefinite cum ar fi PHP_VERSION,
$nume_camp, unde nume_camp TRUE, FALSE.

55

ncepand cu versiunea 4, PHP ofer suport pentru programare OO. Pentru aceasta PHP are proprieti de ncapsulare, motenire i polimorfism, permite definirea de constructori i suprancarcarea. Urmtorul exemplu conine definirea unei clase folosind facilitile limbajului PHP.
<?php class Student { // var. instanta var $nume var $credite //metode function examen() { $this->credite=$this->credite+5; } function examen($credite) { $this->credite=$this->credite+$credite; } } ?>

Crearea unui obiect prin instanierea acestei clase se face utiliznd operatorul new.
$stud = new Student;

Acest obiect poate fi utilizat, de exemplu, apelnd una din metodele lui n varianta sintactic
$stud->examen(6);

sau n varianta sintactic


$stud::examen(6);

3.3.2.3 Sesiuni i variabile globale ale unui script La nivelul unui script exist posibilitatea definirii i utilizrii de variabile globale. $_GLOBALS este variabila care identific o structur asociativ de tip tabel care conine referine la toate variabilele globale ale scriptului curent. $GLOBALS este o variabila global automat (superglobal) ce poate fi accesat n funcii i metode PHP. Sintaxa de utilizare a acesteia este urmatoarea:
$_GLOBALS[nume_var_globala]

De asemenea, la nivelul fiecrei sesiuni utilizator se pot defini i utiliza variabile de sesiune. $_SESSION este variabila care reprezint tabela asociativ ce conine variabilele sesiune disponibile scriptului curent.

56

$SESSION este, de asemenea, o variabil global automat (superglobal) ce

poate fi accesat n funcii i metode PHP, sintaxa pentru utilizarea ei fiind:


$SESSION[nume_var_sesiune]

PHP ofer un set de funcii pentru gestionarea sesiunilor utilizator. Modul de gestionare a sesiunilor de ctre PHP este setat n fiierul de configurare
php.ini

Crearea unei sesiuni utilizator se face utiliznd functia session_start() care creaz o sesiune i ntoarce un identificator al acesteia.
s_ID = session_start()

Variabilele sesiune reprezint o colecie de chei (key) care pot fi memorate n cookies sau propagate prin URL. nregistrarea unei variabile ntr-o sesiune se face prin setarea unui nou membru n setul de variabile sesiune, ca n exemplul urmtor.
<?php session_start(); if (!isset($_SESSION['count'])) { $_SESSION['count'] = 0; } else { $_SESSION['count']++; } ?>

Eliminarea unei variabile dintr-o sesiune se face utiliznd funcia unset


<?php session_start(); // Use $HTTP_SESSION_VARS with PHP 4.0.6 or less unset($_SESSION['count']); ?>

Urmtorul exemplu utilizeaz o pagin (pagina 1) pentru a seta variabilele sesiune i o alt pagin (pagina 2) pentru a verifica vizibilitatea acestora la nivelul sesiunii. n fiierul pag1.php exist urmatoarea secven de cod PHP:
<?php session_start(); echo 'Aceasta este prima pagina'; $_SESSION['student'] = 'Popescu'; $_SESSION['an studii'] = 'IV'; $_SESSION['specializarea'] = 'Mate-info';

57
// Varianta in care este acceptat cookie

echo '<br /><a href="pag2.php">Catre pagina 2</a>';


// Varianta in care nu este acceptat cookie si este necesar transferul ID-ului de sesiune in sirul de interogare

echo '<br /><a href="pag2.php?'.SID.'">Catre pagina 2</a>'; ?>

n fiierul pag2.php exist urmatoarea secven de cod PHP:


<?php session_start(); echo 'Aceasta este a doua pagina<br />'; echo $_SESSION['student']; // Popescu echo $_SESSION['an studii']; // IV echo $_SESSION['specializarea']; // Mate-info echo '<br /><a href="pag1.php">Catre pagina 1</a>'; ?>

Urmtoarea secven de cod este destinat contorizrii numrului de vizite efecuate de un utilizator la pagin i exemplific transferul identificatorului de sesiune prin URL, ca parametru, ca i existena simultan de cod HTML i PHP ntr-un fiier PHP.
<?php if (!session_is_registered('count')) { session_register('count'); $count = 1; } else { $count++; } ?> Ati vizitat aceasta pagina de <?php echo $count; ?> ori.<p>

58

4. ACCESUL LA DATE PERSISTENTE 4.1 COMPONENTE ActiveX


Componentele ActiveX sunt dezvoltate conform standardului COM (Component Object Model). Alinierea la standard permite conectarea componentelor dezvoltate separat. Exist componente ale platformei i, de asemenea, programatorii de aplicaii i pot dezvolta componente proprii. Componentele prezint o interfa format din proprieti i metode. Pentru a putea fi utilizat, componenta este instaniat. Pentru aceasta se lanseaz metoda CreateObject a obiectului predefinit Server al tehnologiei ASP. Una din componentele importante ActiveX modeleaz sistemul de fiiere. Aceasta este Scripting.FileSystemObject.Utilizarea acestei componente permite accesul aplicaiilor ASP la informaii persistente stocate n memoria extern. Instanierea genereaz un obiect care intermediaz accesul la sistemul de fiiere.
set fs = server.CreateObject(Scripting.FileSystemObject)

Operaiile ce se pot executa asupra acestei componente sunt operaii clasice ale sistemului de fiiere. Crearea unui fiier se face cu metoda CreateTextFile or CreateFolder, deschiderea cu metoda OpenTextFile, copiere cu metoda CopyFile. De asemenea, pe obiectul de tip FileSystemObject sunt disponibile metodele GetDrive, GetFolder i GetFile care returneaz obiecte de tip unitate de disc, director i respectiv fiier. Urmtorul exemplu realizeaz modificarea coninutului unui fiier de tip text. Operaia de deschidere a fiierului este lansat asupra obiectului care modeleaz sistemul de fiiere pentru a se obine un obiect de tip fiier. Acest obiect este n continuare utilizat pentru realizare operaiilor asupra coninutului fiierului.
// deschiderea fiierului

set ts = fs.OpenTextFile(nume_fis,ForReading,false)
// citirea coninutului fiierului urmat de nchiderea fiierului

s = ts.readall ts.close set ts = nothing


// operaii de modificare a irului s n care a fost citit coninutul fiierului

s = replace(s, ...)
// deschiderea fiierului, scrierea noului coninut i nchiderea fiierului cu eliberarea referinelor la obiectele // folosite.

set ts = fs.OpenTextFile(nume_fis,ForWriting,false) ts.write s ts.close set ts = nothing set fs = nothing

De asemenea, pe obiectul de tip fiier se pot realiza operaii asupra atributelor acestuia.

59

Urmtoarele secvene de cod ilustreaz afiarea datei la care a fost fcut ultima modificare asupra coninutului unui fiier. Prima varianta utilizeaz cod VBScript, a doua cod Jscript.
Dim fso, f1 Set fso = CreateObject("ScriptingFileSystemObject")
'Obinerea obiectului fiier

Set f1 = fso.GetFile("c:\detlog.txt")
' Afiarea informaiilor

Response.Write "Fiierul detlog.txt a fost modificat la " & f1.DateLastModified

var fso, f1; fso = new ActiveXObject("ScriptingFileSystemObject ");


// Obinerea obiectului fiier

f1 = fso.GetFile("c:\\detlog.txt");
// Afiarea informaiilor

Response.Write("Fiierul detlog.txt a fost modificat la " + f1.DateLastModified);

4.2 FUNCII PHP PENTRU OPERAII CU FIIERE


Limbajul PHP ofer un set de funcii pentru operaiile tipice cu fiiere din sistemul de fiiere al mainii gazd. Deschiderea unui fiier se face utiliznd funcia fopen care primete numele fiierului i modul de operare asupra lui (citire, scriere) i ntoarce identificatorul fiierului deschis.
$f_ID= fopen(NUME, MOD)

Restul operaiilor asupra fiierului vor folosi acest identificator. nchiderea fiierului se face cu funcia fclose($f_ID), depistarea sfritului fiierului cu feof($f_ID), citirea din fiier cu fgets($f_ID, size) iar scrierea n fiier cu
fputs($f_ID, $str).

60

4.3 COMPONENTE DE ACCES LA BAZE DE DATE


4.3.1 INTERFEE DE ACCES SI CONEXIUNI LA BAZE DE DATE Sistemele de gestiune a bazelor de date ofer interfee prin care programele pot apela funcii de acces la baza de date. Aceste interfee conin funcii dinamice de acces la baza de date, comenzile de acces nefiind precompilate ci realizate n regim interpretativ, la cerere. n sistemele distribuite ce conin baze de date multiple, standardizarea este o cerin deosebit de important. Aceasta asigur, la nivelul programelor, un acces transparent la orice tip de baza de date. ODBC (Open DataBase Connectivity) definete o interfa standard pentru acces la baze de date. El este unul din standardele de conectare, la sisteme de gestiune a bazelor de date, a aplicaiilor scrise n diferite limbaje. Acest standard definete o interfa prin care aplicaiile pot solicita servicii specifice unui server de baze de date. Aceast standardizare permite oricrei aplicaii compatibil cu acest standard s se conecteze la orice server de baze de date ce implementeaz aceasta interfa sub forma unui driver.
APLICATIE: modul 1 apel driver modul n apel driver

Manager driver-e (ODBC, JDBC) (middleware)

DRIVER

DRIVER

Server BD1

Server BDn

Fig. 3.5. Arhitectur de acces la baze de date, utiliznd interfa standard

Apelurile sunt standardizate i sunt gestionate de un nivel intermediar (middleware), care le va transmite driver-ului corespunzator bazei de date ctre care se solicit operaia. ODBC este o interfa dependent de platform. Pentru a se asigura independena de platform a aplicaiilor, limbajul folosit este, n general Java, iar pentru Java a fost dezvoltat JDBC (Java DataBase Connectivity), un set de clase i interfee pentru acces la baze de date relaionale, dupa modelul ODBC. Din punct de vedere al programatorului, acesta utilizeaz funciile standard de acces printr-o interfa la orice baz de date. Ca i ODBC, biblioteca de clase JDBC este implementat

61

i extins prin driver-e oferite de fiecare furnizor de sistem de gestiune a bazelor de date. Un furnizor poate oferi chiar mai multe driver-e, funcie de modalitatea de instalare i de comunicare cu baza de date. Platforma Microsoft are o arhitectur specific. OLEDB reprezint o colecie de intefee care interconecteaz componente de tip productor de date (data provider) i componente de tip consumator de date (data consumer). Productorii preiau datele de la o surs de date. Sursele de date pot fi baze de date dar i fiiere sau csue potale electronice. Accesul la sursa de date se face prin intermediul unui provider. Exist mai multe tipuri de provider-e. Driverul standard ODBC utilizeaz MSDASQL. Providerul JET OLEDB este mai rapid, ofer o funcionalitate mai bogat i este utilizat pentru accesul la SGBD Access. MS SQLServer are, de asemenea, un provider propriu, SQLOLEDB. 4.3.2 ETAPE ALE ACCESULUI STANDARD LA BAZA DE DATE n vederea realizrii accesului la baza de date, un driver va implementa interfaa ce descrie protocolul (JDBC, ODBC, etc.). Aceasta ofer metode pentru realizarea operaiilor de pregtire i de acces propriu-zis la baza de date. Principalele etape i obiecte de acces la baze de date sunt definite n standardele de interfa independente de baza de date. Ele sunt orientate pe conceptele referitoare la accesarea bazelor de date relaionale i sunt urmtoarele: executarea unei instruciuni de acces la date, obinerea setului ce conine rezultatul, lansarea unei proceduri stocate, gestionarea tranzactiilor si gestionarea erorilor. Conectarea Accesul la informaiile stocate ntr-o baz de date este precedat de operaia de conectare la baza de date. Solicitantul primete un obiect de tip conexiune care va fi utilizat pentru a accesa baza de date. Obiectul care corespunde conexiunii realizate permite crearea de instruciuni pentru interogarea bazei de date. Accesul i prelucrarea informaiilor Aceste instruciuni de interogare sunt create ca obiecte de tip instruciune i subclase ale acestora. Pentru un grad superior de flexibilitate, instruciunile pot fi parametrizate. Instruciunile sunt cele tipice accesului la baze de date, anume actualizare, inserare i interogare. Executarea unei interogri va avea ca rezultat o coleie de rnduri. Aceasta reprezint un obiect de tip set rezultat cu posibiliti de parcurgere a elementelor sale. O prelucrare primar a informaiilor pstrate n baza de date poate fi definit n proceduri stocate, de asemenea, n baza de date. Lansarea unei proceduri stocate se face la nivelul driver-ului de acces la baza de date. Aceast operaie returneaz un obiect de tipul unei subclase a clasei instructiune (instruciune callable) ce ofer i metode pentru transferul parametrilor de intrare i ieire.

62

Operaii pentru consisten si corectitudine O operaie special este cea de definire i gestionare de tranzacii. Implicit, se comite orice instruciune. Alternativ, se pot utiliza metodele specifice pentru gestionare tranzacii pentru a explicita domeniul tranzaciei i condiiile de comitere sau anulare a operaiilor incluse n aceasta. Erorile aprute n urma executrii operaiilor comandate asupra bazei de date vor ridica excepii ce trebuie tratate la nivelul aplicaiei. Servicii de acces la baze de date Exist sisteme care ofer ntreaga colecie de obiecte i metode de acces la o baz de date sub forma unui serviciu (ex. ADODB). Acesta poate fi folosit la interfaa cu diferite driver-e. Pentru aceasta, motoarele runtime pentru diverse tehnologii de programare sunt extinse cu biblioteci pentru conectare la bazele de date prin intermediul driverelor standard. Accesul la baze de date se face printr-o conexiune stabilit prin soft-ul de client al sistemului de gestiune a bazelor de date respectiv. Serviciul ofer posibilitatea stabilirii de conexiuni la una sau mai multe baze de date de pe serverul de baze de date. Conectarea se face prin intermediul unui obiect specializat. Exist dou abordari pentru realizarea conectrii. Fie se utilizeaz un obiect predefinit de conectare ce ofer o colecie de conexiuni pentru o pereche utilizator/baz de date i permite existena unei singure conexiuni deschise la un moment dat, fie se poate crea o colecie de conexiuni. n acest caz are loc o separare a activitii de gestiune a coleciei de conexiuni de cea de acces la baza de date. O aplicaie poate utiliza mai multe colecii de conexiuni, fiecare ataat unei baze de date i unui utilizator al acesteia. Fiecare colecie poate avea mai multe conexiuni ceea ce permite accesul simultan de la utilizatori multiplii la baze de date multiple. De asemenea, o astfel de colecie poate fi asociat ntregii aplicaii, ceea ce permite definirea de tranzacii valabile pentru mai multe cereri client. Principalele categorii de operaii ce se pot realiza pe o conexiune la baza de date sunt realizate prin intermediul metodelor specifice ale obiectului de tip conexiune. Suplimentar, serviciul ofer aplicaiei modaliti de creare i gestionare a mai multor colecii de conexiuni la diferite baze de date, deci suport pentru lucru paralel cu baze de date distribuite. 4.3.3 Serviciul ADODB ADODB (ActiveX Data Object) este un serviciu complex pentru acces la baze de date al platformei Microsoft. Acest serviciu acceseaz baza de date printr-o interfa ODBC sau printr-un provider conectat la OLEDB. Modelul obiect ADODB este reprezentat de urmtoarea ierarhie de obiecte: Obiectele Connection, Command i Recordset sunt obiecte de nivel superior, care pot fi create sau distruse n mod independent de fiecare din celelalte obiecte. Dei un obiect de tip Parameter poate fi creat independent de obiectul Command, el este folosit doar n asociere cu o comand. Obiectele Fiels, Error i Property exist doar n contextul obiectelor printe i nu pot fi create separat.

63

Connection

Command

Errors

Properties

Parameters

Properties

Recordset

Fields

Properties

Properties

Fig.xx ADODB Object Model

Obiectul Connection reprezint o singur sesiune de lucru cu sursa de date. El definete proprietile conexiunii la baza de date, asigneaz domeniul tranzaciilor locale, ofer o surs central pentru regsirea informaiilor de eroare i un punct pentru executarea interogrilor asupra schemei bazei de date. Obiectul Command specific instruciunile de definire sau manipulare date ce urmeaz a fi executate. n cazul bazelor de date relaionale acestea sunt instruciuni SQL. Obiectul utilizeaz o colecie de obiecte de tip Parameter n care se afl paramerii de lansare a comenzii. Obiectul Recordset reprezint datele rezultate n urma execuiei instruciunii i ofer control asupra mecanismului de interblocare (lock), asupra tipului de cursor utilizat, asupra numrului de nregistrri accesate la un moment dat. Obiectul Recordset expune o colecie de obiecte de tip Field care conine metadate referioare la coloanele din setul de nregistrri (nume, tip, lungime, precizie) ca i valorile propriu-zise ale datelor. 1. Obiectul conexiune ADODB Obiectul Connection ofer un mecanism pentru iniializare i stabilire de conexiuni, pentru executare de interogari i pentru utilizare tranzacii. Proprietile obiectului Connection sunt ConnectionString care conine informaiile de localizare i configurare a providerului OLEDB i baza de date implicit, ConnectionTimeout timpul limit de rspuns pentru toate comenzile executate pe conexiune i Mode pentru specificarea modul de acces la baza de date.

64

ConnectionString este compus din urmtoarele informaii: nume provider,

care are ca valoare implicit MSDASQL, numele serverului de baze de date, numele bazei de date, identificator(Id) utilizator i parol utilizator. Exist dou seturi de tipuri de acces la baza de date. Primul set de tipuri este format acces doar pentru citire, acces doar pentru scriere, acces pentru citire i scriere. Al doilea set de tipuri de acces este format din acces partajat i acces exclusiv. Exista mai multe moduri, specificate ca valoare a proprietii mode, specifice diferitelor variante de combinare a tipurilor de acces din cele dou seturi. Metodele obiectului Connection sunt Open pentru deschiderea unei conexiuni, Execute pentru executarea unei operaii pe baza de date de tip SELECT, UPDATE, INSERT sau DELETE i BeginTrans, CommitTrans i RollbackTrans pentru gestionarea explicit a tranzaciilor. 2. Realizarea conexiunii la o baza de date Definirea conexiunii se face prin instanierea unui obiect de tip
ADODB.Connection urmat de specificarea valorilor proprietilor acesteia. O parte

dintre acestea au valori implicite. Astfel conexiunile prin ODBC utilizeaz provider-ul MSDASQL. Urmtorul exemplu definete o astfel de conexiune.
Dim Conn Set Conn = Server.CreateObject(ADODB.Connection) Conn.Mode=adModeReadWrite Conn.ConnectionString=DSN=mi4DSN;UID=student;PWD=student;

Dac se utilizeaz un alt provider, acesta trebuie specificat, ca mai jos:


Dim Conn, ConnStr ConnStr=PROVIDER=Microsoft.Jet.OLEDB.4; DATA SOURCE = c:\InetPub\wwwroot\mi4\studenti.mdb Set Conn=ServerCreateObject(ADODB.Connection) Conn.Mode = adModeReadWrite Conn.ConnectionString = ConnStr

De asemenea, se poate stabili un timp maxim de ateptare de 100 sec. a unui rspuns pe conexiune prin:
Conn.ConnectionTimeout = 100

Deschiderea conexiunii se face cu metoda Open aplicat obiectului de tip Connection. Definirea proprietilor conexiunii se poate face i odat cu deschiderea acesteia:
Conn.Open ConnStr, student, student, adAsyncConnect

O conexiune la o baz de date aflat pe server-ul MS-SQL numit Server1 se poate defini i deschide cu urmtoarea comand:

65

Cn.Open Driver={SQLServer};Server=Server1;Uid=sa;Pwd=; Database=pubs

nchiderea corect a unei conexiuni trebuie urmat de eliberarea obiectului de tip Connection, astfel:
Conn.Close Set Conn = nothing

3. Utilizarea obiectului conexiune Obiectul conexiune se utilizeaz pentru lansare de operaii pe baza de date, pentru gestionarea explicit a tranzaciilor i pentru gestionarea erorilor. Lansarea de operatii pe baza de date se face cu metoda execute urmat de irul str ce conine specificarea operaiei solicitat la baza de date.
Conn.execute str

Gestionarea explicit a tranzaciilor se face cu metodele BeginTrans, CommitTrans i RollbackTrans dup modelul clasic de utilizare a operaiilor de delimitare a tranzaciilor i de specificare a modului de ncheierea acestora.
Conn.BeginTrans {bloc operaii incluse n tranzacie} if <condiie de realizare corect a operaiilor> Conn.CommitTrans else Conn.RollbackTrans Conn.Close

Gestionarea erorilor se face utilizand obiectul Error i colecia Errors obinut din Connection. 4. Obiectul Recordset Obiectul Recordset modeleaza setul de nregistrari obinut ca rezultat al unei operaii realizat pe o conexiune la baza de date. El reprezint o tabel virtual (view) creat cu nregistrri dintr-o baz de date. Prin acest obiect se ofer un mecanism pentru realizare de operaii de parcurgere i prelucrare de informaii din aceast tabel virtual. Colecia Fields a obiectului Recordset conine cmpurile tabelei virtuale modelate cu obiecte de tip Field cu proprieti ce conin numele, dimensiunea i valoarea cmpului. Un cmp este referit prin Recordset.Fields(nume_cmp). Obiectul Recordset are, de asemenea, un set de proprieti specifice. Proprietatea CommandText conine textul comenzii ce trebuie executat asupra bazei de date. Aceasta poate fi interogare SQL, view, procedur stocat sau interogare(SQL)

66

dinamic. Semnificaia curent a acestui text este indicat cu valoarea proprietii


Options.

Proprietatea Connection sau, alternativ, ConnectionString este utilizat pentru specificarea conexiunii la baza de date. Prima variant indic numele unei conexiuni existente i este utilizat n cazul acceselor multiple, cnd se va crea un obiect conexiune ce poate fi utilizat la fiecare solicitare a unui acces. A doua variant permite definirea unei conexiuni noi i se recomand doar n cazul acceselor izolate la baza de date. Proprietatea Cursor-Type specific modul de parcurgere i vizibilitatea modificrilor dinamice asupra bazei de date. Parcurgerea se poate face doar n sens ascendent sau n ambele sensuri. Modul dynamic indic sincronizarea dinamic cu modificrile fcute de ali utilizatori. Modul de gestionare a acceselor concurente pentru modificarea informaiilor din baza de date este indicat n proprietatea LockType. Valoarea adLockReadOnly nu permite modificarea datelor, valoarea adLockOptimistic realizeaz blocarea accesului la date doar pe parcursul operaiilor de actualizare a bazei de date iar valoarea adLockPessimistic indic blocarea accesului la date pn la nchiderea conexiunii. Proprietile EOF i BOF indic poziia curent ca fiind sfritul, respectiv nceputul setului de nregistrri. Metodele obiectului Recordset corespund operaiilor de deschidere conexiune (Open), de executare de accese la baza de date(Execute), de parcurgere a tabelei virtuale (MoveXXX), de modificare a continutului (AddNew, Update), de sortare (Sort) i de regsire de informaii (Find). 5. Proceduri stocate Procedurile stocate sunt obiecte ale bazei de date care conin cod ce se execut asupra informaiilor stocate n baza de date. Utilizarea procedurilor stocate este avantajoas atunci cnd sunt necesare operaii intensive cu datele din tabele n raport cu dimensiunea rezultatului ce trebuie transferat la client. Aceasta permite un grad sporit de eficien a realizrii operaiilor deoarece ele se execut n vecintatea datelor pe care le prelucreaz diminund astfel costurile transferurilor n sistem. Pentru lansarea n execuie a unei proceduri stocate se indic numele acesteia ca valoare a proprietii ComandText i se seteaz corespunztor valoarea proprietii Options.
RS.Open "[numeProceduraStocata]", Conn, adOpenForwardOnly, adLockReadOnly, adCmdStoredProc

Lansarea unei proceduri stocate se poate face i cu parametrii dac se utilizeaz obiectele Command care se iniializeaz cu numele procedurii stocate i Parameters care se iniializeaz cu valorile parametrilor transmii acesteia. n exemplul urmtor valorile parametrilor sunt preluate dintr-o form.
Set cmd = cat.Procedures("numeProc").Command

67

cmd.Parameters("Forms![numeProc Dialog]!Param_1") = val_1 cmd.Parameters ("Forms![numeProc Dialog]!Param_2") = val_2 RS.Open cmd,adOpenForwardOnly,adLockReadOnly,adCmdStoredProc

6. Etapele realizrii de operaii cu baze de date Prima etap n realizarea de operaii cu baze de date din fiiere ASP este crearea unui obiect de tip Recordset.
Dim RS Set RS = Server.CreateObject("ADODB.Recordset")

Urmtoarea etap este aceea de iniializare a obiectului creat prin specificarea conexiunii i a operaiei cu baza de date cu o comand care are urmtoarea form general:
RecordSet.Open CommandText, Connection|ConnectionString, Cursor-Type, LockType, Options

Pentru a obine un obiect Recordset care s suporte operaii de actualizare a bazei de date (UPDATE) , proprietatea ConnectionMode trebuie s primeasc valoarea adModeReadWrite, ca n exemplul urmtor:
RS.Open "SELECT * FROM Studenti", Conn, adOpenDynamic, adLockPessimistic

Utilizarea obiectului Recordset permite realizarea mai multor tipuri de operaii. Operaiile de parcurgere a tabelei virtuale (gestionare cursor) sunt realizate cu metodele RS.MoveNext, RS.MovePrevious, RS.MoveFirst i RS.MoveLast Poziia cursorului poate fi testat prin proprietile RS.EOF i RS.BOF. O alt categorie de operaii sunt cele executate la nivel de nregistrare. Extragerea coninutului unui cmp se face utiliznd colecia Fields astfel:
var = RS.Fields("nume_camp")

Adugarea unei nregistrri se face n dou etape. Mai nti se face adugarea unei nregistrri cu coninut null dup care se face iniializarea cmpurilor acesteia.
RS.AddNew RS("nume_camp_1")= "val_1" RS("nume_camp_2")= "val_2" ... RS("nume_camp_k")= "val_k" RS.Update

68

Modificarea coninutului unei registrri se face n trei etape. Prin apeluri de forma RS.MoveXXX are loc pozionarea pe nregistrarea de modificat. Apoi se specific numele cmpului ce trebuie modificat i noua valoare
RS("nume_camp")= "val"

n final are loc lansarea operaei de modificare propriu-zis


RS.Update

tergerea unei nregistrri se face printr-o comand de forma:


Conn.Execute("DELETE ...WHERE ...")

Sortarea nregistrarilor unui Recordset se face cu o comand special care primete lista cmpurilor dup care se face sortarea i sensul sortrii, astfel:
RS.Sort = "nume_camp_crit1, nume_camp_crit2, ...,DESC"

La nivel de Recordset se pot, de asemenea, realiza operaii speciale de cutare de nregistrari pe baza unui criteriu de cutare specificat.
RS.Find(criteriu de cautare, optional arguments)

Argumentele opionale pot fi SkipRecords cu indicarea numrului de nregistrri neglijate, SearchDirection indicnd direcia de cutare ca fiind nainte (adSearchForward) sau napoi (adSearchBackward) i Start cu precizarea numrului nregistrrea de la care se ncepe cutarea. 4.3.4 ACCESAREA BAZELOR DE DATE UTILIZAND PHP PHP are seturi de funcii specializate pentru accesul la majoritatea sistemelor de gestiune a bazelor de date, prin intermediul interfeelor de acces oferite de acestea. Implicit, PHP se interfaeaz cu MySQL. Alte tipuri de baze de date cu care lucreaz o anumit instan a motorului sunt indicate explicit n fiierul de iniializare al acestuia, php.ini. Interfaa cu un SGBD ofer funcii de acces la informaii din baze de date conform modelului clasic de lucru cu bazele de date relaionale. Acest model presupune deschiderea unei conexiuni la o baz de date urmat de lansarea unei operaii cu aceasta. Operaiile pot fi parametrizate. Rezultatul unei interogri formeaz o tabel virtual care poate fi parcurs cu ajutorul unui cursor ce a fost deschis pentru conexiunea respectiv. Vom exemplifica funciile de lucru cu dou sisteme de gestiune a bazelor de date MySQL, pentru care PHP deine interfaa de acces, i Oracle, prin intermediul interfeei OCI8. Conectarea la baza de date se face cu funciile
mysql_connect (host, user, password)

respectiv
ora_logon (user, password)

69

Interfaa cu un SGBD ofer i funcii pentru declararea de conexiuni persistente, conexiunicare pot fi gestionate i reutilizate de motorul PHP. Deconectarea de la baza de date se face cu funciile
mysql_close (connection_ID)

respectiv
ora_logoff (connection_ID)

La MySQL se poate face lansarea unei interogri pe o conexiune deschis cu obinerea unui identificator al tabelei virtuale generate ca rezultat al interogrii:
mysql_query(query_string, connection_ID)

Preluarea informaiilor din tabela virtual se face cu una din funciile de tip
fetch_xxx, de exemplu preluarea unei nregistrri cu: mysql_fetch_array(query_ID)

sau preluarea informaiilor dintr-un cmp al unei nregistrri:


mysql_fetch_field (query_ID, field_offset)

La Oracle este necesar deschiderea unui cursor pe care apoi se va executarea unei operaii cu baza de date
ora_open (connection_ID)

Lansarea operaiei se face n trei etape. Prima etap este cea de analiz sintactic(parse) a unei fraze SQL sau a unui bloc de instruciuni al limbajului procedural PL/SQL oferit de Oracle
ora_parse(cursor, sql_statement, defer)

Instruciunea SQL poate fi parametrizat. Valorile transmise ca parametrii sunt date unor variabile care apoi sunt conectate la parametrii reapectivi prin intermediul funciei
ora_bind (cursor,nume_var_PHP,nume_par_SQL,dim_par, tip_par)

n a doua faz are loc lansarea operaiei analizat mai sus:


ora_exec(cursor)

Ultima etap este cea n care se preiau informaii din tabela virtual pacurs pe baza cursorului. Se pot prelua informaii la nivel de ntregistrare: ora_fetch(cursor) sau ora_fetch_into(cursor) sau informaii la nivl de coloan a tabelei virtuale:
ora_getcolumn(cursor, column)

Obinerea de informaii despre tabela virtual se face cu funcii ca


mysql_num_fields(query_ID), mysql_num_rows(query_ID) mysql_field_name(query_ID, field_offset) mysql_field_len(query_ID, field_offset) mysql_field_tzpe(query_ID, field_offset)

respectiv
ora_numcols(cursor), mysql_field_name(query_ID, field_offset)cursor) ora_columnname(cursor, column) ora_columnsize(cursor, column) ora_columntype(cursor, column)

70

Fiecare funcie ntoarce un cod de eroare dac nu a fost executat corect. Acesta este accesibil cu funciile
mysql_error()

respectiv
ora_errorcode(cursor_or_connection_ID)

SGBD Oracle lucreaz n regim tranzacional. Se realizeaz implicit cte o tranzacie pentru fiecare operaie de actualizare pe baza de date. PHP ofer suport pentru gestionarea programatic a tranzaciilor, n sensul includerii unui bloc de operaii ntr-o singur tranzacie, prin funciile:
ora_commitoff(connection_ID) ora_commit (connection_ID) ora_rollback(connection_ID)

Versiunile recente ale PHP realizeaz unificarea accesului la bazele de date prin folosirea interfeei ODBC. Aceasta permite conectarea la orice SGBD care ofer aceast interfa i utilizarea funciilor unificate pentru realizarea accesului.

71

5. TEHNOLOGII JAVA PENTRU EXTINDEREA FUNCIONALITII LA SERVER 5.1 SERVLET


Componenta de la server a aplicaiilor Web poate fi realizat n mai multe variante tehnologice: CGI, ASP, PHP sau JSP/Servlet. Pentru oricare din aceste variante exist modaliti specifice de interaciune a aplicaiei cu serverul Web. Servlet este un program Java, independent de platform, care extinde funcionalitatea serverului Web. Servlet ofer un model de programare specific programrii Web. Acest model este definit n Java servlet API. Java servlet API ofer un framework (interfa pentru dezvoltare de aplicaii) orientat pe construirea de aplicaii pe servere Web. Containerul Web este un context runtime care ofer o implementare pentru Java servlet API ca i o serie de faciliti pentru paginile JSP. Containerul este responsabil cu iniializareaservlet-urilor i a paginilor JSP, cu invocarea de operaii ale acestora, cu gestionarea ciclului lor de via. Invocarea unui servlet nu este fcut direct de client ci este responsabilitatea containerului Web. Containerul Web preia cererea HTTP a clientului i o transmite servlet-ului prin intermediul unei interfee specifice. 5.1.1 Componentele pachetelor Java servlet API Java servlet API este specificat n pachetele Java prin javax.servlet, care conine clase i interfee independente de protocol i prin javax.servlet.http care conine clase i interfee specifice protocolului HTTP. Componentele acestor pachete sunt nrudite i sunt clasificate pe categorii de funcii. Funciile componentelor sunt implementarea sevletului, configurarea servletului, gestionarea excepiilor specifice modelului servlet, comunicare cu clientul conform protocolului HTTP (modelul cerere-rspuns), gestionarea contextului n care evolueaz servletul, colaborarea cu alte componente ale site-ului (servleturi, JSP sau pagini HTML) i diverse utilitare. Interfaa javax.servlet.Servlet definete regulile de comunicare ntre containerul Web i servlet.
public interface Servlet

{
public public public public public } void void void void void init(ServletConfig config); service(ServletRequest rq, ServletResponse rs); destroy(); ServletConfig getServletConfig(); String getServletInfo();

72

Un servlet trebuie s implementeze interfaa Servlet, specific acestui model de programare. Aceast interfa poate fi implementat direct sau indirect, prin extinderea claselor abstracte javax.servlet.GenericServlet sau javax.servlet.HttpServlet.

<<interface >> Servlet init () service() destroy () getServletConfig() getServletInfo()

<<interface >> ServletConfig getInitParameter () getInitParameterName s() getServletContext()

<<interface >> Serializable

<<abstract >> GenericServlet init() log()

<<marker interface >> SingleThreadModel <<abstract >> HttpServlet DoGet() DoPost() DoPut() DoDelete() <<class >> AltServlet

<<class >> UnServlet

<<class >> UnServletHTTP

Containerul Web poate s trimit unei singure instane a servletului cereri multiple, fiecare ntr-un fir de execuie. Aceasta impune programatorului s implementeze metoda service() astfel nct s-i asigure o funcionare corect n regim multithreading (thread-safe). Pentru a evita acest lucru se poate asigura invocarea fiecrei instane a servletului ntr-un fir de execuie separat prin implementarea de catre servlet a interfeei marker
javax.servlet.SingleThreadModel

Clasa GenericServlet ofer o implementare de baz pentru interfeele Servlet i ServletConfig. Ea implementeaz toate metodele cu excepia metodei service() a crei implementare rmne n sarcina programatorului aplicaiei.

73

public abstract class GenericServlet implements Servlet, ServletConfig, Serializable

La aceste interfee clasa mai adaug urmtoarele metode:


public void init(); public void log(String message); public void log(String message, Throwable t);

Prin implementarea intefeei ServletConfig se asigur acces direct la metodele acestui obiect, far a fi necesar obinerea referinei. Metodele log(...) acceseaz obiectul ServletConfig i obin informaii pe care le nregistreaz n log la container. Mecanismul pentru nregistrarea operaiilor executate este dependent de container.
(ex. Serverul Tomcat utilizeaz fiierul %TOMCAT_HOME\log\servlet.log)

Clasa HttpServlet extinde GenericServlet i realizeaz o implementare a interfeei Servlet specific protocolului HTTP.
public abstract class HttpServlet extends GenericServlet implements Serializable { public void service(ServletRequest rq, ServletResponse rs); protected void service(HttpServletRequest rq, HttpServletResponse rs); protected void doGet(HttpServletRequest rq, HttpServletResponse rs); protected void doPost(HttpServletRequest rq, HttpServletResponse rs); protected void doPut(HttpServletRequest rq, HttpServletResponse rs); protected void doDelete(HttpServletRequest rq, HttpServletResponse rs); protected void doOptions(HttpServletRequest rq, HttpServletResponse rs); protected void doTrace(HttpServletRequest rq, HttpServletResponse rs); }

n GenericServlet exist o implementare a metodei service() care convertete (cast) ServletRequest i ServletResponse n HttpServletRequest i respectiv HttpServletResponse , cu care apeleaz metoda suprancrcat service(). Aceasta este implementat de HttpServlet pentru a realiza funcia de dispecer pentru cererile HTTP. Pentru aceasta este utilizat metoda getMethod(), oferit de javax.servlet. ServletRequest, returneaz tipul metodei HTTP asociat cererii

74

sub forma unui string (GET, PUT, etc.). Pe baza acestei valori transmite cererea metodei corespunztoare disponibil n HttpServlet. Implementarea implicit oferit pentru metodele doGet, doPut, doPost, doDelete ntoarce codul de eroare. Programatorul va suprascrie metodele care sunt folosite n aplicaia sa. Metodele doOptions, doTrace sunt implementate corespunztor de ctre HttpServlet i nu trebuiesc suprascrise. 5.1.2 Configurarea servletului Configuraia unui servlet este reprezentat n obiectul ServletConfig ataat acestuia. Specificarea configuraiei se face n mod declarativ, n fiierul XML numit deployment descriptor ataat aplicaiei Web sau n fiiere de proprieti (n cazul versiunilor mai vechi). Configuraia este definit sub forma unei colecii de perechi (nume-valoare) fiecare reprezentnd un parametru de iniializare a servletului. Exemplul urmtor reprezint coninutul un fiier XML care definete valorile parametrilor de configurare, valori ce vor fi citite de containerul Web i trimise apoi ctre servlet-ul com.wrox.admin.AdminServlet prin intermediul obiectului ServletConfig asociat.
<web-app> <servlet> <servlet-name>Admin</servlet-name> <servlet-class>com.wrox.admin.AdminServlet</servlet-class> <init-param> <param-name>p1</param-name. <param-value>v1</param-value> </init-param> <init-param> <param-name>p2</param-name. <param-value>v2</param-value> </init-param> </servlet> </web-app>

Interfaa ServletConfig are urmtoarele metode:


public public public public String getInitParemeter (String name); Enumeration getInitParameterNames(); ServletContext getServletContext(); String getServletName();

Servletul poate obine o referin la obiectul ServletConfig n dou moduri: n timpul iniializrii servletului referina este primit ca parametru de ctre metoda init(ServletConfig config). Ulterior aceasta poate fi obinut utiliznd metoda getServletConfig().

75

Dac servlet-ul extinde clasa abstract GenericServlet atunci el poate invoca direct metode din ServletConfig fr a necesita o referin, deoarece GenericServlet implementeaz i ServletConfig. 5.1.3 Excepii servlet Exist dou clase care definesc excepiile mecanismului servlet Clasa javax.servlet.ServletException definete o excepie generic ce poate ngloba orice alt excepie aprut pe parcursul execuiei servletului. Clasa javax.servlet.UnavailableException definete o excepie ce indic containerului Web faptul c servletul nu este disponibil (temporar sau definitiv). Excepiile pot fi lansate de oricare din metodele init(), service(),
doXXX(), destroy().

Constructorii claselor care definesc excepii servlet sunt:


public ServletException(); public ServletException(String message);

respectiv:

Ct timp nu este disponibil servletul

public UnavailableException(String message); public UnavailabelException(String message, int seconds);

5.1.4 Cerere i rspuns Pentru implementarea comunicrii client-server bazat pe cerere-rspuns, Java servlet API ofer interfeele ServletRequest i ServletResponse ca i specializrile acestora specifice utilizrii protocolului HTTP, HttpServletRequest i HttpServletResponse. Interfeele ServletRequest i HttpServletRequest ofer o abstractizare a cererii clientului. Containerul Web creaz o instan a acestui tip cu care apeleaz metoda
service().

Interfeele ofer metode pentru accesul la parametrii cererii, la atributele ataate cererii i la obiectele care modeleaz fluxul pentru transfer de informaii (InputStream i Reader) asociate conexiunii clientului.
public { public public public public public public public public public public interface ServletRequest Object getAttribute(String name); Object setAttribute(String name, Object attribute); Enumeration getAttributeNames(); void removeAttribute(String name); Locale getLocale(); Enumeration getLocales(); String getCharacterEncoding(); int getContentLength(); String getContentType(); ServletInputStream getInputStream();

76

public public public public public public public public public public public public public }

String getParameter(String name); Enumeration getParameterNames(); Enumeration getParameterValues(); Map getParameterMap(); String getProtocol(); String getScheme(); String getServerName(); int getServerPort(); BufferedReader getReader(); String getRemodeAddr(); String getRemoteHost(); Boolean isSecure(); RequestDispatcher getRequestDispatcher(String path);

n definiia interfeei HttpServletRequest prezentat mai jos sunt evidente metodele specifice protocolului HTTP(ex getHeader, getMethod) i aplicaiilor Web(ex. getCookies, getSession).
public interface HttpServletRequest extends ServletRequest { public String getAuthType(); public Cookie[] getCookies(); public long getDateHeader(String name); public String getHeader(String name); public Enumeration getHeaders(String name); public Enumeration getHeaderNames(); public int getIntHeader(String name); public String getMethod(); public String getContextPath(); public String getPathInfo(); public Dtring getPathTranslated; public String getQueryString(); publicString getRemoteUser(); public boolean isUserInRole(String role); public java.security.Principal getUserPrincipal(); public String getRequestedSessionId(); public boolean isRequestedSessionIdValid(); public boolean isRequestedSessionIdFromCookie(); public boolean isRequestedSessionIdFromURL(); public String getRequestURI(); public StringBuffer getRequestURL(); public String getServletPath(); public HttpSession getSession(); public HttpSession getSession(boolean create); }

Similar, interfeele ServletResponse i HttpServletResponse abstractizeaz metodele necesare servletului pentru construirea rspunsului.

77

Containerul instaniaz un obiect de tip rspuns pe care l transfer servletului, mpreun cu obiectul care conine cererea, odat cu lansarea metodei service(). Acesta va fi prelucrat de ctre servlet astfel nct s conin rspunsul la cerere. Descrierea mecanismului de execuie a aplicaiilor servlet n container Web O cerere ctre un servlet poate fi lansat fie din pagin HTML, fie din pagin JSP, fie din alt servlet. Pentru aceasta este utilizat URL-ul servletului solicitat. n pagina HTML URL-ul servletului este, n general, indicat ca valoare a atributului ACTION al unei forme. Fie dup pornirea sa, fie la prima cerere pentru servlet, containerul va instania servletul. Simultan containerul creaz obiectul ServletConfiguration utiliznd declaraiile din fiierul de deployment. Cu acest obiect utilizat ca parametru containerul apeleaz metoda init() a servletului care va realiza iniializarea servletului. La fiecare cerere pentru servlet containerul creaz obiectele ServerRequest i ServerResponse i utilizeaz aceste obiecte ca parametrii n invocarea metodei service() a servletului. Servletul preia parametrii cererii utiliznd metodele obiectului ServerRequest. Prelucreaz aceste informaii i eventual acceseaz baze de date i/sau colaboreaz cu alte servleturi i pagini JSP. Rezultatele prelucrrilor sunt transformate n ServerResponse. Pentru aceasta are loc stabilirea tipului MIME al rspunsului (n general text-html) (response.setContentType(text-html)urmat de obinerea de la ServerResponse a unui obiect PrintWriter care permite scrierea n fluxul de ieire asociat conexiunii la reea utiliznd metoda println()a acestuia. Acest obiect extinde clasa abstract java.io.Writer i este construit de container din obiectul java.io.OutputStream asociat conexiunii de reea a clientului. n final, se realizeaz nchiderea obiectului PrintWriter. nainte de distrugerea unei instane a servletului, containerul apeleaz metoda destroy() a acestuia, metod n care programatorul trebuie s prevad operaiile ce trebuiesc executate n acest caz. Dac apare excepia UnavailableException instana este distrus i marcat pentru garbage collection.
Nu exist instaniere Instantiated

instaniere nereuit Unavailable

eliberare

Initializat/pregtit pentru recepionare cereri revenire dup cdere temporar

cdere temporar sau permanant Destroyed time-out sau shutdown container

cerere client HTTP

terminarea unui service thread

Service

FIG. Ciclul de via al unui servlet

78

5.1.5 Sesiune servlet HTTP este un protocol stateless ceea ce nu permite transferul de informaii ntre cereri. Mecanismul bazat pe cookies poate fi utilizate ca modalitate de a transfera informaii de stare de la oa cerere la alta a unui aceluiai client. Aplicaiile complexe necesit desfurarea logicii aplicaiei peste cereri i rspunsuri multiple. Pentru aceasta containerul Web unific cererile unui client sub form de sesiune. Programatorul poate asocia fiecrei sesiuni informaii de stare, informaii pe care le gestioneaz containerul Web. Java Servlet API ofer interfaa javax.servlet.HttpSession care ncapsuleaz noiunea de sesiune. Containerul Web ofer o implementare a acestei interfee. Obiectul HttpSession este solicitat sau creat, dac cererea curent nu are asociat un obiect sesiune, de ctre servlet prin apelul metodei getSession() pe obiectul de tip HttpRequest. Interfaa HttpSession are urmtoarele metode:
public interface HttpSession { public Object getAttribute(String name); public Enumeration getAtributeNames(); public long getCreationTime(); public String getId(); public long getLastAccessedTime(); public int getMaxInactiveInterval(); public void setMaxInactiveInterval(int interval); public void invalidate(); public boolean isNew(); public void removeAttribute(String name); public void setAttribute(String name); }

Starea sesiunii este definit prin atributele acesteia. Obiecte de tip atribut pot fi conectate la o sesiune sau deconectate de la aceasta pentru a construi starea. Metodele setAttribute i getAttribute permit gestionarea unui set de atribute unice (obiecte Java identificate cu nume) care reprezint starea sesiunii. Obiectele atribut implementeaz HttpSessionBindingListener pentru a putea fi notificate asupra operaiilor de conectare/deconectare la sesiuni. 5.1.6 Context servlet Contextul servletului reprezint perspectiva servletului asupra aplicaiei Web. Contextul ofer acces la resurse i faciliti comune tuturor modulelor aplicaiei Web. Contextul este comun tuturor clienilor aplicaiei. El permite gestionarea strii la nivelul aplicaiei, reprezentat prin informaii de stare globale, comune tuturor servleturilor i tuturor clienilor aplicaiei. Noiunea de context este ncapsulat n interfaa ServletContext.

79

a Obiectul context se obine utiliznd metoda getServletContext() obiectului HttpServlet. Obiectul HttpServlet obine ServletContext de la obiectul ServletConfig pe care l primete ca parametru la iniializare. Interfaa ServletContext este implementat de ctre containerul Web i specific urmtoarele metode:
public public public public public public public public public public public public public public public public public public public public String getMIMEType(); URL getResource(String path); InputStream getResourceAsStream(String path); RequestDispatcher getRequestDispatcher(String path); RequestDispatcher getNamedDispatcher(String name); String getRealPath(String path); ServletContext getContext(String uriPath); String getServerInfo; String getServletContextName(); Set getResourcePaths(String path); String getInitParameter(String name); Enumeration getInitParameterNames(); Object getAttribute(String name); Enumeration getAttributeNames(); void setAttribute(String name, Object attribute); void removeAttribute(String name); int getMajorVersion(); int getMinorVersion(); void log(String message); void log(String message, Throwable cause);

5.1.7 Colaborare servlet Logica aplicaiilor complexe este implementat n module multiple. Fiecare astfel de modul reprezint un servlet al aplicatiei. Dac un astfel de modul are funcii de prezentare a informaiilor dinamice n cadrul paginilor Web, el a fost compilat dintr-o definiie JSP. Modulele pot comunica informaii prin intermediul contextului servlet. De asemenea, aceste module pot colabora n sensul stabilirii unui flux al operaiilor. Pentru colaborarea ntre module se utilizeaz un mecanism de dispecerizare bazat pe interfaa javax.servlet.RequestDispatcher.
public Interface RequestDispatcher { public void forward(ServletRequest rq, ServletResponse rs) throws ServletException, java.io.IOException public void include(ServletRequest rq, ServletResponse rs) throws ServletException, java.io.IOException }

Acest mecanism permite unui servlet s obin o referin la un alt servlet din acelai context, pe care l identific prin URL, i s utilizeze aceast referin pentru a delega cererea sau rspunsul, parial prelucrate, ctre acesta.

80

Metoda forward() dirijeaz cererea ctre un alt servlet sau pagin JSP sau ctre un fiier HTML de pe server. n urmtoarele exemple este creat i apoi utilizat un obiect dispecer. Resursa destinaie preia responsabilitatea producerii rspunsului.
// prelucrri pe obiectele request i response primite la apelul metodei service() // Invocarea unui alt servlet S2

RequestDispatcher rd = getServletContext().getNamedDispatcher(S2); rd.forward(request, response);

Metoda include() include contextul produs de o alt resurs n rspunsul generat de servletul care o apeleaz.
// prelucrri pe obiectele request i response primite la apelul metodei service() //Includerea unui banner

RequestDispatcher rd = request.getRequestDispatcher(/servlet/banner); rd.include(request, response);

Exist doua variante de obinere a obiectului RequestDispatcher pentru o anumit resurs. Acesta se poate obine de la obiectul ServletContext indicnd ca parametru fie URL-ul absolut al resursei
javax.servlet.ServletContext.getRequestDispatcher(...) fie numele servletului declarat n deplozment decriptor cu tag-ul <servlet-name> javax.servlet.ServletContext.getNamedDispatcher(...)

n a doua variant, obiectul RequestDispatcher se poate obine de la obiectul ServletRequest indicnd ca parametru fie URL-ul absolut fie cel relativ (la servletul apelant) al resursei
javax.servlet.ServletRequest.getRequestDispatcher(...)

81

5.2 JSP (Java Server Pages)


5.2.1 Arhitectura MVC Arhitectura MVC ("Model-View-Controller") este o modalitate de a mpri cerinele de funcionalitate ale aplicaiei ntre obiectele responsabile cu ntreinerea datelor i cele responsabile cu prezentarea datelor astfel nct s se minimizeze gradul de cuplare ntre grupuri de obiecte cu funcionaliti diferite. Spre deosebire de separarea functionalitii unui sistem conform rolurilor de client i de server, aceast arhitectur introduce trei roluri in sistem.
interogare asupra strii Model ncapsuleaz starea aplicaiei Rspunde la interogri asupra strii Expune funcionalitatea aplicaiei Notific modificrile ctre vederi

modificare stare

notificare modificare

Vedere(view) Red modelele Solicit actualizri de la modele Trimite gesturile utilizatorului la controller Permite controller-ului sa selecteze o anumita vedere

selecie view

gesturi utilizator

Controller Definete comportamentul aplicaiei Pune n coresponden aciunile utilizatorului cu actualizrile modelului Selecteaz view pentru rspuns Corespunde la o funcionalitate

invocare metod eveniment

Fig.1.3. Arhitectura MVC

Modelul(M) reprezint datele aplicaiei i regulile referitoare la accesul i la modificarea acestora. De multe ori modelul servete ca o aproximare software a unui proces din lumea real iar n definirea lui se aplic tehnici simple de modelare a lumii reale. Atunci cnd modelul se modific, are loc notificarea vederilor care au astfel posibilitatea de a interoga modelul asupra strii sale. Controller-ul acceseaz funcionalitatea aplicaiei ncapsulat n model. O vedere(V) - red coninutul modelului ntr-un format specific. Funciile unei vederi sunt accesarea datelor din model i specificarea modului de (re)prezentare a acestora. Dac modelul se schimb, vederea este responsabil cu pstrarea consistenei ntre datele din model i reprezentarea acestora. Tot vederea rspunde de transmiterea ctre controller a solicitrilor (gesturilor) utilizatorului. Controller-ul(C) definete comportamentul aplicaiei. Pentru aceasta el interpreteaz solicitrile utilizatorului i le pune n coresponden cu aciunile ce trebuie realizate de model. Pentru fiecare set de funcii nrudite exist cte un controller.

82

5.2.2 JSP (Java Server Pages) 5.2.2.1 Bazele tehnologiei JSP Specificaia JSP simplific crearea i gestionarea paginilor Web dinamice separd coninutul de prezentare. O pagin JSP este translatat n servlet Java la prima invocare. Servletul rezultat este o combinaie de HTML i coninut dinamic specificat de tag-urile JSP. ntr-o arhitectur multinivel (stratificat), utilizarea paginilor JSP este destinat simplificrii nivelului responsabil cu prezentarea dinamic. Iat un exemplu de pagin JSP care conine cod HTML i cod Java, memorat n fiierul cu numele simpleJSP.jsp
<%@page import=java.util.Date%> <html> <body> Data curenta este <%=new Date().toString()%> </body> </html>

Odat definit , o pagin JSP este amplasat n containerul JSP (JSP engine). Containerul JSP recepioneaz cererile pentru paginile JSP i le distribuie corespunztor. La prima invocare a unei pagini JSP, coninutul acesteia este translatat ntr-un servlet. Pagina JSP i toate fiierele dependente de aceasta formeaz o unitate de translatare. n urma translatrii, pentru exemplul de mai sus va rezulta urmtorul cod Java:
import import import import import import import import import import import import import javax.servlet.*; javax.servlet.http.*; javax.servlet.jsp.*; javax.servlet.jsp.tagtext.*; java.io.PrintWriter; java.io.IOException; java.io.FileInputStream; java.io.ObjectInputStream; java.util.vector; org.apache.jasper.runtime.*; java.beans; org.apache.jasper.JasperException; java.util.Date;

public class _0002fsimpleJSP0002ejspsimpleJSP_jsp_0 extends HttpJSPBase { static {} public _0002fsimpleJSP0002ejspsimpleJSP_jsp_0 () {} private static boolean _jspx_inited = false;

83

public final void _jspx_init() throws JasperException {} public void _jspService(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; String _value = null; try { if(_jspx_inited == false) { _jspx_init(); _jspx_inited = true; } _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType(text/html;charset=8859_1); pageContext = _jspxFactory.getPageContext(this, req,resp, , true, 8192, true); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); out.write(\r\n<html>\r\n<body>\r\nData curenta este ); out.print( new Date().toString() ); out.write(\r\n</body>\r\n</html>\r\n\r\n); } catch (Exception ex){ if (out.getBufferSize() != 0) out.clearBuffer(); pageContext.handlePageException(ex); } finally { out.flush(); _jspxFactory.releasePageContext(pageContext); } } }

84

5.2.2.2 Funciile containerului JSP Containerul JSP este responsabil cu generarea automat a codului servletului conform cerinelor exprimate prin tag-urile JSP, cu compilarea codului generat i cu ncarcarea acestuia n containerul pentru servleturi Containerul JSP realizeaz aceste operaii att la prima invocare a unei pagini JSP ct i dup orice modificare a unei pagini JSP n restul cazurilor, cererile sunt transmise direct containerului pentru servleturi. O pagin JSP poate fi programat pentru a funciona ca dispecer pentru cereri pe care le transmite altor pagini JSP. Clasa servlet generat din pagina JSP implementeaz interfaa cu containerul JSP
javax.servlet.jsp.JspPage

Aceast interfa conine dou metode. Metoda public void jspInit() este similar cu metoda init() din interfaa servlet i poate fi implementat de autorul paginii JSP. Metoda public void jspDestroy()este similar cu metoda destroy() din interfaa servlet i poate fi, de asemenea, implementat de autorul paginii JSP n cazul cel mai rspndit, n care paginile JSP utilizeaz protocolul HTTP, clasele generate trebuie s implementeze javax.servlet.jsp.HttpJspPage care extinde javax.servlet.jsp.JspPage Aceast interfa conine o singur metod:
public void _jspService(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException Metoda este similar cu metoda service() din interfaa servlet i este invocat

la apariia fiecrei cereri ctre pagina JSP. Ea nu trebuie implementat de autorul paginii JSP, implementarea ei fiing generat de container. 5.2.2.3 Structura i componentele unei pagini JSP O pagin JSP poate conine mai multe tipuri de informaii. Ea poate avea cod (D)HTML standard, cod XML, tag-uri JSP, cod Java, ncadrat de <% %>. Exist mai multe categorii de tag-uri JSP. Acestea pot fi directive, care definesc structura de ansamblu a servletului, elemente de scripting, care permit inserarea de cod Java n pagin, aciuni, pentru defininirea comportamentului la momentul execuiei. De asemenea, autorul paginii poate defini tag-uri proprii. 5.2.2.4 Directive Directivele reprezint mesaje transmise containerului JSP. Prin utilizarea directivelor se seteaz valori globale pentru informaii la nivelul unei pagini JSP. Aceste informaii se refer la declaraii de clase, la metode ce trebuie implementate i la tipul documentului de ieire. Sintaxa general a unei directive este urmtoarea :
<%@ nume_directiva atribut=valoare ...atribut=valoare%>

Directiva page definete i manipuleaz un set de atribute de pagin. Ea are urmtoarea sintax general:

85

<%@ page atribut=valoare ...atribut=valoare%>

Setul atributelor acestei directive este format din:


{language, extends, import, session, buffer, autoFlush, isThreadSafe, info, errorPage, isErrorPage, contentType}

Directiva include specific un fiier ce va fi inclus n pagina JSP pe poziia ocupat de directiv. Fiierul va fi inclus n momentul translatrii paginii n servlet. Aceast directiv are urmtoarea sintaxa general:
<%@ include file=numeFisier%>

Directiva taglib specific biblioteca tag-urilor definite de utilizator. Biblioteca conine cod Java compilat. Sintaxa general este dat de:
<%@ taglib uri=URI_Bibl_Tag prefix=tagPrefix%>

unde tagPrefix definete un ir ce va fi folosit ca prefix pentru tag-urile din aceast bibliotec, cu urmtoarea sintax
prefix:numeTag

Prefixul reprezint, de fapt, descriptorul(identificatorul) bibliotecii specificat n URI. 5.2.2.5 Elemente de scripting Elementele de scripting utilizate n pagini JSP permit inserarea de cod Java, de declaraii de variabile i de metode, de scriptlets (cod Java arbitrar) i de expresii. Declaraiile sunt specificate cu urmtoarea sintax general:
<%! Declaraii de variabile i metode Java %>

Un scriptlet reprezint cod Java executat n momentul procesrii cererii i este specificat n pagina JSP prin <% cod Java %>. O expresie definit cu sintaxa <%= expresie Java %> este o expresie Java care va fi evaluat n momentul procesrii cererii iar rezultatul ei va fi convertit n String i afiat n pagina de rspuns. Comentariile sunt reprezentate prin forma:
<!-- comentariu -->

5.2.2.6 Aciuni standard Toate containerele JSP (indiferent de implementare) realizeaz o srie de aciuni standard care afecteaz comportamentul paginii la momentul execuiei i rspunsul returnat clientului. O aciune standard este descris cu un tag special. La momentul compilrii paginii n servlet, containerul nlocuiete tag-ul cu codul Java predefinit pentru acesta. 5.2.2.7 Tipurile de acini standard
1. <jsp:useBean>

86

Separarea ntre cod i prezetare se face, n general, nglobnd codul ntr-un obiect Java de tip JavaBean. Aciune specificat prin <jsp:useBean> instaniaz sau localizeaz o instan JavaBean Aceast instan se identific cu un Id, identificare valabil n cadrul unui domeniu (scope) specificat. Obiectul este ulterior referit din JSP-ul curent sau din alt JSP, funcie de domeniu, utiliznd Id-ul asociat. Sintaxa general este dat de:
<jsp:useBean id=nume scope=numeDomeniu detalii_bean />

unde scope poate fi:


page, request, session, application

iar detalii_bean este una din urmtoarele combinaii:


class=nume_clasa class=nume_clasa type=nume_tip beanName=nume_bean type=nume_tip type=nume_tip 2. <jsp:setProperty>

Aceast aciune este utilizat n conjuncie cu aciunea jsp:useBean pentru a seta valoarea proprietilor bean-ului. Proprietile pot fi simple sau indexate. Ele pot fi setate n una din variantele urmtoare: la apariia cererii i utiliznd parametrii din obiectul request,la apariia cererii setarea fcndu-se ca urmare a evalurii unei expresii sau setare de proprieti pe baza unui String specificat.
<jsp:setProperty name=nume_bean detalii_prop />

unde detalii_prop este una din urmtoarele:


property=* property=nume_prop property=nume_prop param=nume_param property=nume_prop value=valoare_prop 3. <jsp:getProperty>

Aceast aciune este complementar cu precedenta. Prin ea se acceseaz valoarea unei proprieti, are loc convertirea acesteia n ir de caractere i tiprirea irului n fluxul de ieire catre client.
<jsp:getProperty name=nume property=nume_prop /> 4. <jsp:param>

87

Utilizarea aciunii permite crearea unui set de perechi nume-valoare pentru a fi folosite de alte tag-uri.
<jsp:param name=nume_param value=valoare_param /> 5. <jsp:include>

Aceast aciune realizeaz includerea, la momentul execuiei, a unei resurse dinamice specificat prin URL.
<jsp:include page=URL flush=true />

sau cu parametri
<jsp:include page=URL flush=true> <jsp:param name=nume_p value=valoare_p /> ... </jsp:include>

Aciunea include poate fi static sau dinamic. Ea este realizat la momentul execuiei, nu este analizat sintactic ci inclus in_line i este destinat utilizrii pentru resurse ce se modific frecvent. Spre deosebire de aceasta, directiva include este o static, realizat la compilare, analizat sintactic(parse) de ctre container i utilizat pentru resurse ce nu se modific frecvent.
6. <jsp:forward>

Aciunea specific dirijarea cererii ctre o alt pagin JSP i permite specificarea de parametri, dac e necesar. Sintaxa general este urmtoarea:
<jsp:forward page=URL /> 7. <jsp:plugin>

Este o aciune utilizat pentru a genera tag-uri HTML <OBJECT> sau <EMBED> specifice fiecrui browser. Prezena acestor tag-uri determin executarea obiectului (applet-ului sau a JavaBean) specificat n tag, execuie precedat, dac e necesar, de descrcarea unui software ce va fi conectat la browser (Java plug-in).
<jsp:plugin type=bean|applet code=objectCode codebase=objectCodebase align=alignment archive=archiveList height=height hspace=hspace jreversion=jreversion name=componentName vspace=vspace width=width nspluginurl=url iepluginurl=url> <jsp:params> <jsp: param name=nume value=val /> </jsp:params> <jsp:fallback> Text de afisat </jsp:fallback> </jsp:plugin>

88

5.2.3 Obiecte implicite Ca i celelalte tehnologii de scripting studiate, tehnologia JSP ofer un set de obiecte implicite specifice programrii Web. Aceste obiecte sunt derivate din servlet API. Obiectul Request conine cererea i are ca domeniu de vizibilitate (scope) cererea. Obiectul Response conine rspunsul la cerere i are ca domeniu de vizibilitate pagina. Obiectul predefinit PageContext ofer acces la atributele partajate ale paginii i are ca domeniu de vizibilitate pagina. Obiectul Session reprezint sesiunea creat, automat, n urma unei cereri client. El are ca domeniu de vizibilitate o sesiune client. Obiectul Aplication rprezint contextul servlet-ului. El este obinut de la obiectul de configurare a servletului i are ca domenui de vizibilitate aplicaia. Obiectul Out este obiectul care scrie n fluxul de ieire ctre client. Obiectul predefinit Config reprezint ServletConfig pentru pagina JSP i are ca domeniu de vizibilitate pagina. Page este obiectul care reprezin instana servletului care implementeaz pagina i care proceseaz cererea curent. Acesta are pagina ca domeniu de vizibilitate i este echivalent cu this. 5.2.4 Proiectarea aplicaiilor care utilizeaz JSP Aplicaiile utilizeaz JSP n scopul separrii logicii de prezentare. Exist dou abordri principale n proiectarea aplicaiilor care utilizeaz JSP. 5.2.4.1 Abordarea client-server, orientat pagin Paginile JSP sau servleturile acceseaz resursele (ex. baz de date) n mod direct sau prin intermediul unei componente JavaBean i genereaz ele nsele rspunsul. Avantajul acestei abordri este simplitatea n programare. Dezavantajele abordrii sunt lipsa unei bune scalabiliti i poriuni mari de cod Java inclus n pagina JSP.

Browser la client

Server

JSP sau Servlet-s Browser la client cerere/raspuns Intercepie cereri client

<<uses or instantiates>> Browser la client Enterprise JavaBeans BD

n continuare sunt prezentate dou variante arhitecturale acestei abordri.

89

Page-View n aceast variant tot codul Java este inclus n interiorul HTML. Cererile sunt adresate direct la o pagin JSP care conine cod Java inclus i tag-uri care genereaz coninut dinamic pentru a fi substituit n pagina HTML.
Procesare business

JSP

Page-View cu component (Bean) Aceasta este o variant mai complex n care majoritatea codului pentru logica aplicaiei i pentru accesul la date migreaz la o alt component, numit Worker. n pagina JSP rmn, n special, tag-urile destinate formatrii informaiilor i specificrii componentelor pentru prelucrarea datelor. Varianta prezint avantajele partajrii componentei de ctre mai multe pagini JSP i posibilitii modificrii independente de pagini a componentei care implementeaz logica aplicaiei.
JSP Worker bean Procesare business

5.2.4.2 Abordarea dispecer Abordare dispecer distribuie codul pe mai multe straturi. Un servlet sau o pagin JSP are funcie de mediator sau controller. Acesta este responsabil cu delegarea cererilor ctre alte pagini JSP sau ctre componente Java (JavaBeans). Aceast abordare poate fi realizat intr-una din urmtoarele trei variante arhitecturale. Mediator-View
serviciu JSP mediator serviciu JSP prezentare serviciu JSP prezentare Worker bean JSP prezentare Worker bean Dele gare Procesare business

90

Conform arhitecturii din figura de mai sus, mediatorul execut o serie de operaii comune (ex. autentificare) apoi solicit diferite servicii pentru realizarea unei cereri complexe. Fiecare serviciu este parionat n cte dou componente, componenta de prezentare i componenta de execuie (Worker). Mediator-Composite View Aceast arhitectur are un grad sporit de complexitate pentru a realiza separarea unui template HTML static dar cu modificri frecvente, care astfel pot fi fcute independent de restul aplicaiei. Arhitectura permite utilizarea de pagini JSP pe mai multe nivele (nested).

JSP Req

Static HTML template Cu modificri frecvente

JSP mediator Antet

Resp

Coninut Subsol

Antet Coninut Subsol

Component Worker bean

Component pentru delegare operaii

EJBs

Resurs back-end

91

Service to Workers
CONTROLLER SERVICIU

JSP mediator

Delegare business VIEW JSP Etapa 2 MODEL WORKERS Etapa 1

Resurse EJB

Etapa 3

JavaBean

Aceast arhitectur se suprapune peste arhitectura MVC separnd n mod clar componentele acesteia. JSP mediator reprezint controller-ul care primete cererea ce conine gesturile utilizatorului i apeleaz componentele WORKERS (Etapa 1) care sunt responsabile cu actualizarea modelului prin intermediul componentei de delegare business. Starea modelului este, de asemenea, pstrat n componentele JavaBean. Dupa realizarea operatiilor de actualizare a modelului de ctre componentele din WORKERS, controllerul (JSP mediator) notific componenta (Etapa 2) View reprezentat de pagina JSP care transmite rspunsul la client. Aceasta va construi rspunsul pe baza informaiilor pe care le solicit de la componenta WORKERS (Etapa 3).

92

6. EXERCIII
1. Realizai un formular(form) de introducere date conform urmtoarelor specificaii. component de tip text pentru preluare nume i prenume component de tip text pentru preluare adresa e-mail component de tip caset de selecie pentru preluare specializare component de tip caset de selecie pentru preluare curs component de tip caset de selecie pentru preluare activitate activitile pot fi: studiu curs, lucrare laborator, test gril. component de tip buton radio pentru selecie an de studiu (I, II, III sau IV) component de tip buton de validare (checkbox) pentru specificare selecii dintre variantele: - Activitate interactiv - Activitate de studiu individual - Activitate de lucru n colaborare cu ali studeni Trei butoane de submisie a informaiilor introduse n formular cu urmtoarele semnificaii: - lansare activitate - afiare stare student n raport cu activitatea selectat - anulare informaii introduse n form (cancel)

2. Creai un set de frame-uri. Unul dintre frame-uri va avea ca surs un fiier ce conine un alt set de frame-uri. Specificai surse pentru fiecare frame. Afiai pagina HTML compus astfel. Adaugai o ancor care are ca TARGET numele unuia din frame-urile subsetului de frame-uri. Referina pentru ancor va fi un nou fiier HTML sau un fiier GIF. Activai referina. Observai actualizarea coninutului frame-ului. Adaugai o ancor care are ca TARGET numele frame-ului ce conine subsetul de frame-uri. Referina pentru ancora va fi un nou fiier HTML sau un fiier GIF. Activai referina. Observai c astfel se poate actualiza coninutul unui ntreg set de frame-uri. Realizai o structur format din 3 cadre cu urmtorul coninut: Cadrul 1. Titlul aplicaiei Butoane corespunztoare opiunilor aplicaiei Cadrul 2. Forma creat la exerciiul 1

93

Cadrul 3. Un tabel cu cursurile disponibile: titlu curs nume profesor nume asistent programare curs programare laborator programare verificare algoritm de calcul not O component de tip textarea pentru preluare comentarii. 3. Studiai urmatorul document HTML ce conine definiii de stil:
<HTML> <HEAD> <TITLE>Stil cu CSS</TITLE> </HEAD> <STYLE type=text/CSS> <! - BODY {margin-left: 0.75in; margin-right: 0.75in; margin-top: 0.10in; background: white;} H1,H2 {font-family: 18pt; text-align: left} H1 {font-size: 18pt; text-align: left} H2 {font-size: 14pt; text-align: right} P {font: garamond 12pt/11pt normal} P.left {text-align: left} P.right {text-align: right} A {text-decoration: none; font-weight: bold} - - > <BODY> <H1>ceva ...</H1> <P class=left>ceva ...<A href=un URL title=un titlu> ceva ... </A>ceva ...</P> <H2>ceva</H2> <P class=right>ceva ...<A href=un URL title=un titlu>ceva ... </A>ceva ...</P> </BODY> </HTML>

4. Creai un document HTML care conine definirea stilului n antetul su. 5. Creai un document HTML care definete stiluri la nivel de tag. 6. Creai un fiier *.css cu definiii de stil i un document HTML care utilizeaz aceste definiii. 7. Creai mai multe fiiere cu definiii de stil. Ilustrai pe exemple: - posibilitatea de a utiliza stiluri combinate ntr-un document HTML - posibilitatea reutilizrii unui stil n mai multe documente HTML 8. Creai o pagin Web care s afieze proprietile obiectelor din ierarhia JavaScript.

94

9. Creai o pagin Web care s afieze proprietile navigatorului Web. 10. Creati o pagin Web care s afieze un text n bara de stare pe perioada ct cursorul de mouse se afl n zona unui control dat (ex. textarea, button, etc). Indicaii: Se va utiliza obiectul predefinit status cruia i se va atribui valoarea textului de afiat. Se va utiliza cod JS in-line, adic ataat controlului. Deoarece codul trebuie plasat ntre ghilimele, pentru delimitarea irului ce conine textul de afiat se va utiliza apostrof. Model:
< on MouseOver = status = un text ; return true; >

11. Creai o pagin Web cu dou frame-uri. ntr-un frame sunt afiate trei butoane cu numele a trei cursuri. Cnd se solicit, prin apsare pe buton, un curs, textul acestuia apare n al doilea frame, cu condiia ca solicitarea s fie fcut n ziua din sptmn i ntre orele n care se ine cursul. 12. S se programeze o pagin HTML n care client-ul poate converti orice suma n lei n suma echivalent n dolari USA i n EURO. Se va prevedea posibilitatea modificrii cursului valutar. 13. Creai o pagin Web cu urmtoarele specificaii:
List operaii pe produs List de 3 produse

Rezultatul operaiei selectate Pentru produsul selectat

Pentru fiecare produs se cunosc preul unitar i cantitatea disponibil. Operaiile sunt: - determinare valoare stoc - determinare valoare stoc dac preul se modific (+ sau -) cu un procent indicat de utilizator - determinare valoare stoc dac se vinde o cantitate indicat de utilizator - operaie propus de voi 14. Utiliznd funciile SetCookie i GetCookie de la curs, creai o pagin Web care s permit setarea unui cookie prin preluarea de la utilizator, ntr-o form, a coninutului acestuia. Afiai cookie-ul astfel setat. Creati o alt pagin Web care utilizeaz informaiile din cookie pentru a indica seleciile implicite ale utilizatorului pe o anumita form (eventual aceeai).

95

15. Studiati administrarea serverului Apache. Studiati administrarea serverului IIS 16. Creai un applet conform specificaiilor de la ex.13. Instalai-l pe serverul Web i verificai accesarea lui n Internet. 17. Creai o pagin Web care s permit preluarea identificatorului utilizatorului (nume) i a unui cod care s indice o manier de validare din trei variante. Aceste informaii vor fi memorate ntr-un cookie. Creai un applet care permit acces doar utilizatorului nregistrat n cookie i s realizeze identificarea acestuia conform manierei setate. Maniera de identificare poate fi de tipul: appletul scrie un numar iar utilizatorul trebuie s raspund cu ptratul acestuia sau cu rezultatul altei expresii prestabilit, sau appletul scrie un cuvnt iar utilizatorul trebuie s raspunda cu un sinonim al acestuia, etc. (rmne s alegei voi cele trei maniere de identificare pe care s le implementai n applet). Dac utilizatorul este acceptat i se va rspunde cu hello nume_utilizator i i se va permite s realizeze o operaie (ex. conversia leu/dolar i leu/USD). 18. Creai o aplicaie ASP conform urmtoarelor specificaii: - Afiai la client valorile de mediu ale serverului Web. - Preluai ntr-o form numele i prenumele utilizatorului precum i un text scurt. - La server se valideaz completarea tuturor cmpurilor i se rspunde cu un mesaj de ntmpinare sau se foreaz revenirea n pagina de preluare date pentru completarea integral a formularului. - Mesajul de ntmpinare se va adresa cu numele utilizatorului i-i va prezenta acestuia un text scurt propriu. - Afiai fiecrui client informaii despre browser-ul su. - Folosii obiectul Session pentru a contoriza numrul de accese ale unui utilizator. - La al treilea acces, utilizatorul va fi redirectat ctre o alt pagin. - La fiecare acces n cadrul aceleiai sesiuni utilizatorul va primi un mesaj de ntmpinare cu numele, prenumele su i cu textul propriu. - Creai posibilitatea ca utilizatorul s modifice textul propriu. - Utiliznd obiectul Application afiati un text comun tuturor utilizatorilor i contorizai numrul de accesri ale aplicaiei. 19. Creai o aplicaie ASP care acceseaz o baz de date conform urmtoarelor specificaii: - Creai o baz de date Access pentru gestionarea cursurilor opionale. Baza de date va conine cel puin dou tabele cu informaii despre cursuri, profesori i studenii nscrii. - Interfaa aplicaiei va conine mai multe frame-uri . ntr-unul din acesta va fi disponibil permament urmtorul menu: - CURSURI

96

STUDENI PROFESORI EXAMINARE Opiunile CURSURI, STUDENI i PROFESORI au operaii de afiare, adugare, modificare i tergere informaii din tabelele corespunztoare. Opiunea de EXAMINARE are operaii diferite funcie de cine o accseaz. Dac este accesat de un profesor atunci acesta poate pune sau modifica notele studenilor nscrii la cursul su. Dac este accesat de un student atunci acesta i poate vedea doar situaia proprie la cursurile opionale. Creai o baz de date similar pe MS-SQL Server. Extindei aplicaia astfel nct s se poat alege localizarea bazei de date fie n Access fie n MS-SQL Server.

S-ar putea să vă placă și