Documente Academic
Documente Profesional
Documente Cultură
Internet
Curs 1
- Internet şi Web -
1
1. Internet
1.1. Istoric
La mijlocul anilor 1960, când Războiul rece era în punctul culminant,
Dod-ul (Department of Defense - Departamentul de Apărare al Statelor
Unite) a vrut o reţea de comandă şi control care să poată supravieţui
unui război nuclear.
Tradiţionalele reţele telefonice cu comutare de circuite erau prea
vulnerabile, deoarece pierderea unei linii sau a unui comutator ar fi pus
capăt tuturor conversaţiilor care le foloseau şi ar fi partiţionat reţeaua.
Pentru a rezolva această problemă, Dod s-a orientat către agenţia sa
de cercetare ARPA (Advanced Research Projects Agency - Agenţia de
Cercetare pentru Proiecte Avansate).
După discuţii cu diverşi experţi, ARPA a decis că reţeaua de care avea
nevoie Dod trebuia să fie o reţea cu comutare de pachete constând
dintr-o subreţea şi calculatoare gazdă. Subreţeaua avea să fie o
subreţea datagramă, astfel că dacă unele linii de transmisie şi
calculatoare gazdă se defectau, mesajele puteau fi redirijate automat
pe căi alternative.
2
Cercetările pentru găsirea de protocoale potrivite pentru a rula pe
ARPANET şi pe LAN-urile (Local Area Network) ce se conectau într-un
număr tot mai mare la acesta a culminat cu invenţia modelului şi
protocoalelor TCP/IP. Astfel TCP/IP a fost proiectat special pentru a
trata comunicarea prin inter-reţele.
In timpul anilor 1980 au fost conectate la ARPANET multe alte reţele, în
special LAN-uri. Pe măsură ce creştea dimensiunea reţelei, găsirea
gazdelor devenea tot mai costisitoare. De aceea a fost creat DNS
(Domain Naming System - Sistemul Numelor de Domenii), care
organiza maşinile în domenii şi punea în corespondenţă numele
gazdelor cu adrese IP. De atunci, DNS a ajuns să fie un sistem de baze
distribuit, generalizat, folosit pentru a memora informaţii referitoare la
procedurile de atribuire a numelor.
3
La sfârşitul anilor 1970, NSF (U.S. National Science Foundation -
Fundaţia Naţională de Ştiinţă din SUA) a remarcat impactul enorm pe
care ARPANET-ul îl avea asupra cercetării universitare, reţeaua
permiţând partajarea datelor şi colaborarea în cadrul proiectelor de
cercetare.
Dar, pentru a se conecta la ARPANET, o universitate trebuia să aibă un
contract de cercetare cu DoD, iar multe universităţi nu aveau.
4
De aceea, în 1984 NSF a început să proiecteze un succesor de mare
viteză al ARPANET-ului, care să fie deschis tuturor grupurilor de
cercetare din universităţi.
Pentru a avea ceva concret cu care să înceapă, NSF a hotărât să
construiască o coloană vertebrală care să lege centrele sale de
supercalculatoare din şase oraşe: San Diego, Boulder, Champaign,
Pittsburg, Ithaca şi Princeton. Acesta a fost primul WAN (Wide Area
Network) TCP/IP.
NSF a finanţaţ, de asemenea, un număr de 20 de reţele regionale care
se conectau la coloana vertebrală, permiţând utilizatorilor din mii de
universităţi, laboratoare de cercetare, biblioteci şi muzee să acceseze
oricare dintre supercalculatoare şi să comunice între ei.
Reţeaua completă, care includea coloana vertebrală şi reţelele
regionale, a fost numită NSFNET.
5
Numărul reţelelor, maşinilor şi utilizatorilor conectaţi la ARPANET a
crescut rapid după ce TCP/IP a devenit, la 1 ianuarie 1983, unicul
protocol oficial. Când au fost conectate NSFNET şi ARPANET, creşterea
a devenit exponenţială. S-au alăturat multe reţele regionale şi s-au
realizat legături cu reţele din Canada, Europa şi Pacific.
Pe la mijlocul anilor 1980, lumea a început să vadă colecţia de reţele ca
fiind un internet, iar apoi ca fiind Internet-ul.
6
1.2. Subreţele, reţele, inter-reţele
7
1.3. Internet vs. internet
8
1.4. Modelul de referinţă TCP/IP
9
Toate aceste cerinţe au condus la alegerea unei reţele cu comutare de
pachete bazată pe un nivel inter-reţea fără conexiuni. Acest nivel,
numit nivelul internet este axul pe care se centrează întreaga
arhitectură. Rolul său este de a permite gazdelor să emită pachete în
orice reţea şi de a face ca pachetele să circule independent până la
destinaţie, fiind posibil ca aceasta să se găsească pe o altă reţea.
Pachetele pot chiar să sosească într-o ordine diferită faţă de cea în care
au fost trimise, caz în care, dacă se doreşte furnizarea lor ordonată,
rearanjarea cade în sarcina nivelurilor de mai sus. Nivelul internet
defineşte oficial un format de pachet şi un protocol numit IP (Internet
Protocol - protocol Internet). Sarcina nivelului Internet este să
furnizeze pachete IP către destinaţie. Problemele majore se referă la
dirijarea pachetelor şi evitarea congestiei. În consecinţă, nivelul
internet din TCP/IP funcţionează asemănător cu nivelul reţea din OSI
(International Standards Organization - Organizaţia Internaţională de
Standardizare).
10
Nivelul situat deasupra nivelului internet din modelul TCP/IP este nivelul
transport. Acesta este proiectat astfel încât să permită conversaţii între
entităţile pereche din gazdele sursă şi, respectiv, destinaţie. În acest sens au
fost definite două protocoale capăt-la-capăt. Primul dintre ele, TCP
(Transmission Control Protocol - protocolul de control al transmisiei), este un
protocol sigur orientat pe conexiuni care permite ca un flux de octeţi trimişi de
pe o maşină să ajungă fără erori pe orice altă maşină din inter-reţea. Acest
protocol fragmentează fluxul de octeţi în mesaje discrete şi pasează fiecare
mesaj nivelului internet. La destinaţie, procesul TCP receptor reasamblează
mesajele primite în flux de ieşire. TCP tratează totodată controlul fluxului pentru
a se asigura că un emiţător rapid nu inundă un receptor lent cu mai multe
mesaje decât poate acesta să prelucreze. Al doilea protocol din nivel, UDP (User
Datagram Protocol - protocolul datagramelor utilizator), este un protocol
nesigur, fără conexiuni, destinat aplicaţiilor care doresc să utilizeze propria lor
secvenţiere şi propriul control al fluxului, şi nu pe cele asigurate de TCP.
Protocolul UDP este de asemenea mult folosit pentru interogări întrebare-
răspuns dintr-un foc, client-server, şi pentru aplicaţii în care comunicarea promtă
este mai importantă decât comunicarea cu acurateţe, aşa cum sunt aplicaţiile de
transmisie a vorbirii şi a imaginilor video.
11
Deasupra nivelului transport se află nivelul aplicaţie. Acesta conţine
toate protocoalele de nivel mai înalt. Primele protocoale de acest gen
includeau terminalul virtual (TELNET), transferul de fişiere (FTP – File
Transfer Protocol) şi poşta electronică (SMTP – Simple Mail Transfer
Protocol). Protocolul de terminal virtual permite unui utilizator de pe o
maşină să se conecteze şi să lucreze pe o maşină aflată la distanţă.
Protocolul de transfer de fişiere pune la dispoziţie o modalitate de a
muta eficient date de pe o maşină pe alta. Poşta electronică a fost la
origine doar un tip de transfer de fişiere, dar ulterior a fost dezvoltat un
protocol specializat pentru acest serviciu. Pe parcursul anilor, la aceste
protocoale s-au adăugat DNS-ul (serviciul numelor de domenii) pentru
stabilirea corespondenţei dintre numele gazdelor şi adresele reţelelor,
NNTP – Network News Transfer Protocol, protocolul utilizat pentru a
transfera articole de ştiri, HTTP – HyperText Transfer Protocol, folosit
pentru aducerea paginilor de Web ş.a.
12
Sub nivelul internet se află necunoscutul, nivelul gazdă-reţea.
Modelul de referinţă TCP/IP nu spune mai nimic despre ce se întâmplă
acolo, însă menţionează că gazda trebuie să se lege la reţea, pentru a
putea trimite pachete IP, folosind un anumit protocol. Acest protocol nu
este definit şi variază de la gazdă la gazdă şi de la reţea la reţea.
Cărţile şi articolele despre TCP/IP rareori discută despre acest protocol.
13
1.5. Aplicaţii Internet
14
Până la începutul anilor 1990 Internet-ul a fost foarte populat cu
cercetători din domeniul academic, guvernamental şi industrial. O
aplicaţie nouă, WWW (World Wide Web), a schimbat întreaga situaţie
şi a adus în reţea milioane de utilizatori care nu fac parte din mediul
academic. Această aplicaţie inventată de fizicianul Tim Berners Lee, nu
a modificat nici una din facilităţile existente, în schimb le-a făcut mai
uşor de folosit. Împreună cu programul de navigare Mosaic, scris la
Centrul Naţional pentru Aplicaţiile Supercalculatoarelor (NCSA –
National Centre for Supercomputing Application – University of Illinois),
WWW-ul a făcut posibil ca un site să pună la dispoziţie un număr de
pagini de informaţii conţinând text, poze, sunet, video, în fiecare
pagină existând legături către alte pagini. Printr-un clic pe o legătură,
utilizatorul este transportat la pagina indicată de legătură.
15
De exemplu, multe firme au o pagină principală cu intrări care trimit la
alte pagini pentru informaţii asupra produselor, liste de preţuri,
reduceri, suport tehnic, comunicare cu angajaţii, informaţii despre
acţionari şi multe altele. Într-un timp foarte scurt au apărut numeroase
alte tipuri de pagini: hărţi, tabele cu cotaţii la bursă, cataloage de
bibliotecă, programe radio înregistrate şi chiar pagini care indicau spre
textele complete ale multor cărţi cărora le-au expirat drepturile de
autor (Mark Twain, Charles Dickens, etc.). De asemenea, mulţi oameni
au pagini personale (home pages). În primul an de la lansarea Mosaic-
ului, numărul de servere WWW a crescut de la 100 la 7000 prefigurând
o creştere continuă de-a lungul timpului, creştere ce reprezintă forţa
care va conduce tehnologia şi utilizarea Internet-ului în viitor.
16
2. WWW – World Wide Web
17
2.1. Istoric
18
Mosaic a fost atât de popular încât un an mai târziu, autorul său, Marc
Andreessen, a părăsit NCSA (Centrul naţional pentru aplicaţiile
supercalculatoarelor), unde Mosaic-ul a fost dezvoltat, pentru a forma o
nouă companie, Netscape Communications Corp., care se ocupa cu
dezvoltarea de software pentru Web. Când Nescape a devenit o
companie publică în 1995, investitorii, care probabil au crezut că este
vorba de un fenomen de tip Microsoft, au plătit 1.5 miliarde de dolari
pentru acţiunile companiei. Acest record a fost cu atât mai neaşteptat
cu cât compania avea un singur produs, opera în deficit şi anunţase
probabilii investitori că nu se aşteaptă la beneficii în viitorul apropiat.
19
În 1994, CERN şi M.I.T. (Massachusetts Institute of Technology) au
semnat o înţelegere pentru a forma Consorţiul World Wide Web, o
organizaţie care are ca obiectiv dezvoltarea Web-ului, standardizarea
protocoalelor şi încurajarea interoperabilităţii între situri. Berners-Lee a
devenit director. De atunci, sute de universităţi şi companii au intrat în
consorţiu. M.I.T. a coordonat partea americană a consorţiului în timp
ce centrul de cercetări francez, INRIA (Institut National de Recherche
en Informatique et en Automatique), a coordonat partea europeană.
Deşi există foarte multe cărţi despre Web, cel mai bun loc pentru
găsirea unor informaţii la zi despre el este, în mod natural, chiar Web-
ul. Pagina consorţiului are adresa http://www.w3.org. Aici, cei
interesaţi pot găsi legături la pagini care acoperă toate documentele şi
activităţile consorţiului.
20
2.2 Aspecte generale privind
clientul
Deoarece Web-ul este un sistem client-server sunt prezentate în
continuare atât aspecte referitoare la client (adică utilizator) cât şi cele
referitoare la server.
Din punctul de vedere al utilizatorului, Web-ul constă dintr-o colecţie
imensă de documente răspândite în toată lumea, numite pagini.
Fiecare pagină poate să conţină legături (indicatori) la alte pagini aflate
oriunde în lume. Utilizatorii pot să aleagă o legătură (de exemplu prin
executia unui clic) care îi va aduce la pagina indicată de legătură. Acest
proces se poate repeta la nesfârşit, fiind posibil să se traverseze în
acest mod sute de pagini legate între ele. Despre paginile care indică
spre alte pagini se spune că utilizează hipertext.
Paginile pot fi vizualizate cu ajutorul unui program de navigare
(browser): Mosaic, Netscape, Internet Explorer, Mozilla, etc.
Programul de navigare aduce pagina cerută, interpretează textul şi
comenzile de formatare conţinute în text şi afişează pagina, formatată
corespunzător, pe ecran. Şirurile de caractere care reprezintă legături
la alte pagini se numesc hiperlegături, sunt afişate în mod diferit,
fiind subliniate şi/sau colorate distinct.
21
Pentru a selecta o legătură, utilizatorul va plasa cursorul pe zona
respectivă (utilizând mouse-ul sau tastele săgeţi de pe tastatură) şi
comandă selecţia (cu ajutorul mouse-ului sau apăsând tasta Enter).
Deşi există programe de navigare fără interfaţă grafică, ca de exemplu
Lynx, ele nu sunt atât de utilizate ca programele de navigare grafice.
Pagina adusă poate conţine legături care prin selectare aduc alte pagini
şi aşa mai departe. Noua pagină se poate afla pe aceeaşi maşină ca şi
prima sau pe o maşină aflată undeva pe glob la polul opus. Utilizatorul
nu va şti. Aducerea paginilor este realizată de către programul de
navigare, fără nici un ajutor din partea utilizatorului. Dacă utilizatorul se
va întoarce la prima pagină, legăturile care au fost deja utilizate vor fi
afişate altfel decât celelalte (de exemplu, utilizând o altă culoare)
pentru a fi deosebite de cele care nu au fost încă selectate. Majoritatea
programelor de navigare au numeroase butoane şi opţiuni care ajută
navigarea prin Web. Multe au un buton pentru revenirea la pagina
anterioară, un buton pentru a merge la pagina următoare (acest buton
este operaţional numai după ce utilizatorul s-a întors înapoi dintr-o
pagină).
22
Majoritatea programelor de navigare au un buton sau un meniu pentru
înregistrarea unei adrese de pagină (bookmark) şi un altul care permite
afişarea unor adrese înregistrate, făcând astfel posibilă revenirea la o
pagină cu ajutorul unei simple selecţii realizate cu mouse-ul. Paginile
pot să fie salvate pe disc sau tipărite. Sunt disponibile numeroase
opţiuni pentru controlul ecranului şi configurarea programului de
navigare conform dorinţelor utilizatorului.
În afară de text obişnuit (nesubliniat) şi hipertext (subliniat), paginile
de Web pot să conţină iconiţe, desene, hărţi, fotografii. Fiecare dintre
acestea poate să fie, în mod opţional, legată la altă pagină. Dacă se
selectează unul dintre aceste elemente, programul de navigare va
aduce pagina respectivă şi o va afişa, aşa cum se întâmplă în cazul
selectării unui text. Pentru imaginile care sunt fotografii sau hărţi,
alegerea paginii care se aduce poate să depindă de regiunea din
imagine pe care se face selecţia.
23
Nu toate paginile sunt afişabile. De exemplu, pot să existe pagini care
conţin înregistrări audio, clip-uri video sau ambele. Dacă paginile de
hipertext sunt combinate cu alte tipuri de pagini, rezultatul se numeşte
hipermedia. Numai o parte din programele de navigare pot să afişeze
orice tip de hipermedia. Cele care nu pot, verifică un fişier de
configurare ca să afle cum să trateze datele primite. În mod normal,
fişierul de configurare conţine numele unui program de vizualizare
extern sau al unui program auxiliar pentru aplicaţie, care va fi utilizat
pentru a interpreta conţinutul paginii aduse. Dacă un astfel de program
nu este specificat, atunci programul de navigare poate să ceară
utilizatorului să specifice un program de vizualizare. Dacă nu există un
astfel de program, utilizatorul poate să indice programului de navigare
să salveze pagina adusă într-un fişier pe disc sau să o abandoneze.
Utilizarea unui generator de voce ca program auxiliar permite chiar şi
utilizatorilor orbi să acceseze Web-ul. Alte programe auxiliare conţin
interpretoare pentru limbaje speciale pentru Web, permiţând aducerea
şi execuţia programelor din paginile Web. Acest mecanism permite
extinderea funcţionalităţii Web-ului.
24
Multe pagini de Web conţin imagini de dimensiuni mari, pentru care
încărcarea durează mult. Unele programe de navigare tratează
problema încărcării lente încărcând şi afişând mai întâi textul şi apoi
imaginile. Această strategie oferă utilizatorului ceva de citit cât timp
aşteaptă, şi în acelaşi timp îi permite să renunţe la pagina respectivă
dacă nu este destul de interesantă ca să merite aşteptarea. O altă
strategie este de a oferi opţiunea de a dezactiva aducerea şi afişarea
automată de imagini. Unii creatori de pagini de Web încearcă să trateze
altfel problema utilizatorilor plictisiţi, afişând imaginile într-un mod
special. Mai întâi apare rapid o imagine într-o rezoluţie foarte scăzută.
Apoi se îmbunătăţeşte calitatea imaginii. Pentru utilizator apariţia
imaginii după câteva secunde, chiar şi la o rezoluţie scăzută, este de
multe ori de preferat faţă de situaţia în care acesta urmăreşte modul în
care se desenează imaginea linie cu linie.
25
Unele pagini de Web conţin formulare care cer utilizatorului să
introducă informaţii. Aplicaţiile tipice pentru formulare sunt căutări într-
o bază de date pentru o intrare specificată de utilizator, comandarea
unui produs sau participarea la un sondaj de opinie. Alte pagini de Web
conţin hărţi care permit utilizatorilor să selecteze porţiuni pentru a
obţine informaţii despre anumite zone geografice sau pentru a realiza o
mărire sau o micşorare a imaginii afişate.
Unele programe de navigare utilizează discul local pentru a memora
temporar paginile pe care le aduc. Înainte ca o pagină să fie adusă, se
verifică dacă ea nu se găseşte deja în memoria temporară. Dacă da, se
verifică numai dacă pagina este încă actuală. În caz afirmativ, nu mai
este necesară readucerea paginii. Ca rezultat, selecţia butonului back
pentru a vedea pagina precedentă are un efect foarte rapid.
26
Pentru a permite utilizarea unui program de navigare în Internet, un
calculator trebuie să fie legat la Internet sau cel puţin să aibă o
conexiune la un ruter sau la un alt calculator care este legat direct în
Internet. Această cerinţă apare deoarece aducerea unei pagini de către
un program de navigare presupune stabilirea unei conexiuni TCP cu
calculatorul pe care este memorată pagina, şi apoi transmiterea unui
mesaj, utilizând conexiunea, pentru a cere pagina.
27
2.3. Aspecte generale privind
serverul
Pentru orice server de Web un proces ascultă portul 80 TCP pentru
conexiuni iniţiate de către clienţi (în mod normal programe de
navigare). După ce s-a stabilit o legătură, clientul trimite o cerere şi
serverul trimite un răspuns. Apoi conexiunea este eliberată.
Protocolul care descrie cererile şi răspunsurile permise este HTTP -
HyperText Transfer Protocol.
Exemplul următor arată modul în care funcţionează serverele de
Web: presupunem că un utilizator tocmai a selectat un text sau o
iconiţă care indică spre pagina al cărei nume (URL – Uniform
Resource Locator – adresa uniformă pentru localizarea resurselor)
este http://www.w3.org/Protocols/Specs.html. URL - ul are trei părţi:
numele protocolului (http), numele calculatorului pe care se gaseşte
pagina (www.w3.org) şi numele fişierului care conţine pagina
(Protocols/Specs.html). Etapele care se parcurg între momentul în
care se face selecţia şi afişarea paginii aduse sunt următoarele:
28
programul de navigare determină URL (pe baza selecţiei);
programul de navigare întreabă DNS care este adresa IP pentru
www.w3.org;
DNS răspunde cu 128.30.52.100;
programul de navigare realizează conexiunea TCP cu portul 80 al
128.30.52.100;
trimite o comandă GET Protocols/Specs.html.
serverul www.w3.org transmite fişierul Specs.html;
conexiunea TCP este eliberată.
programul de navigare afişează textul din Specs.html;
programul de navigare aduce şi afişează imaginile din Specs.html.
Multe programe de navigare afişează care este etapa care se execută
într-o fereastră de stare, în partea de jos a paginii. În acest mod, dacă
performanţele sunt slabe, utilizatorul poate să ştie dacă este vorba de
faptul că DNS nu răspunde, că serverul nu răspunde, sau pur şi simplu
de congestia reţelei în timpul transmisiei paginii.
29
Protocolul de transfer standard utilizat de Web este HTTP - HyperText
Transfer Protocol. Fiecare interacţiune constă dintr-o cerere ASCII
(deoarece HTTP este un protocol ASCII ca şi SMTP), urmată de un
răspuns MIME (Multipurpose Internet Mail Extension – extensii de
poştă cu scop multiplu, generat de problemele care includeau
transmisia şi recepţia de mesaje în limbi cu accente – de ex. germană
şi franceză, mesaje în alfabete ne-latine – de ex. ebraică şi rusă,
mesaje în limbi fără alfabet – de ex. chineză şi japoneză, mesaje care
nu conţin text deloc – de ex. audio şi video; MIME defineşte cinci noi
antete de mesaje) conform RFC 822 (RFC – Request for Comments –
cereri pentru comentarii, sunt rapoarte tehnice, pot fi citite on-line şi
sunt numerotate în ordinea cronologică a creării lor). Cu toate că
utilizarea TCP pentru conexiuni de transport este foarte obişnuită, el nu
este impus oficial de către standard.
30
HTTP este în continuă evoluţie. Câteva versiuni sunt în utilizare şi altele
noi sunt în curs de implementare. În continuare sunt prezentate pe
scurt noţiunile de bază.
Protocolul HTTP constă din două tipuri de elemente: mulţimea cererilor
de la programele de navigare către servere şi o mulţime de răspunsuri
care merg în sens invers. HTTP suportă două tipuri de cereri: simple şi
complete. O cerere simplă este doar o linie GET în care se indică
pagina dorită, fără specificarea versiunii de protocol. Răspunsul este
format numai din pagină, fără antete, fără MIME, fără nici o codificare.
Un exemplu de utilizare a programului Telnet pentru a obţine o
conexiune TCP pe portul 80 al serverului www.w3.org:
se scrie: telnet www.w3.org 80
se afişează: Trying 128.30.52.54….
Connected to www.w3.org
după care se scrie: GET Protocols/Specs.html
Pagina va fi transmisă fără nici o indicaţie referitoare la conţinut. Acest
mecanism este necesar pentru compatibilitatea cu versiuni mai vechi.
31
Cererile complete sunt indicate de prezenţa versiunii de protocol în linia
GET. Cererile pot să fie formate din mai multe linii, urmate de o linie
albă, care indică sfârşitul cererii. Prima linie a unei cereri complete
conţine comanda (GET este una dintre posibilităţi), pagina dorită şi
protocolul/versiunea:
se scrie: telnet www.w3.org 80
se afişează: Trying 128.30.52.54….
Connected to www.w3.org
se scrie: GET Protocols/Specs.html HTTP/1.0
se scrie:
Serverul răspunde cu o linie de stare care descrie ce protocol va utiliza
(acelaşi cu al clientului) şi codul 200, care arată că operaţia decurge
corect. Pe linia următoare se transmite un mesaj conform RFC 822
MIME. Urmează o linie goală şi corpul mesajului.
32
Deşi HTTP a fost proiectat pentru utilizarea pentru Web, el este “mult
mai general” decât este necesar, având o deschidere pentru viitoare
aplicaţii obiect-orientate. Din acest motiv, primul cuvânt dintr-o cerere
completă este numele metodei care se va executa asupra paginii Web
(sau a unui obiect în general). Metodele sunt:
GET - o cerere de citire a unei pagini de Web;
HEAD - o cerere de citire a antet-ului unei pagini de Web;
PUT - o cerere de memorare a unei pagini de Web;
POST - adăugarea la o resursă cu nume (de exemplu o pagină de
Web);
DELETE - ştergerea unei pagini de Web;
LINK - conectarea a două resurse existente;
UNLINK - întreruperea unei conexiuni dintre două resurse.
Pentru numele comenzilor este semnificativă utilizarea literelor mari, de
exemplu GET este un nume corect în timp ce get nu.
33
Metoda GET cere serverului să aducă pagina (prin asta înţelegem
obiect în general), codificată în mod corespunzător în MIME. Dacă
cererea GET este urmată de un antet If-Modified-Since, serverul
transmite datele numai dacă ele au fost modificate de când s-a făcut
aducerea lor. Utilizând acest mecanism, un program de navigare care
trebuie să afişeze o pagină memorată poate să ceară condiţionat
aducerea, indicând timpul de modificare asociat paginii. Dacă pagina
memorată este încă validă, serverul răspunde indicând numai faptul că
pagina este încă validă, eliminând astfel consumul de timp presupus de
readucere a paginii.
Metoda HEAD cere numai antetul mesajului, fără să ceară şi pagina
propriu-zisă. Această metodă poate să fie utilizată pentru a afla când s-
a făcut ultima modificare, pentru a culege informaţii pentru indexare,
sau numai pentru a verifica corectitudinea unui URL. Nu există comenzi
HEAD condiţionate.
34
Metoda PUT este inversa metodei GET: în loc să se citească o pagină,
scrie pagina. Această metodă permite să se construiască o colecţie de
pagini de Web pe un server la distanţă. Corpul cererii conţine pagina.
Pagina poate să fie codificată utilizând MIME, caz în care liniile care
formează comanda PUT pot să includă Content-Type şi antete de
autentificare, pentru a demonstra că într-adevăr cel care face cererea
are dreptul să o facă.
Metoda POST este similară cu metoda PUT. Şi ea conţine un URL, dar
în loc să înlocuiască date existente, noile date se vor adăuga într-un
mod general. De exemplu, se poate transmite un mesaj la un grup de
ştiri sau adăuga un fişier la un sistem de informare în reţea. În acest
mod se doreşte ca Web-ul să preia şi funcţionalitatea sistemului de ştiri
USENET.
35
DELETE realizează ştergerea unei pagini. Ca şi la PUT, autentificarea şi
drepturile de acces joacă aici un rol important. Nu există nici o garanţie
că operaţia reuşeşte, deoarece chiar dacă serverul doreşte să execute
ştergerea, fişierul poate să aibă atribute care să interzică serverului
HTTP să îl modifice sau să îl şteargă.
Metodele LINK şi UNLINK permit conectarea pentru stabilirea unor
conexiuni între pagini şi alte resurse. Fiecare cerere primeşte un
răspuns constând din linia de stare şi informaţii suplimentare (de
exemplu o parte sau toată pagina Web). Linia de stare poate să conţină
codul 200 (operaţie terminată corect), sau un cod de eroare, de
exemplu 304 (nemodificat), 400 (cerere eronată) sau 403 (interzis).
Standardele HTTP descriu în detaliu antetele şi corpurile mesajelor.
36
O pagină Web poate să conţină referinţe la alte pagini. Pentru a avea o
pagină care să indice spre altă pagină este necesar un mecanism care
să permită numirea şi regăsirea paginilor. În particular, sunt trei
întrebări la care trebuie să se răspundă înainte de a se putea afişa o
pagină:
cum se numeşte pagina?
cum este localizată pagina?
cum se face accesul la pagină?
Soluţia aleasă care identifică paginile într-un mod care rezolvă toate
cele trei probleme este URL(Uniform Resource Locators ). Fiecare
pagină are un URL (o adresă uniformă pentru localizarea resurselor)
care funcţionează ca nume al paginii general valabil. Un URL are trei
componente: protocolul, numele DNS al maşinii pe care este memorat
fişierul şi un nume local, care indică în mod unic pagina (de obicei,
numele fişierului care conţine pagina).
37
Astfel se explică funcţionarea hipertextului. Pentru a face o porţiune de
text selectabilă, cel care scrie pagina trebuie să furnizeze două
elemente: textul prin care se face selecţia şi URL-ul paginii care trebuie
adusă, dacă textul este selectat. Când se face selecţia, programul de
navigare caută numele serverului utilizând DNS-ul. Pe baza adresei IP a
serverului, programul de navigare stabileşte o conexiune TCP spre
server. Utilizând această conexiune, se transmite numele fişierului
utilizând protocolul specificat.
URL-urile au fost proiectate nu numai pentru a permite utilizatorilor să
navigheze prin Web, dar şi pentru a utiliza FTP, news, Gopher (metodă
de regăsire a informaţiei, similară conceptual cu cea utilizată de Web,
dar acceptând numai text şi imagini), e-mail şi telnet, ceea ce face
inutile interfeţele specializate pentru aceste protocoale (ftp, news,
gopher, mailto, telnet) integrând astfel într-un singur program,
navigatorul în Web, aproape toate tipurile de acces în Internet.
38
În ciuda tuturor acestor proprietăţi, creşterea Web-ului a scos în
evidenţă şi o slăbiciune a metodei utilizării URL-urilor. Pentru o pagină
care este foarte des referită, ar fi de preferat să existe mai multe copii
pe servere diferite, pentru a reduce traficul în reţea. Problema este că
URL-urile nu oferă nici o posibilitate de indicare a unei pagini fără să se
specifice unde este localizată pagina respectivă. Nu există nici o
metodă pentru a spune ceva de genul: „Vreau pagina x, dar nu mă
interesează de unde o aduci”. Pentru a rezolva această problemă şi a
permite multiplicarea paginilor s-a creat un sistem de URI (Universal
Resource Identifiers – identificatori universali de resurse).
39
Tehnologii de programare în
Internet
Curs 2
- HTML -
40
Limbajul HTML este o aplicaţie a standardului ISO 8879, SGML
(Standard Generalized Markup Language – limbajul standard
generalizat de marcare), specializat pentru hipertext şi adaptat la Web.
HTML este un limbaj de marcare, un limbaj care descrie cum trebuie să
fie formatate textele.
Termenul de „marcare” provine din timpurile vechi, când editorii făceau
marcaje pe documente pentru a indica tipografului ce font-uri să
folosească .
Limbajele de marcare conţin comenzi explicite pentru formatare. De
exemplu, în HTML, <B> înseamnă început de mod aldin şi </B>
înseamnă terminarea utilizării modului aldin.
Avantajul utilizării unui limbaj de marcare faţă de unul în care nu se
utilizează marcarea explicită constă din faptul că este simplu de scris
un program de navigare care să interpreteze comenzile de marcare.
41
Documentele scrise într-un limbaj de marcare pot să fie comparate cu
cele obţinute utilizând procesoare de text de tip WYSIWYG (What You
See Is What You Get – ce vezi este ceea ce obţii), cum sunt MS-Word
sau Word-Perfect.
Acest tip de sisteme pot să memoreze fişierele utilizând marcaje
ascunse pentru ca formatarea să se poată reface ulterior.
Prin standardizarea şi includerea comenzilor de marcaj în fiecare fişier
HTML, devine posibil ca orice program de navigare să poată să citească
şi să formateze orice pagină Web.
Posibilitatea formatării paginii recepţionate este foarte importantă,
deoarece o pagină poate să fie construită pe un ecran cu 1024 x 768
pixeli utilizând culori codificate cu 24 de biţi, dar s-ar putea să fie
necesară afişarea într-o mică fereastră de pe un ecran cu 640 x 480
pixeli şi utilizând culori codificate pe 8 biţi.
Procesoarele de text de tip WYSIWYG comerciale nu pot să fie utilizate
pentru Web, deoarece limbajul lor intern de marcare, dacă există, nu
este standardizat între furnizori, calculatoare şi sisteme de operare.
De asemenea ele nu pot să realizeze reformatarea pentru diferite
dimensiuni de ferestre sau rezoluţii.
Pe de altă parte, o serie de procesoare de text permit salvarea
documentelor în format HTML în loc de formatul propriu (de exemplu,
MS Word).
42
Ca şi HTTP, HTML este într-o evoluţie continuă.
Când programul Mosaic era singurul program de navigare, limbajul
utilizat de el, HTML 1.0 , reprezenta standardul de facto.
Când au apărut programe de navigare noi, a fost necesar un standard
oficial Internet şi aşa au apărut HTML 2.0, HTML 3.0, HTML 4.0,
versiunile evoluând odată cu eforturile de cercetare de a adăuga noi
facilităţi versiunilor anterioare, incluzând tabele, instrumente, formule
matematice, forme avansate de descriere a stilului (pentru descrierea
organizării paginilor şi definirea semnificaţiilor simbolurilor) etc.
HTML 5
DHTML –Dynamic HTML – animaţia paginilor Web;
XHTML – extensie a HTML pentru obţinerea compatibilităţii cu XML –
Extensible Markup Language;
XHTML+TIME –XHTML Timed Interactive Multimedia Extension –
extensie a limbajului XHTML care oferă documentelor Web suport
pentru temporizare şi sincronizare multimedia.
43
Standardizarea oficială a limbajului HTML este făcută de Consorţiul
WWW, dar diferiţi furnizori de programe de navigare au adăugat o
serie de extinderi proprii.
Aceşti furnizori speră ca cei care construiesc pagini de Web să utilizeze
aceste extensii, astfel încât cei care vor să citească aceste pagini să
aibă nevoie de programe de navigare care ştiu să interpreteze
extensiile respective.
Astfel de abordări îngreunează sarcina standardizării limbajului HTML.
44
2.1 Caracteristici de bază
45
Cum este dispus textul în documentul HTML este nesemnificativ.
Programele de navigare ignoră spaţiile şi trecerile la rând nou,
deoarece textul trebuie să fie formatat pentru a corespunde zonei de
afişare curente.
Corespunzător, se pot utiliza spaţii pentru a face documentele HTML
mai uşor de citit, ceea ce ar fi necesar pentru majoritatea
documentelor.
Liniile albe nu pot să fie utilizate pentru separarea paragrafelor,
deoarece sunt pur şi simplu ignorate. Este necesară utilizarea unor
marcaje explicite.
Unele marcaje au parametri (care au nume), de exemplu <IMG
SRC=sursa_imaginii>. Pentru fiecare marcaj, standardul HTML
oferă o listă a parametrilor care pot să fie utilizaţi, dacă este cazul şi
care este semnificaţia lor. Deoarece parametrii au nume, ordinea în
care se dau valorile parametrilor nu este semnificativă.
46
Din punct de vedere tehnic, documentele HTML sunt scrise utilizând
setul de caractere ISO 8859-1 Latin-1, dar pentru utilizatorii ale căror
tastaturi suportă numai codul ASCII, se pot utiliza secvenţe de
caractere pentru reprezentarea caracterelor speciale cum ar fi è. Lista
caracterelor speciale este precizată în standard. Toate încep cu
caracterul „&” şi se termină cu „;”. De exemplu, è produce è
iar é produce é. Deoarece <, > şi & au semnificaţii speciale,
pot să fie reprezentate numai utilizând secvenţele speciale de caractere
corespunzătoare, < > şi & .
Principalul element din zona de cap este titlul care este cuprins
între <TITLE> şi </TITLE>, dar aici pot să apară şi alte tipuri de
informaţii. Titlul nu este afişat pe pagină. Unele programe de navigare
îl utilizează pentru a eticheta fereastra în care se afişează pagina
respectivă.
//Exemplul 0.
47
2.2 Marcaje HTML
48
<B> şi <I> - marcaje utilizate pentru a indica modurile aldin şi
respectiv cursiv. Dacă programul de navigare nu poate să afişeze
aceste tipuri de caractere, va utiliza un alt mod de a le reprezenta, de
exemplu utilizând diferite culori. În loc de a utiliza stiluri fizice, autorii
pot să utilizeze stiluri logice, cum sunt <DN> (definiţie), <EM>
(evidenţiere), <STRONG> (evidenţiere accentuată) şi <VAR> (variabile
de program). Stilurile logice sunt definite într-un document numit
pagină de stil. Avantajul utilizării unei pagini de stil constă în faptul că
la schimbarea unei definiţii, se vor schimba toate variabilele, înlocuind
de exemplu cursivele printr-un font cu dimensiuni constante.
//Exemplul 2.
//Exemplul 3.
49
<UL> - indică începutul unei liste neordonate. Elementele individuale,
care sunt marcate în sursă cu <LI>, sunt reprezentate precedate de
buline (●). O variantă a acestui mecanism este <OL> care descrie o
listă ordonată. Când se utilizează acest marcaj, textele precedate de
<LI> sunt numerotate de către programul de navigare.
//Exemplul 4.
//Exemplul 5.
<BR>, <P>, <HR> - indică o separare între diferitele părţi ale textului.
Formatul precis este descris în pagina de stil. <BR> forţează trecerea
la linie nouă. De obicei programele de navigare nu inserează o linie
liberă după <BR>. <P> reprezintă un început de paragraf, pentru care
se va insera o linie nouă şi eventual se va face o identare. <HR>
forţează trecerea la linie nouă şi desenează o linie orizontală.
//Exemplul 6.
50
<IMG> - arată că pe poziţia curentă din pagină se va include o
imagine. Marcajul poate să aibă o serie de parametri. Parametrul SRC
indică URL-ul (sau URI-ul) imaginii. În practică, toate programele de
navigare acceptă fişiere în format GIF sau JPEG. ALLIGN este un
parametru pentru <IMG> care controlează modul în care se aliniază
imaginea faţă de limita de jos a textului (TOP, MIDDLE, BOTTOM),
ALT, care furnizează textul afişat în locul imaginii dacă utilizatorul
dezactivează opţiunea de afişare a imaginilor.
<A> (anchor) şi </A> -marcajul de hiper-legătură cu parametri HREF
(URL-ul), NAME (numele hiper-legăturii) şi METHODS (metodele de
acces). Textul cuprins între <A> şi </A> este afişat. Dacă este
selectat, atunci se utilizează hiper-legătura pentru a se aduce o nouă
pagină. În locul textului se poate pune şi un marcaj <IMG>, caz în
care, cu un click pe imagine, se va activa legatura.
//Exemplul 7.
51
<TABLE> - marcajul pentru tabele HTML. O tabelă HTML este formată
din una sau mai multe linii, fiecare fiind formată din una sau mai multe
celule. Celulele pot să conţină diferite tipuri de informaţii, inclusiv text,
figuri şi chiar tabele. Celulele pot să fie alipite, de exemplu, un titlu
poate să se întindă pe mai multe coloane. Autorii paginilor au control
asupra modului în care se face afişarea, inclusiv alinierea, stilul
bordurii, marginile celulelor, dar programul de navigare este cel care
hotărăşte de fapt cum se face afişarea.
<CAPTION> - furnizează un titlu tabelei
<TR> - Table Row, linie în tabelă, precedă fiecare linie
<TH> - Table Header, titlu de coloană, marchează celulele
individuale
<TD> - Table Data, date în tabelă.
în tabele se pot utiliza şi alte marcaje ce includ posibilitatea de a
specifica alinieri orizontale sau verticale ale celulelor, alinierea în
cadrul celulei, margini, gruparea pe celule, unităţi şi altele.
//Exemplul 8.
52
<FORM> şi </FORM> - marchează un formular. Formularele conţin
casete şi butoane care permit utilizatorilor să completeze informaţii sau
să facă selecţii şi apoi să transmită informaţiile la proprietarul paginii.
În acest scop se utilizează marcajul <INPUT>. Acesta are o varietate
de parametrii care determină mărimea, tipul şi modul de afişare a
casetei utilizate. Cele mai obişnuite sunt câmpuri în care utilizatorul
poate să introducă text, casete care pot să fie selectate, hărţi active,
butoane SUBMIT. Textele care nu sunt incluse între marcaje sunt
afişate. Într-un formular poate să fie utilizat orice marcaj obişnuit (de
exemplu, marcajul <P> care indică programului de navigare să afişeze
ceea ce urmează pe o linie nouă, chiar dacă mai este loc pe linia
curentă, dând astfel creatorului paginii posibilitatea să controleze
dispunerea textului sau cum arată formularul pe ecran). Câteva
atribute pentru <INPUT>:
53
NAME – un nume pentru variabila în care va fi memorat şirul
introdus de utilizator.
TYPE - tipul casetei care poate fi:
TEXT - este tipul implicit, deci nu trebuie specificat
TYPE=TEXT,
RADIO - pentru specificarea butoanelor radio ce au
proprietatea că selecţia unuia dintre ele deselectează pe toate
celelalte care fac parte din acelaşi grup; modul de afişare
depinde de interfaţa grafică pe care o utilizează. Depinde de
programul de navigare să aleagă modul de afişare care
corespunde sistemului de ferestre utilizat (de exemplu,
Windows). Dacă există mai multe grupuri de butoane radio, ele
se diferenţiază prin câmpul NAME şi nu printr-un domeniu static
de genul <RADIOBUTTON> şi </RADIOBUTTON> .
CHECKBOX – casete de selecţie
54
PASSWORD – funcţionează la fel ca o casetă TEXT numai că nu
se face afişarea caracterelor introduse
TEXTAREA – similară unei casete TEXT numai că va conţine
mai multe linii.
SUBMIT – buton, când este selectat, informaţia introdusă de
către utilizator este transmisă la calculatorul de pe care provine
formularul. Similar altor tipuri, SUBMIT eate un cuvânt cheie pe
care îl înţelege programul de navigare. Programul de navigare
interpretează şi butonul RESET care selectat aduce formularul
la conţinutul original.
HIDDEN – este utilizat numai ca rezultat, nu poate să fie
selectat sau modificat; de exemplu, atunci când se parcurg o
serie de pagini pentru care s-au făcut selecţii, selecţiile
anterioare pot să fie de tip HIDDEN, pentru a împiedica
modificarea lor.
IMAGE – este utilizat pentru hărţi active (sau alte imagini
selectabile); dacă un utilizator execută clic pe o astfel de
imagine, coordonatele (x, y) ale punctului selectat (adică
poziţia curentă a indicatorului mouse-ului) sunt memorate în
variabile şi formularul este în mod automat transmis
posesorului pentru prelucrări ulterioare.
55
VALUE – utilizat pentru a arăta care buton a fost apăsat, şirul
asociat ca valoare a butonului va fi asociat variabilei indicate de
NAME. Şirul VALUE reprezintă în cazul folosirii cu butonul
SUBMIT eticheta butonului şi se afişează. De asemenea, toate
casetele pot să aibă valori. Pentru casetele TEXT, conţinutul
câmpului VALUE este afişat odată cu formularul, dar utilizatorul
poate să îl modifice sau să îl şteargă. Casetele CHECKBOX şi
RADIO pot să fie iniţializate, utilizând însă un parametru numit
CHECKED (deoarece parametrul VALUE oferă un text dar nu
indică o selecţie).
56
Formularele pot să fie transmise în trei moduri: utilizând butonul
SUBMIT, executând clic pe o hartă activă sau utilizând tasta ENTER
pentru un formular care conţine numai un singur câmp de TEXT. Când
se transmite un formular, trebuie să se execute o acţiune. Acţiunea
corespunzătoare este specificată în parametrii marcajului <FORM>:
ACTION – precizează URL-ul sau URI-ul pentru a indica unde se face
transmiterea
METHOD – specifică ce metodă se utilizează, valoarea sa determină
modul în care variabilele din formular sunt transmise înapoi la
posesorul paginii. Pentru GET, se utilizează un truc, şi anume se
adaugă la URL, separându-le prin semne de întrebare. Această
abordare poate conduce la URI-uri formate din mii de caractere. Totuşi,
pentru că este simplă, această soluţie este frecvent utilizată. Dacă se
utilizează metoda POST, corpul mesajului va conţine variabilele din
formular şi valorile lor. Pentru a separa câmpurile se utilizează
caracterul &; caracterul + reprezintă spaţiu; astfel şirul va fi transmis la
server ca o singură linie. Dacă un CHECKBOX nu este selectat el este
omis din şir. Este problema serverului să interpreteze şirul respectiv.
//Exemplul 9.
57
JavaScript este un limbaj de programare simplu de tip script, pentru
definirea comportamentului elementelor dintr-o pagină Web. Nu este
acelaşi lucru cu mult mai complexul limbaj de programare Java, care
oferă un mediu sofisticat şi robust pentru crearea unei multitudini de
aplicaţii. JavaScript nu este diferit de fişierele BAT de comenzi
secvenţiale, sau de scripturile Unix de tip shell. JavaScript poate
specifica, în mod obişnuit în doar câteva rânduri, răspunsurile la acţiuni
sau evenimente cum ar fi deschiderea unei pagini, deplasarea mouse-
ului într-un anumit punct sau ştergerea unui anumit câmp dintr-un
formular. Atributul LANGUAGE al marcajului <SCRIPT> defineşte
limbajul de scripting; o funcţie JavaScript se defineşte în secţiunea
HEAD a documentului; apelul unei funcţii JavaScript se face din corpul
(BODY) al documentului, dintr-un script (deci într-un marcaj )
<SCRIPT>......</SCRIPT> ). Este posibil ca un script JavaScript să fie
memorat ca un fişier separat (cu extensia .js) şi numele lui să fie dat ca
valoare a atributului SRC al marcajului <SCRIPT>.
58
Fişierul se memorează într-un director la server, numele fişierului dat
ca valoare a atributului SRC va cuprinde şi calea (relativă faţă de
fişierul HTML sau absolută), şi fişierul de script va fi descărcat la client
o dată cu pagina HTML care îl include. Toate tipurile de butoane
admise în limbajul HTML: buton simplu, buton (casetă) de validare,
radio buton, buton de trimitere (submit), buton de resetare (reset)
generează unul sau mai multe evenimente care pot fi tratate folosind
scripturi JavaScript. De exemplu, evenimentul click se desfăşoară atunci
când utilizatorul execută clic pe un element al unui formular sau pe o
legătură şi e tratat de către handler-ul de eveniment onClick. Similar,
evenimentul submit se desfăşoară atunci când utilizatorul transmite un
formular şi e tratat de către handler-ul de eveniment onSubmit.
59
De asemenea, elementele HTML text simplu (text) şi ariile de
text (textarea) generează patru evenimente JavaScript: change,
atunci când utilizatorul modifică valoarea unui text, zonă de text
sau element de selectare (handler de eveniment onChange),
select – atunci când utilizatorul selectează câmpul de intrare al
unui element de formular (onSelect), focus – atunci când se
intră în caseta respectivă, apăsând pe mouse-ul poziţionat în
casetă, altfel spus, atunci când utilizatorul atribuie unui element
de formular control de intrare, blur – atunci când utilizatorul
elimină controlul de intrare de pe un element al unui formular
adică când se părăseşte caseta respectivă, apăsând pe mouse-
ul poziţionat în afara casetei, select – atunci când utilizatorul
selectează câmpul de intrare al unui element de formular,
mouseover – atunci când utilizatorul deplasează indicatorul
mouse-ului deasupra unei legături sau a unei ancore. Elementul
de text password nu generează evenimente.
60
Pentru a face posibile pagini Web puternic interactive - limbajul şi
interpretorul Java.
Java a apărut atunci când câţiva programatori de la Sun Microsystems
au încercat să dezvolte un limbaj nou de programare destinat aparaturii
electronice. Ulterior a fost reorientat spre WWW. Deşi Java a utilizat
multe idei şi sintaxa de la C şi C++, el este un limbaj nou, orientat pe
obiecte, incompatibil cu ambele.
61
Principala idee de a utiliza Java pentru pagini Web interactive este că o
pagină Web poate să indice spre un program scris în Java, numit
applet. Dacă este întâlnit de un program de navigare, applet-ul este
adus pe maşina client şi se face execuţia sa într-o manieră sigură.
Trebuie să fie imposibil pentru applet să scrie şi să citească fişiere la
care nu are drept de acces. Trebuie să fie imposibil pentru applet să
introducă viruşi sau să producă alte stricăciuni. Din aceste motive, dar
şi pentru a realiza portabilitatea pe diferite calculatoare, applet-urile
sunt compilate după ce sunt scrise şi depanate, producându-se un cod
intermediar. Paginile web vor indica către astfel de programe într-o
manieră similară în care se indică paginile. Când este adus un applet, el
este executat interactiv într-un mediu sigur. Un motiv pentru care s-a
dorit includerea applet-urilor Java în pagini de Web a fost acela că Java
permite ca paginile web să fie interactive. De exemplu, o pagină care
conţine o tablă pentru şah poate să joace un joc cu utilizatorul.
Programul de joc (scris în Java) este adus împreună cu pagina de Web.
62
Un alt exemplu, formulare complicate (de exemplu, de tip formular de
calcul) pot să fie afişate, utilizatorul completând intrări şi programul
calculând alte intrări practic instantaneu. Un alt motiv pentru execuţia
unui applet pe maşina clientului este posibilitatea de a adăuga animaţie
şi sunete la paginile de Web fără a utiliza programe de vizualizare
externe. Sunete pot să fie produse atunci când se aduce o pagină, ca
muzică de fundal, sau când apar anumite evenimente (de exemplu,
când se execută clic pe o imagine reprezentând un animal, acesta
scoate un sunet caracteristic). Acelaşi lucru este valabil pentru
animaţie. Deoarece appletul se execută local, chiar dacă este
interpretat, el poate să scrie peste tot ecranul (sau numai peste o parte
a ecranului) în orice mod, cu o viteză foarte mare (comparată cu un
script de tip cgi-bin de la distanţă).
63
Sistemul Java este format din trei părţi: un compilator Java – cod
maşină virtuală (bytecode), un program de navigare care înţelege
applet-uri, un interpretor de cod maşină virtuală. Programatorul scrie
applet-ul în Java şi îl compilează. Pentru a include produsul compilării
într-o pagină Web, se utilizează un nou marcaj <APPLET>, respectiv
</APPLET>. Când programul de navigare întâlneşte acest marcaj,
aduce applet-ul compilat specificat de atributul CODE de pe serverul de
pe care a fost adusă pagina (sau, dacă un alt atribut, CODEBASE, a
fost utilizat, de la URL-ul specificat). Programul de navigare transmite
apoi applet-ul interpretorului local de cod pentru execuţie (sau îl
interpretează dacă are un interpretor intern). Atributele WIDTH şi
HEIGHT ale marcajului <APPLET> dau dimensiunea în pixeli a
ferestrei implicite pentru applet. Într-un fel, marcajul <APPLET> este
analog cu marcajul <IMG>. În ambele cazuri, programul de navigare
“se duce” şi preia un fişier pe care îl transmite unui interpretor local
pentru a-l afişa într-o zonă limitată de pe ecran. După aceea continuă
prelucrarea paginii de Web.
64
Astfel, un document HTML conţinut într-un fişier este o pagină Web
statică, cu conţinut care nu se modifică decât dacă se modifică fişierul
însuşi. Dacă se doreşte ca documentul de răspuns să conţină informaţii
care se modifică în timp sau în funcţie de datele trimise de client, este
necesară generarea dinamică a paginilor Web, sub formă de
documente HTML al cărui conţinut se crează programatic, înainte de a
fi trimise clientului. Pentru generarea paginilor HTML dinamice, serverul
Web transmite cererea clientului unui program executabil sau script,
care generează pagina de răspuns, iar serverul o transmite apoi
clientului.
Generarea dinamică a paginilor HTML se realizează prin diferite
metode, dintre care cele mai cunoscute sunt: CGI (Common Gateway
Interface – interfaţă comună de conversie), PHP (Personal Hypertext
Preprocessor), componente servlet, scripturi JSP (JavaServer Pages).
65
Tehnologii de programare în
Internet
Curs 3
- Tehnologia Java -
66
3.1 Introducere
67
3.2 Tehnologia Java
La baza dezvoltării unui program Java stă mediul de dezvoltare pus la
dispoziţie de firma Sun, JDK (Java Developers Kit). Acest mediu
conţine biblioteci de clase Java, aşa numitele package-uri care
formează JavaAPI (Java Application Programming Interface) şi un set
de utilitare necesare compilării, testării, execuţiei şi documentării unei
aplicaţii Java.
JavaAPI şi JVM (Java Virtual Machine) formează platforma (mediul de
execuţie) Java, JRE (Java Runtime Environment).
În sens generic, platforma este un mediu hardware sau software în
care se execută un program. Cele mai populare platforme (Windows,
Linux) pot fi descrise ca fiind o combinaţie între un sistem de operare şi
un sistem hardware.
Platforma Java este o platformă exclusiv software care rulează
deasupra altor platforme bazate pe hardware. Java Virtual Machine a
fost portată pe diverse platforme bazate pe hardware.
68
Crearea unei aplicaţii Java presupune parcurgerea următoarelor
etape:
editarea fişierului sursă (text în limbaj Java) cu extensia .java
(folosind orice editor de text)
fişierul sursă se transmite ca şi parametru în programul javac.exe
(Java Language Compiler)
compilatorul Java transformă fişierul sursă în fişiere cu extensia
.class (limbaj intermediar, bytecode, şir de octeţi). Bytecode-ul
este un cod independent de platforma spre deosebire de codul
nativ (C++). Codul nativ este codul care după compilare şi link-
editare rulează pe o platformă hardware specifică. Bytecode-ul se
poate interpreta ca fiind instrucţiuni în limbaj maşină pentru JVM.
Este portabil, acelaşi bytecode poate fi rulat pe orice calculator care
are instalat JVM, fie că este vorba de o staţie Windows, Linux, etc.
69
Pentru execuţia unei aplicaţii Java se foloseşte utilitarul java.exe (Java
Interpreter) căruia i se transmite ca parametru numele fişierului rezultat în urma
compilării (fără extensia .class). Prin lansarea în execuţie a acestui utilitar se
porneşte de fapt JVM. Poate fi folosit doar pentru execuţia aplicaţiilor Java
stand-alone.
Exemplul 1.
/*
* Programul afiseaza textul “Hello” şi se incheie
*/
public class Hello{
public static void main (String args[]){
System.out.println(“Hello”);
}
}
70
Pentru rularea applet-urilor se foloseşte utilitarul
appletviewer.exe. Acesta lansează în execuţie o JVM, un
browser minimal de Web care suportă spre deosebire de alte
browsere Web toate caracteristicile Java ale mediului JDK din
care provine. Programul preia ca parametru fişierul cu
extensia .html ce conţine eticheta de conectare cu clasa Java.
Exemplul 2
// HelloWorld.java
import java.awt.*;
import java.applet.*;
public class HelloWorld extends Applet {
public void paint(Graphics g) {
g.drawString("Hello World !", 10, 10);
}
}
71
<html>
<body>
<APPLET code=HelloWorld.class
height = 250 width = 250>
</APPLET>
</body>
</html>
72
3.3 Structura JVM
Componentele JVM sunt:
Class Loader aduce fişierele bytecode necesare execuţiei
programului, fişiere ce se pot găsi pe orice calculator dintr-o reţea.
Bytecode Verifier verifică fişierele bytecode pentru ca acestea să
respecte setul de reguli Java. Dacă un fişier nu se conformează
acestor reguli este respins.
Interpreter + Java RunTime analizează şi transformă fiecare
instrucţiune Java-bytecode (cod maşină JVM) în instrucţiuni ale
maşinii reale.
73
JVM este un nivel suplimentar deasupra platformei de lucru
(hardware + S.O.), de aceea execuţia unui program Java este mai
lentă decât a unui cod nativ (Java lent dar portabil, C++ rapid dar
neportabil). Soluţia este execuţia programului prin intermediul unui
compilator JIT (Just in Time) care transformă din primul moment
întreg programul Java în instrucţiuni procesor ceea ce duce la
mărirea vitezei de execuţie a programului.
Garbage Colector este componenta ce se ocupă de eliberarea
zonelor de memorie alocate şi care nu mai sunt utilizate de
program. Specificaţiile JVM nu impun un algoritm de dezalocare,
lăsând la latitudinea celui ce implementează JVM stabilirea lui.
Security Manager este componenta ce asigură respectarea unor
restricţii de securitate impuse de lucrul cu sistemele deschise.
74
3.4 Tipuri de programe Java
75
3.5 Limbajul Java - caracteristici
76
Simplu: Faţă de C++, Java aduce o serie de simplificări. Java nu
admite în textul sursă instrucţiuni preprocesor (linii care încep
cu #) şi nu are fişiere header (linii care încep cu #include).
Construcţiile struct şi union sunt eliminate. În Java nu există
moştenirea multiplă şi supraîncărcarea operatorilor. În Java nu
există pointeri. Toate obiectele Java sunt alocate dinamic
(folosind new), transparent faţă de programator. Programatorul
nu trebuie să se ocupe de eliberarea memoriei (nu există
delete). Mecanismul de „garbage collection” (mecanism de
colectare şi eliberare a zonelor de memorie nefolosite) rezolvă
problema dezalocării memoriei fără intervenţia programatorului.
77
Orientat pe obiecte: spre deosebire de C++, Java este pur obiectual (în
întregime bazat pe obiecte). În Java, orice, cu excepţia tipurilor de date
primitive (byte, short, int, long, char, float, double, boolean) este
un obiect. Clasele sunt aranjate într-o structură ierarhică, având în vârf
o clasă rădăcină, Object. În Java se pot crea clase şi instanţe ale
acestora (obiecte), se pot încapsula informaţiile, se pot moşteni
atributele şi metodele de la o clasă la alta. Însă în locul moştenirii
multiple, Java oferă o facilitate, numită interface care permite
definirea unui anumit comportament pentru o clasă de obiecte, ce
poate fi altul decât cel definit de clasa de bază printr-o implementare
specifică a unei interfeţe. Într-un fişier Java nu există cod în exteriorul
unei clase. În Java nu există funcţii şi variabile globale. Rămân însă
atributele şi metodele statice definite în clase (sunt partajate de toate
instanţele unei clase). Ca extensie a conceptului de clasă Java
introduce conceptul de package. Un pachet este un set de clase care
asigură împreună un anumit gen de prelucrări. De exemplu, java.lang
oferă clasele şi metodele de bază ale limbajului. Clasa Object este
definită în acest pachet.
78
Distribuit: Pachetul java.net oferă suport pentru dezvoltarea
aplicaţiilor Java de reţea. De exemplu, clasa URL permite aplicaţiilor
Java să acceseze obiecte aflate în Internet. Java suportă atât
conectivitate fiabilă (TCP) prin intermediul clasei Socket cât şi
conectivitate nefiabilă (UDP) prin clasele Datagram*
(DatagramChannel, DatagramPacket).
79
Interpretabil: Compilatorul Java generează, pentru fiecare sursă
compilată, un cod echivalent care se pretează la prelucrare prin tehnica
interpretării. Ca reprezentare internă, codul generat este format dintr-
un şir de octeţi (bytecode). Limbajul interpretativ este unul universal,
nu un cod nativ al unei anumite maşini. Pentru a executa un program
Java este nevoie de un interpretor care să prelucreze octeţii generaţi
de compilator. Forma de generare a codului de octeţi este
independentă (neutră) faţă de o anumită maşină. De aceea codul poate
fi executat pe orice maşină care dispune de un interpretor Java generic
pentru un cod al unei maşini virtuale, JVM.
80
Robust: Java a eliminat o serie de erori de programare tipice,
ceea ce face posibilă scrierea unui soft mai stabil decât al altor
limbaje. Au fost eliminate o serie de deficienţe întâlnite nu
numai la C, dar şi la C++ (moştenite la rândul lor de la C). Java
cere declararea metodelor, deci nu suportă stilul C de declarare
implicită. Cea mai semnificativă extindere este cea legată de
modelele de memorie. Deoarece Java nu suportă pointeri, se
elimină posibilitatea suprapunerii zonelor de memorie şi
alterarea datelor. Java este un limbaj puternic tipizat,ceea ce
permite efectuarea unei serii de controale încă din timpul
compilării. Java măreşte gradul de siguranţă a codului. Pe lângă
verificarea la compilare (prezentă în majoritatea limbajelor) mai
există un nivel de verificare la rulare. Accesul la tablourile Java
este verificat la rulare, eliminând astfel posibilitatea accesului
accidental sau maliţios în afara domeniului tabloului. Se
controlează automat şi necondiţionat depăşirea de indici în
timpul execuţiei. Deasemenea tablourile nu se pot parcurge prin
intermediul unor pointeri ca în C++. Pointerii lipsesc din limbajul
Java, împreună cu aritmetica pointerilor, eliminându-se astfel
una din principalele surse de erori din C++.
81
În plus, eliberarea memoriei ocupate de obiecte şi tablouri se
face automat prin mecanismul de garbage collection evitându-
se astfel încercările de eliberare multiplă a unei zone de
memorie. În Java legarea funcţiilor se face în timpul execuţiei şi
informaţiile de compilare sunt disponibile până în momentul
rulării aplicaţiei. Acest mod de lucru face ca sistemul să poată
determina în orice moment neconcordanţe între tipul referit la
compilare şi cel referit în timpul execuţiei evitându-se astfel
posibile intruziuni răuvoitoare în sistem prin intermediul unor
referinţe falsificate. În acelaşi timp Java detectează referinţele
nule dacă acestea sunt folosite în operaţii de acces. Conversiile
între tipurile de date sunt limitate, evitându-se astfel scrierea
nepermisă a unor zone de memorie. Java are pus la punct un
mecanism de tratare a excepţiilor şi a erorilor sistem.
82
Siguranţă : Este unul din aspectele de bază în Java mai ales pentru
faptul că permite lucrul în reţea. Prin mecanismul de applet Java
permite aducerea şi execuţia de cod aflat oriunde în Internet. Fără un
mecanism de siguranţă, nu s-ar putea evita crearea de viruşi,
implantarea de coduri ostile sau invadarea sistemului de fişiere local.
Toate mecanismele de siguranţă se bazează pe premiza că „nimic nu
poate prezenta siguranţă”. Securitatea merge mână în mână cu
robusteţea. Deoarece gestiunea memoriei nu este la dispoziţia
utilizatorului, el nu poate intra în alte zone de memorie de pe maşina
locală. Altfel spus, mediul de execuţie Java poate fi configurat pentru a
proteja reţeaua locală, fişierele şi celelalte resurse ale maşinii pe care
rulează o aplicaţie Java. Java nu este perfect sigur, este un limbaj cu
securitate ridicată. Java verifică la fiecare încărcare codul prin
mecanisme de CRC (cyclic redundancy check) şi prin verificarea
operaţiilor disponibile pentru fiecare set de obiecte. Variabilele
protejate dintr-un obiect Java nu pot fi accesate fără a avea drepturile
necesare, verificarea fiind făcută în timpul execuţiei.
83
Independent de platformă : Această independenţă de platformă se
impunea, ţinând cont de ideea de lucru în sisteme distribuite. De fapt
un program Java lucrează pe o singură maşină, maşina virtuală Java
(Java Virtual Machine - JVM). Programele executabile Java (bytecodes)
rezultate în urma compilării surselor .java au nevoie de un interpretor
(parte componentă a JVM) specific platformei pe care se execută
(Windows, Unix). Folosirea interpretorului Java duce însă la mărirea
timpului de execuţie. Soluţia este compilarea just-in-time (JIT) care
transformă întregul program Java în program maşină înainte de
execuţia lui. Compilatoarele just-in-time lucrează ca şi interpretoarele,
converteşte bytecode-ul Java în cod executabil pe maşina reală, dar
conversia nu se face pas cu pas, la nivel de instrucţiune ci la nivel de
program, crescând considerabil viteza de execuţie a programului Java.
84
Portabil : Neutralitatea faţă de arhitectură este numai unul dintre
aspectele portabilităţii. Un altul este acela ca limbajul să nu permită
aspecte dependente de implementare (de exemplu, reprezentarea
diferită a tipului int pe diverse implementări C). În acest scop, Java
specifică lungimea în octeţi a fiecărui tip de date ca şi o mărime
aritmetică obişnuită. Mediul Java este portabil pe noile sisteme de
operare, deoarece compilatorul Java este scris tot în Java, în timp ce
executabilul (run time system) este scris în ANSI C (standard publicat
de American National Standards Institute pentru limbajul de
programare C), cu respectarea specificaţiilor POSIX (Portable Operating
System Interface – standard specificat de IEEE pentru definirea de API
pentru software compatibil cu versiuni de sisteme de operare tip Unix,
standard care însă se aplică oricărui sistem de operare).
85
Performanţă înaltă : Ca limbaj interpretativ, viteza unui program Java
este mai mică decât a unui cod generat (echivalent) C sau C++. În GUI
(Graphic User Interface) sau aplicaţii de reţea, procesorul central e
„absent” suficient de mult ca această diferenţă de viteză să nu fie
relevantă per ansamblu, iar portabilitatea să încline balanţa în favoarea
Java. Din alt punct de vedere, toate sistemele de operare folosesc o
parte interpretată (deci lentă), de exemplu interpretoarele de comenzi
(tip shell). Pentru situaţii critice, Java, prin compilarea just in time,
transformă codul de octeţi Java într-un cod maşină nativ la fel de bun
ca şi similarul lui C (C++).
86
Multithreading : este cel care permite ca un program să execute mai
multe sarcini aparent în acelaşi timp, utilizând mai multe fire de
execuţie (thread-uri). Într-o aplicaţie de reţea bazată pe GUI (de
exemplu utilizarea unui browser Web) procesorul se ocupă „simultan”
de controlul animaţiei, calcule, gestiunea memoriei, etc. Java oferă
acest tip de servicii. Astfel pachetul java.lang oferă clasa Thread care
suportă creare, oprire, execuţie, control şi sincronizare thread.
Operarea cu multithreading în C, C++ presupune ca programatorii să-şi
implementeze mecanisme proprii de blocare a unor secţiuni critice şi de
partajare a unor resurse critice. Primitivele furnizate de Java reduc
substanţial acest efort.
87
Dinamic : Java este proiectat să se adapteze la mediul în care se află.
Java este un limbaj dinamic prin faptul că multe decizii privind evoluţia
programului se iau în momentul rulării, la run-time. Dat fiind faptul că
multe din aplicaţiile Java sunt preluate de pe Internet sub formă de
applet-uri chiar în momentul execuţiei lor, deci din reţea, aceste
programe pot fi actualizate să facă faţă noilor cerinţe, utilizatorul
dispunând în orice moment de cea mai nouă variantă. Spre deosebire
de C++, Java poate determina, în faza de execuţie, cărei clase aparţine
un anumit obiect. Este astfel posibilă legarea dinamică a claselor
(polimorfism dinamic). Bibliotecile de clase în Java pot fi reutilizate
foarte uşor. Problema fragilităţii superclasei este rezolvată mai bine ca
în C++. În C++ dacă o superclasă este modificată, trebuie recompilate
toate subclasele acesteia pentru că obiectele au o altă structură în
memorie. În Java această problemă este rezolvată prin legarea târzie a
variabilelor, late binding, doar la execuţie. Regăsirea variabilelor se face
prin nume şi nu printr-un deplasament fix. Dacă superclasa nu a şters o
parte dintre vechile variabile şi metode, ea va putea fi refolosită fără să
fie necesară recompilarea subclaselor acesteia. Se elimină astfel
necesitatea actualizării aplicaţiilor, generată de apariţia unei noi
versiuni de bibliotecă aşa cum se întâmplă, de exemplu, cu toate
celelalte ierarhii C++.
88
O altă caracteristică foarte importantă a limbajului Java este
interconexiunea cu browsere WWW. Acesta este şi unul din avantajele
care a făcut limbajul Java atât de popular. Multe din firmele care
dezvoltă browsere WWW au implementat maşina virtuală Java în
interiorul acestor browsere. Un browser compatibil Java permite ca o
categorie specială de aplicaţii, numite applet-uri să fie transferate de la
server-ul WWW pentru a fi „executate la client”, adică pe maşina unde
se execută browser-ul WWW. Conexiunea browser-ului cu applet-urile
se face prin intermediul etichetelor HTML, HTML (HyperText Markup
Language) fiind limbajul de „scriere” a paginilor Web.
89
Tehnologii de programare în
Internet
Curs 4
- Limbajul Java -
90
4.1 Tipuri de date în Java
byte întreg cu semn pe 8 biţi cu val. min -128 şi val. max. 127
short întreg cu semn pe 16 biţi cu val. min -32768 şi val. max.
32767
int întreg cu semn pe 32 biţi cu val. min. -2147483648 şi val.
max. 2147483647
long întreg cu semn pe 64 biţi cu val. min. -263 şi val. max.
263 -1
char întreg fără semn pe 16 biţi cu val. min. 0 şi val. max.
65535 (reprezentare caractere UNICODE nu complement faţă
de 2 ca cele anterioare)
91
float virgulă mobilă pe 32 biţi
double virgulă mobilă pe 64 biţi
boolean val. booleană , 0 – false, nonzero-
true; intern JVM reprezintă boolean ca şi int
Numele unei variabile de tip primitiv
reprezintă chiar valoarea ei.
92
4.2 Tipul clasă
class nume_clasa {
declaratii atribute;
declaratii constructori;
declaratii metode;
}
93
Declaraţia unui atribut:
[modificator] tip_atribut nume_atribut [=expresie_initializare];
Exemple:
int a;
public long b=15;
private PunctBidim p=new PunctBidim(5,5);
94
Declaraţia unei metode:
Exemplu:
public int adunare(int x, int y){return x+y;}
95
Declaraţia unui constructor:
[modificator] nume_clasa([lista_parametrii])
{
corp constructor
}
Exemplu:
class A
{
int a;
public A(){a=0;}
public A(int x){a=x;}
}
96
La fel ca metodele constructorii pot fi redefiniţi.
this(listă_parametrii);
97
Un obiect (instanţă a clasei) este o variabilă de tip clasa
respectivă. Pentru a putea folosi un obiect acesta trebuie
declarat, instanţiat şi iniţializat:
[modificator] nume_clasa nume_obiect[=expresie_initializare];
98
4.3 Variabile în Java
O variabilă reprezintă un nume ce
referenţiază o valoare, o locaţie în care este
stocat un anumit tip de dată. Tipuri de
variabile:
variabile atribut (ale unei clase),
variabile locale (declarate într-un bloc de cod
delimitat de {}),
variabile parametru de metodă (care apar în
lista parametrilor din declaraţia unei metode).
99
Domeniul de vizibilitate al variabilei (scope) este
domeniul în care variabila poate fi accesată.
100
Un acelaşi nume de variabilă poate fi utilizat
pentru a referenţia date diferite aflate în
domenii de vizibilitate diferite.
102
public void g()
{
int x=2;
System.out.println(x);
//afis. 2 refer. var. locala nu variabila atribut
}
103
Înainte de a utiliza o variabilă aceasta trebuie să
primească o valoare. JVM va da oricărei variabile
atribut neiniţializate de tip numeric valoarea 0, unei
variabile atribut de tip boolean valoarea false şi unei
variabile atribut de tip referinţă valoarea null.
Variabilele locale nu sunt iniţializate implicit de JVM.
Exemplu:
class A{
int x;
public void f(){
int y;
System.out.println(x);//afiseaza 0
System.out.println(y);//eroare la compilare}}
104
4.4 Membrii statici ai unei
clase
Utilizarea modificatorului static la
declararea unui atribut/unei metode
face ca atributul/metoda să aparţină
clasei şi nu unui obiect anume.
Astfel atributul/metoda poate fi
accesat(ă) atât prin numele clasei cât şi
prin numele unei obiect, instanţă a
clasei respective.
105
Pentru un atribut static se alocă o singură dată memorie la
“prima” iniţializare a clasei, ulterior toate obiectele de tipul
clasei respective vor partaja acelaşi membru static, aceeaşi
referinţă la aceeaşi zonă de memorie.
106
4.5 Specificatorii de acces pentru
clase, atribute, metode, constructori
107
4.6 Package Java
Un package Java este o bibliotecă de clase şi interfeţe Java.
import nume_package.*;
pentru a putea utiliza întreg package-ul sau
import nume_package.nume_clasa;
pentru a putea utiliza doar clasa respectivă.
108
Un package se poate crea doar în prima linie de cod
a programului prin instrucţiunea:
package nume_package;
109
4.7 Interfeţe Java
O interfaţă Java este o colecţie de metode abstracte
(fără corp) şi contante.
110
Declarare:
lista_constante;
}
111
4.8 Moştenirea în Java
Principiul moştenirii <- POO.
112
Prin moştenire toţi membrii clasei de bază se regăsesc în clasa
derivată care însă mai poate adăuga şi alţii.
super (lista_parametrii);
113
Consecinţă: cele două instrucţiuni (super şi this) nu
pot exista simultan.
Dacă nu se face explicit apelul super, compilatorul
adaugă un apel implicit al constructorului fără
argumente al clasei de bază.
114
O clasă derivată poate declara o metodă cu acelaşi
nume şi cu acelaşi număr şi tip al parametrilor
formali cu a unei metode din clasa de bază (tehnica
se numeşte suprascriere – overriding tehnica
redefinirii metodelor - overloading). La apelul
respectivei metode dintr-un obiect de tip clasă
derivată se va executa metoda din clasa derivată.
Accesul la metoda clasei de bază din interiorul clasei
derivate se face prin:
super.nume_metoda();
115
Exemplu:
public class A
{
String sir="ceva";
public static void main(String args[])
{
A oba=new A();
B obb=new B();
System.out.println(oba.sir); //ceva
System.out.println(obb.sir);//altceva
oba=obb;
System.out.println(oba.sir);//ceva
}
}
class B extends A
{
String sir="altceva";
}
116
4.9 Modificatorul final
Poate fi utilizat atât în declaraţia unei clase cât şi în declaraţia
unui atribut sau a unei metode.
117
4.10 Modificatorul abstract
Clasele declarate abstract sunt acele clase care nu pot fi instanţiate.
Sunt utilizate pentru a modela concepte abstracte, tipuri de date
abstracte pentru care nu se justifică crearea obiectelor de acel tip (de
exemplu, tipul FormaGeometrica).
118
Poate fi declarată o variabilă ca fiind de tipul unei clase abstracte:
FormaGeometrica f;
f=new Cerc();
119
Tehnologii de programare în
Internet
Curs 5
- Appleturi Java -
120
5.1 Programarea interfeţelor
grafice în Java
Pentru crearea unei interfeţe grafice, Java pune la
dispoziţia utilizatorului o serie de componente
grafice.
121
D.p.v. al utilizatorului, componentele grafice AWT
sunt caracterizate printr-o formă (ceea ce se vede pe
ecran) şi prin faptul că răspund la acţiuni ale mouse-
ului, ale tastaturii, etc.
126
127
O categorie aparte de componente de tip Component
sunt componentele derivate din clasa Container.
Aceste componente sunt componente grafice care
oferă structura necesară pentru combinarea
componentelor grafice, permiţând includerea altor
componente în interiorul lor.
129
130
131
Pentru dezvoltarea interfetelor grafice AWT se parcurg mai
multe etape:
132
Pentru tratarea unui eveniment se crează mai întâi o
clasă care implementează interfaţa care contine
functia de tratare a acelui eveniment si se defineste
aceasta functie.
133
De exemplu, pentru asocierea unui obiect delegat cu tratarea
evenimentului de apasare a unui buton se foloseste metoda
(clasei Button) addActionListener(); pentru asocierea unui
obiect delegat cu tratarea evenimentelor de fereastra se
foloseste metoda (clasei Window) addWindowListener() etc.
Exemplu:
134
135
136
137
138
5.2 Applet-uri Java
Un applet este un program special Java care rulează
în interiorul unui browser Web.
139
Clasa Applet este derivată din clasa Panel. Ca
urmare, toate metodele definite în clasa Panel şi mai
mult, cele definite în clasele Container şi Component
sunt disponibile în interiorul unei clase de tip Applet.
140
Alte metode importante moştenite de la clasa
Container sunt metodele de tip add prin care se pot
adăuga alte componente grafice AWT în interiorul
unui applet.
141
Metoda start() a clasei Applet este metoda apelată de
browser imediat după metoda init() şi ori de câte ori
utilizatorul revine în pagina html în care se află
applet-ul dintr-o altă pagină html.
142
În afară de editarea şi compilarea fişierului
sursă Java este necesară pntru rularea
applet-ului în browser editarea unui fişier
html, în care, prin intermediul unui marcaj
HTML să se realizeze conexiunea cu fişierul
class obţinut în urma compilării.
<APPLET CODE=”nume_applet.class”></APPLET>
143
5.3 Atribute ale marcajului
HTML APPLET
CODE pentru specificarea numelui applet-ului.
144
De exemplu:
<APPLET CODE=”Hello.class”
CODEBASE=”JavaCode/” WIDTH=300
HEIGHT=200></APPLET>
145
ARCHIVE permite utilizarea fişierelor
comprimate. Înainte de execuţia applet-ului,
JVM (pornită de browser) aduce fişierul class
specificat în atributul CODE. Dacă în execuţia
acestuia este nevoie de alte clase (fişiere
class) disponibile la server acestea sunt aduse
pe rând în momentul în care devin necesare.
În cazul în care se lucrează în reţea iar
capacitatea de transfer a reţelei este mică şi
execuţia applet-ului necesită o multitudine de
clase pot să apară întreruperi în execuţia
applet-ului în anumite momente pentru
aducerea claselor de care este nevoie.
146
Pentru a evita acest lucru se poate utiliza un singur
fişier comprimat care să conţină toate clasele
necesare. În acest caz, înainte de pornirea applet-
ului, JVM aduce fişierul comprimat şi apoi trece la
execuţia programului. Odată programul pornit toate
clasele sunt disponibile pe maşina clientului fără a
mai fi nevoie să se aştepte transferul lor. Pentru a
arhiva clasele utilizate se foloseşte utilitarul jar. În
cazul mai multor fişiere utilizate de applet (clase,
fişiere imagine, etc.) acestea se includ în fişierul
arhivă astfel:
147
ALT este atributul prin care se poate specifica un text
pe care browser-ul îl va afişa în locul applet-ului în
cazul în care nu este compatibil Java dar tag-ul
APPLET îi este cunoscut. Există şi posibilitatea afişării
unui text dacă browser-ul nu recunoaşte tag-ul
APPLET, textul cuprins între <APPLET> şi
</APPLET>:
<APPLET CODE=”Hello.class”
WIDTH=300 HEIGHT=200>
149
PARAM este unul din câmpurile cele mai utilizate
pentru că oferă posibilitatea configurării anumitor
variabile ale applet-ului. Astfel nu mai este nevoie să
fie modificat fişierul sursă, să fie recompilat ş.a.m.d.
150
public String[][] getParameterInfo()
{
String pinfo[][]={{“DISPLAYED_STRING”,
return pinfo;
151
Pe lângă informaţiile legate de parametrii se pot
returna informaţii generale legate de applet
suprascriind metoda getAppletInfo(), de exemplu:
}
Aceste metode de informare a utilizatorului unui
applet sunt apelate de browser la anumite comenzi
ale utilizatorului browser-ului. Aceste comenzi diferă
de la browser la browser. Cele două metode
prezentate mai sus pot fi utilizate de browser-e
pentru a face o introspecţie a applet-urilor.
152
O altă categorie de metode sunt cele utilizate
în interiorul applet-ului pentru a obţine
anumite informaţii de la browser:
154
import java.applet.*;
import java.awt.*;
String sir=getParameter(“DISPLAYED_STRING”);
155
Se observă că funcţia utilizată pentru obţinerea unui
parametru setat în fişierul html este funcţia clasei
Applet, public String getParameter(String name);
.Metoda este publică deci poate fi apelată din
exteriorul clasei. Metoda are ca parametru o variabilă
de tip String (parametrul formal name) ce reprezintă
numele parametrului NAME din tag-ul APPLET, a
cărei valoare se doreşte a fi citită. Funcţia returnează
un şir String reprezentând valoarea parametrului
(VALUE). Se observă că valoarea setată prin VALUE
în fişierul html este un şir de caractere. Fişierul html
corespunzător applet-ului conţine:
156
Pentru a transmite anumite mesaje browser-ului din
interiorul unui applet se pot folosi metodele definite
în interfaţa AppletContext. Un obiect de tipul
AppletContext se poate obţine prin metoda clasei
Applet, getAppletContext().
157
public void showDocument(URL url, String target)
158
public void showStatus(String status)
159
public Enumeration getApplets()
160
5.4 Probleme de securitate ale
applet-urilor
Fiecare browser implementează o serie de politici de securitate în ceea ce
priveşte execuţia applet-urilor în cadrul browser-ului pentru a împiedica
compromiterea sistemului. Aceste politici pot să difere de la un browser la altul.
Curs 6
- JavaScript -
162
În zilele de început ale World Wide Web-ului, HTML
era destul de simplu, iar marea majoritate a
informaţiilor necesare pentru a asambla o pagină
Web erau uşor de învăţat. Odată cu creşterea Web-
ului, au crescut şi aspiraţiile creatorilor de pagini
Web, iar cerinţele lor în sensul unui control mai mare
asupra aspectului paginii au forţat limbajul HTML să
se modifice şi să devină din ce în ce mai complex.
163
În ciuda numelor asemănătoare, limbajele JavaScript
şi Java nu au aproape nimic în comun unul cu
celălalt. Java este un limbaj de programare dezvoltat
şi comercializat de compania Sun Microsystems (azi,
de Oracle).
164
Când Netscape a adăugat browser-ului său
Web, Navigator, câteva capacităţi de scriptare
rudimentare, specialiştii au numit acest limbaj
de scriptare LiveScript.
165
Când Microsoft a văzut că limbajul JavaScript
devenea popular între dezvoltatorii Web, şi-a
dat seama că trebuie să introducă facilităţi de
scriptare şi în propriul browser, Internet
Explorer.
166
Se fac referinţe la JavaScript ca fiind „limbaj de
scriptare”, cu implicaţia că un script este mult mai
simplu de scris decât un program.
167
JavaScript permite crearea unei interfeţe activă cu
utilizatorul, un exemplu fiind cel al site-urilor cu
butoane care se modifică la trecerea cursorului
mouse-ului pe deasupra lor (acest efect implică
folosirea unei tehnici numită rollover).
168
Deoarece limbajul JavaScript are un set de funcţii de
lucru cu ora şi cu data, se pot genera ceasuri,
calendare şi documente cu timpul înscris.
169
6.1 Restricţii ale limbajului
JavaScript
JavaScript este un limbaj de tipul client-side, ceea ce
înseamnă că rulează pe calculatorul utilizatorului, nu
pe server. Din această cauză, limbajului JavaScript i-
au fost impuse o serie de limitări, majoritatea din
raţiuni de securitate.
JavaScript nu permite citirea sau scrierea de fişiere
pe calculatorul utilizatorului (astfel un vizitator al
paginii nu poate citi fişiere aflate pe mediile de
stocare din calculatorul gazdă, nu poate scrie viruşi
pe disc). Unica excepţie o constituie permisiunea
acordată limbajului JavaScript de a scrie în directorul
de cookie-uri al browser-ului, dar şi aici îi sunt
impuse o serie de limite.
170
JavaScript nu permite citirea sau scrierea de fişiere pe server.
Acest lucru ar putea fi util, de exemplu pentru stocarea
numărului de vizitatori sau scrierea datelor culese dintr-un
formular, dar limbajului JavaScript nu îi sunt permise aceste
acţiuni. Alternativa este existenţa unui program pe server care
să manevreze şi să stocheze aceste date. Un asemenea
program poate fi, de exemplu, un CGI, scris într-un limbaj
precum Perl sau PHP, sau un program Java.
171
6.2 JavaScript – limbaj
orientat pe obiecte
JavaScript este un limbaj orientat pe obiecte. Cele
mai răspândite obiecte folosite de JavaSript sunt
documentele, formularele, câmpurile, butoanele
radio. De asemenea, o fereastră este un obiect folosit
de un program JavaScript.
172
Fiecare obiect trebuie identificat în mod unic printr-
un nume sau identificator (formularele de exemplu,
ar putea fi numite form1 şi form2).
173
O metodă este un proces efectuat de către un obiect
atunci când acesta primeşte un mesaj (de exemplu,
un buton Submit de pe un formular este un obiect;
eticheta Submit şi dimensiunile obiectului sunt
proprietăţile obiectului buton; dacă se execută clic pe
butonul Submit, formularul este trimis către aplicaţia
server).
document.write(‘Hello, World!’)
174
Alt concept fundamental este tratarea evenimentelor.
175
Secţiunea
<script language=”Javascript”
type=”text/javascript”> alert (‘Hello, World!’)
</script>
177
un număr este o valoare numerică, poate fi folosită în
calcule.
178
valoarea obiect
var nume_variabila
179
var este unul din cele 25 de cuvinte cheie folosite de
JavaScript:
180
Un nume de variabilă nu poate fi un cuvânt cheie sau
un cuvânt rezervat în JavaScript. Un cuvânt rezervat
în JavaScript are un înţeles special pentru browser,
cu toate că nu este neapărat o comandă (aşa cum
este un cuvânt cheie al limbajului JavaScript):
181
De obicei, valoarea unei variabile se schimbă în
timpul rulării programului JavaScript, iar valoarea
iniţială este înlocuită de altă valoare. Un exemplu:
var price = 0
price = prompt(‘enter the price’, ‘ ’)
183
JavaScript permite deasemenea folosirea tablourilor.
Declararea unui tablou:
Iniţializarea tabloului:
products[0]=’water’
products[1]=’soda’
products[2]=’beer’
sau:
184
Numărul elementelor din tablou poate fi
determinat utilizând proprietatea length a
obiectului tablou
for(var i=0;i<products.length;i++)
{
document.write(products[i]+’<br>’)
}
185
Un tablou poate fi sortat apelând metoda sort() a
obiectului tablou:
products.sort()
186
Definirea unei funcţii:
function nume_functie(nume_arg1,
nume_arg2,…nume_argn)
{
bloc_instructiuni
[return valoare]
}
187
O funcţie se apelează ori de câte ori se doreşte ca
browserul să execute instrucţiuni conţinute în blocul
de program al funcţiei. Apelul de funcţie este plasat
în eticheta <body>.
<body onload=’WelcomeMessage()’>
188
6.4Formulare şi tratarea
evenimentelor în
JavaScript
Formularele, fie ele formulare de comandă, de
abonare, de înscriere, financiar, de sondaj, etc.,
reprezintă un mod practic de a strânge informaţiile
necesare desfăşurării afacerilor pe Internet.
189
Aşa cum a fost prezentat la cursul referitor la HTML,
un formular este o secţiune de document HTML care
conţine elemente cum ar fi butoane radio, casete de
text, casete de validare şi liste de opţiuni.
190
Programul care prelucrează formularul se numeşte
program CGI (Common Gateway Interface).
191
Reamintim că fiecare element are unul sau mai multe
atribute, acestea fiind informaţii asociate cu
elementul.
192
Două moduri frecvente de validare a datelor dintr-un
formular sunt prin intermediul utilizării programelor
CGI, respectiv al aplicaţiilor JavaScript.
193
De exemplu, un program JavaScript poate activa sau
dezactiva elemente pe baza unei valori introduse de
utilizator într-un alt element.
194
onclick - executat la un clic deasupra unui element
ondblclick - executat la un dublu clic deasupra unui
element
onmousedown - executat când butonul mouse-ului
este apăsat în timp ce indicatorul mouse-ului se află
deasupra unui element
onmouseup - executat când butonul mouse-ului este
eliberat în timp ce indicatorul mouse-ului se află
deasupra unui element
onmouseover - executat când indicatorul mouse-ului
se deplasează ajungând deasupra unui element
onmousemove - executat când indicatorul mouse-ului
este deplasat doar deasupra unui element
onmouseout - executat când indicatorul mouse-ului
este deplasat în afara unui element
195
onfocus - executat când un element este în atenţie
(selectat)
onblur - executat când un element iese din atenţie
onkeypress - executat la apăsarea şi eliberarea unei
taste
onkeydown - executat când o tastă este apăsată
onkeyup - executat la eliberarea unei taste
onsubmit - executat când este înaintat un formular
onreset - executat când un formular este reiniţializat
onselect - executat când într-un câmp de text este
selectat text
onchange - executat când un element iese din
atenţie şi valoarea elementului s-a modificat de la
intrarea în atenţie
196
Un eveniment este asociat cu un element al unui
formular, ca atribut definit în cadrul etichetei de
deschidere a elementului. Se asociază acestui atribut
numele funcţiei JavaScript ce se doreşte a fi
executată când are loc evenimentul.
Pentru exemplificare, se consideră un formular
cu elemente de introducere a datelor, în care
utilizatorul tastează numele şi prenumele său şi
adresa de e-mail. Fişierul include un program
JavaScript care validează adresa de e-mail, verificând
dacă aceasta include semnul @ când utilizatorul mută
cursorul în afara elementului de introducere a
datelor. Acest lucru se realizează utilizând atributul
de eveniment onblur din eticheta de deschidere a
elementului <INPUT> şi asociind numele funcţiei
JavaScript cu atributul de eveniment onblur.
Evenimentul onblur are loc când cursorul iese în
afara elementului, fapt numit out of focus (ieşirea în
afara atenţiei).
197
<html>
<head>
<title>onblur event</title>
<script language=”Javascript” type=”text/javascript”>
function ValidateEmail(EmailAddress)
{
var Location= EmailAddress.indexOf(‘@’)
if (Location==-1)
{
alert(‘You entered an inaccurate
email address.’)
}
}
</script>
</head>
198
<body>
<FORM action=”http://www.jimkeogh.com” method=”post”>
<P>
First Name: <INPUT type=”text” name=”Fname”/><BR>
Last Name: <INPUT type=”text” name=”Lname”/><BR>
Email: <INPUT type=”text” name=”Email”
onblur=”ValidateEmail(this.value)”/><BR>
199
Funcţiei ValidateEmail() i se transferă un parametru, care este
valoarea elementului Email de introducere a datelor.
200
Când un utilizator priveşte un formular din cadrul
unei pagini Web, probabil nu se gândeşte la modul în
care se leagă formularul de tot ceea ce vede în rest.
201
Un document poate avea unul sau mai multe
formulare, iar un formular poate avea unul sau mai
multe elemente.
Obiectele de formular sunt stocate într-un tablou
numit forms şi apare în ordinea în care formularele
apar în document.
window.document.forms[2]
203
Protejarea programului JavaScript nu constituie
principalul motiv pentru stocarea fragmentelor
JavaScript într-un fişier extern.
204
Comunicarea către browser a faptului că programul
JavaScript se află într-un fişier extern de la server-ul
Web şi nu este încorporat în pagina Web se
realizează atribuind numele fişierului ce conţine
fragmentele JavaScript atributului src al marcajului
<script>:
205
În afară de lucrul cu formulare, JavaScript lucrează
cu cadre, cu imagini, cu ferestrele browser-ului.
206
Tehnologii de programare în
Internet
Curs 7
- Servlet-uri şi JavaServer Pages -
207
7.1 Servlet-uri generice
Servlet-urile sunt soluţia oferită de Java pentru
interfaţa CGI.
208
Servlet API este o specificaţie dezvoltată de Sun
Microsystems (şi alţii) care defineşte clasele şi
interfeţele utilizate pentru crearea şi execuţia servlet-
urilor în package-urile javax.servlet şi
javax.servlet.http.
209
Un container de servlet-uri este un modul al server-
ului Web sau al server-ului de aplicaţii care oferă
serviciile pentru comunicarea dintre navigator şi
servlet.
210
Pentru a creea un servlet trebuie implementată
interfaţa Servlet sau extinsă una din clasele
GenericServlet sau HttpServlet. Metodele utilizate
sunt: init(), service() şi destroy().
212
Metodele init() şi destroy() se apelează o singură
dată la crearea servlet-ului şi, respectiv, la
distrugerea acestuia. Metoda service() se apelează de
fiecare dată când apare o cerere.
213
import java.io.IOException;
import java.io.Writer;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class VariabileMediu extends GenericServlets{
public void service(ServletRequest cerere,
ServletResponse raspuns)
throws ServletException, IOException{
214
//se transmit informatiile catre client
iesire.write(“\nAdresa locala:
”+cerere.getLocalAddr());
iesire.write(“\nPortul local: ”+cerere.getLocalPort());
iesire.write(“\nProtocolul: ”+cerere.getProtocol());
iesire.write(“\nAdresa clientului: ” +
cerere.getRemoteAddr());
iesire.write(“\nHost-ul clientului: ” +
cerere.getRemoteHost());
iesire.write(“\nPortul clientului: ” +
cerere.getRemotePort());
iesire.write(“\nNumele server-ului: ” +
cerere.getServerName());
iesire.write(“\nPortul server-ului: ” +
cerere.getServerPort());
}
}
215
În navigatorul Web, rezultatul ar putea avea forma:
216
Calculatorul client nu are stabilit un nume şi este identificat doar
prin adresa IP. Pentru a rula exemplul trebuie ca în fişierul
web.xml al aplicaţiei să se găsească următoarele linii:
<servlet>
<servlet-name>VariabileMediu</servlet-name>
<servlet-class>VariabileMediu</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>VariabileMediu</servlet-name>
<url-pattern>/servlet/VariabileMediu</url-pattern>
</servlet-mapping>
217
7.2 Servlet-uri HTTP
Atunci când se doreşte crearea unui servlet pentru
protocolul HTTP, este recomandată extinderea clasei
HttpServlet. Aceasta extinde la rândul ei clasa
GenericServlet. În cazul utilizării clasei
HttpServlet nu se va suprascrie metoda service(),
ci numai metodele corespunzătoare tipului de cerere
HTTP: doGet() pentru GET, doPost() pentru POST
etc. Pentru cerere şi răspuns se folosesc interfeţele
HttpServletRequest şi, respectiv,
HttpServletResponse (vezi exemplul din platforma
de laborator).
218
Pentru redirectare se va utiliza metoda
sendRedirect() din clasa HttpServletResponse,
iar ca parametru se va da URL-ul către pagina la care
se realizează trimiterea.
De exemplu:
raspuns.sendRedirect(“http://info.tech.pub.ro/eroare.ht
ml”);
219
Când sunt necesare informaţii din alte pagini, pe care
utilizatorul le-a vizitat deja se utilizează sesiunile.
De exemplu:
http://www.info.uaic.ro/mag/servlet/Mag;jsessionid=97
117
220
Pentru ca un servlet să acceseze informaţiile
referitoare la sesiunea curentă va trebui să facă un
apel la metoda getSession() din interfaţa
HttpServletRequest. Aceasta returnează intefaţa
HttpSession, care permite ataşarea de obiecte
pentru sesiunea curentă. Stabilirea unor informaţii se
face astfel:
Obiect obiect=(Obiect)sesiune.getAttribute(“eticheta”);
224
Dacă servlet-urile sunt clase care generează
documentele Web, JSP-urile sunt documente Web
care conţin secvenţe de cod Java.
226
Pentru inserarea de elemente JSP se pot utiliza
marcatori XML (utilizând spaţiul de nume
http://java.sun.com/JSP/Page, având de regulă
prefixul jsp) sau specifici JSP. În practică se folosesc
mai mult cei specifici JSP, datorită uşurinţei în
utilizare. Formatul XML oferă avantajul de a putea
valida şi procesa pagina JSP cu un procesor XML
obişnuit.
227
<?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0
Strict//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-
strict.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<title>Test pentru JSP</title>
</head>
<body>
<h1>Test JSP</h1>
<%! String s=”JSP-urile functioneaza.”; %>
<p><%=s %></p>
</body>
</html>
228
Documentul anterior este unul XHTML (Extensible
Hypertext Markup Language – extensie a limbajului
HTML pentru obţinerea compatibilităţii cu XML,
specificaţie standardizată de Consorţiul Web) care
conţine elemente JSP. XHTML păstrează tag-urile
HTML. Documentele XHTML pot fi încadrate în unul
dintre tipurile MIME “text/html” sau “text/xml”.
Obligatoriu, paginile XHTML vor avea toate tag-urile
şi atributele scrise cu litere mici, deoarece XML este
case-sensitive. O altă restricţie este aceea că toate
tag-urile de sfârşit sunt obligatorii. De asemenea,
valorile atributelor trebuie încadrate între ghilimele.
comentariile trebuie încadrate între simbolurile <!-- şi
-->, iar spaţiile albe nu sunt semnificative.
230
Fişierele de genul celor din primul exemplu se
numesc pagini JSP, conţin elemente specifice JSP, iar
paginile JSP care sunt totodată şi documente XML se
numesc documente JSP. Pentru documentele JSP se
mai foloseşte şi extensia jspx.
231
Directivele sunt mesaje către containerul JSP şi nu
generează output (informaţii pentru răspuns).
Sintaxa pentru directive este următoarea:
sau
<jsp:directive.directiva … />
232
Atributele cele mai utilizate ale directivei page sunt:
import – specifică lista pachetelor şi claselor care
vor fi incluse pentru pagina curentă; separatorul
utilizat este virgula, iar pachetele implicite sunt
java.lang.*, javax.servlet.*, javax.servlet.jsp.*
şi javax.servlet.http.*.
session – indică dacă se utilizează sesiuni (HTTP).
Valoarea implicită este true.
buffer – stabileşte dimensiunea buffer-ului pentru
ieşire, exprimată în kiloocteţi. Valoarea implicită este
de cel puţin 8, iar sufixul kb este obligatoriu. În cazul
în care nu se doreşte utilizarea unui buffer, se va
folosi none. Buffer-ele sunt utilizate pentru creşterea
performanţelor operaţiunilor cu dispozitivele
periferice în general. În cazul paginilor JSP, este
recomandat lucrul fără buffer sau golirea frecventă a
acestuia atunci când aplicaţia client necesită
recepţionarea imediată a datelor generate.
233
autoFlash – indică dacă buffer-ul se goleşte
automat. Valoarea implicită este true.
info – stabileşte o descriere a paginii curente.
Aceasta se poate obţine din clasa transformată în
urma apelului metodei Servlet.getServletInfo().
isErrorPage – stabileşte dacă pagina curentă este
utilizată pentru raportarea erorilor. Doar în caz
afirmativ va fi disponibilă variabila exception, care va
furniza informaţii referitoare la eroarea apărută.
Valoarea implicită este false.
errorPage – indică URL-ul paginii pentru tratarea
excepţiilor neprinse.
contentType – stabileşte tipul MIME pentru
documentul generat de către JSP. Tipul implicit este
text/html.
pageEncoding – stabileşte setul de caractere utilizat
pentru scrierea paginii JSP. În cazul în care setul
specificat nu este disponibil, se va utiliza ISO-8859-1.
234
Exemple:
<%@page import=”ro.infoiasi.mag.admin.MagSursaDate” %>
<%@page info=”Pagina de administrare a sit-ului”
errorPage=”eroare.jsp” %>
<%@include file=”footer.html”>
235
Directiva taglib permite includerea unei
biblioteci de tag-uri definite de programator.
Se specifică URI-ul corespunzător bibliotecii
de tag-uri (atributul uri) şi prefixul utilizat în
pagina Web (atributul prefix). De exemplu:
<%@taglib uri=”http://www.infoiasi.ro/mag”
prefix=”mag” %>
236
Marcatorii pentru declaraţii permit specificarea de
atribute şi metode pentru clasa servlet-ului generat.
Sintaxa este următoarea:
<jsp:declaration>declaratii </jsp:declaration>
Exemple de declaraţii:
237
Expresiile JSP permit inserarea în fluxul de ieşire a
unei valori rezultate în urma evaluării unei expresii
Java. Sintaxa este:
<%=expresieJava %>
<jsp:expression>expresieJava</jsp:expression>
<%=(new java.util.Date()).toLocalString()%>
238
Pentru utilizarea de cod Java se vor folosi scriplet-uri,
care au următoarea sintaxă:
<%
String categorie=request.getParameter(“categorie”);
categorii=baza_date.obtineCategorii();
%>
239
Iniţializarea şi terminarea unui JSP se fac prin
intermediul metodelor: jspInit() – utilizată pentru
iniţializarea datelor şi jspDestroy() – folosită pentru
eliberarea resurselor.
241
Clasa JspWriter este abstractă şi derivată din java.io.Writer
şi conţine în plus metodele:
print() şi println(), pentru afişarea tipurilor primitive, a
şirurilor de caractere şi a obiectelor;
newLine() introduce caracterul pentru trecere la linie nouă;
clear() şi clearBuffer(), pentru ştergerea informaţiilor din
buffer;
flush() goleşte buffer-ul trimiţând datele la client;
isAutoFlush() indică dacă buffer-ul este golit automat;
getRemaining() returnează numărul de octeţi din buffer care
aşteaptă să fie trimişi;
getBufferSize() returnează dimensiunea buffer-ului exprimată
în octeţi;
close() închide fluxul;
242
7.5 Acţiuni şi componente
JavaBeans
Java, prin intermediul componentelor
JavaBeans, oferă posibilitatea utilizării
acestora de către instrumente de editare a
aplicaţiilor fără ca programatorul să intervină
direct în codul acestora.
244
Acţiunile sunt tag-uri JSP predefinite care folosesc varianta XML.
Cele care au echivalent în formatul specific JSP au fost
prezentate anterior (cele care încep cu <% şi se termină cu
%>). Pentru a utiliza o componentă JavaBeans în aplicaţiile
Web se va utiliza acţiunea jsp:useBean. Aceasta posedă
atributele din tabelul de mai jos:
245
În cazul în care o componentă cu acelaşi identificator există
deja în domeniul de vizibilitate specificat, se va utiliza respectiva
componentă şi nu se va mai crea una nouă. Nu se vor utiliza
niciodată simultan atributele class şi beanName, acestea
excluzându-se unul pe celălalt.
Declararea componentei:
246
247
Se va utiliza la un moment dat doar unul dintre
atributele param şi value. Atunci când se utilizează
atributul param, valoarea parametrului poate fi
preluată din câmpurile formularelor sau setată de
către alte pagini JSP sau servlet-uri care includ sau
redirectează către pagina JSP curentă.
<jsp:getProperty name=”categ”
property=”denumire” />
249
Componentele JavaBeans pot fi accesate şi în
expresiile cuprinse între ${ şi }. Acestea vor
fi evaluate în momentul execuţiei şi se vor
înlocui cu valorile rezultate.
<h3>${categ.denumire}</h3>
<p style=”color: ${optiuni.culoare}”>Bine ai
venit ${param.utilizator}!<p>
250