Sunteți pe pagina 1din 77

Avizat manager de proiect

UNIVERSITATEA DIN PETROȘANI

PROGRAMARE WEB
Anexa 2
CURS

Întocmit expert elaborare material didactic Ciolea Daniela 1


Avizat manager de proiect

CUPRINS

INTRODUCERE

CAPITOLUL 1
PROGRAMARE WEB LA NIVEL DE CLIENT. TEHNOLOGII JAVA PENTRU
APLICATII WEB
1.1. Concepte și tehnici de bază
1.2. Tehnologii de dezvoltare și implementare
1.3. Dezvoltarea de aplicatii Web. Web Frameworks. Java Enterprise Edition (Java EE)
1.4. Tehnologii Web pe platforma JEE. Evolutia platformei JEE. Alternative la platforma JEE

CAPITOLUL 2
PROGRAMARE WEB LA NIVEL DE SERVER
2.1. Programarea Web la nivel de server
2.2. Programarea web în limbajul PHP
2.3. Elemente de sintaxă ale limbajului PHP
2.4. Spring Framework

CAPITOLUL 3
TEHNICII, TRANZACȚII ȘI SECURITATE WEB. APLICAȚII PENTRU
PROGRAMAREA WEB
3.1. Securitatea aplicatiilor web
3.2. Tehnologii WEB. Tehnologia Java Servlet
3.3. Compilarea şi instalarea unui servlet
3.4. Elementele unei pagini JSP. Expresii JSP. Scripturi JSP. Declaraţii JSP. Directive JSP.
Exemplu pagina JSP

BIBLIOGRAFIE

Întocmit expert elaborare material didactic Ciolea Daniela 2


Avizat manager de proiect

INTRODUCERE

În ultimii ani, dezvoltarea rapidă a Internetului a dus la apariţia unui număr din ce în ce
mai mare de noi servicii online. De la serviciile de bază, care au stat la dispoziţia utilizatorilor
(Mail şi Web), Internetul a crescut într-o imensă reţea globală, cu o varietate de servicii noi,
soluţii tehnologice şi spaţiul în care se întâlnesc aproape toate entităţile economice din întreaga
lume.
În acest sens, Internetul oferă posibilităţi care, în afacerile din zilele noastre nu se pot
compara cu nicio altă afacere anterioară. Spaţiul şi oportunităţile de afaceri sunt aceleaşi pentru
toţi oamenii de afaceri în orice parte a lumii s-ar afla. Nu există nici un fel de piedici, în lumea
Internetului toţi oamenii sunt egali.
Acesta este motivul pentru care aproape în fiecare zi apar noi produse de Internet, noi
soluţii software, aparatură şi tehnologie web, locuri online pentru vânzare-cumpărare, locuri în
care oamenii văd o şansă de realizare. Dezvoltarea rapidă a Internetului va conduce inevitabil la
căutarea de noi competenţe şi la apariţia unor noi locuri de muncă.
În sec. XXI, din ce în ce mai multe companii folosesc e-business-ul, deschid domenii
corporative, fac prezentări web, îsi promovează produsele pe Internet, lansează vânzări online,
creând astfel premisele pentru afaceri de succes.
Pe partea tehnică, rolul principal îl vor avea programatorii web şi dezvoltatorii. Sarcina
lor este să construiască site-uri web, să le conecteze la o bază de date potrivită, să permită
automatizarea de publicare a conţinutului, să creeze Content Management Server, să scrie
servere Web, să realizeze o bună comunicare pe Internet, să creeze aplicaţii web cu scopuri
diferite, să realizeze condiţii tehnice pentru vânzare şi promoţii online, să facă scripturi web
ş.a.m.d.
Viitorii programatori web vor stăpâni un spectru larg de cunostinţe şi limbaje de
programare:
ü Visual Studio.NET
ü C#
ü ADO.NET
ü ASP.NET 2.0
ü SQL
ü Java
ü PHP
ü WPF
Întocmit expert elaborare material didactic Ciolea Daniela 3
Avizat manager de proiect

Cunoaşterea aprofundată a acestor programe şi stăpânirea instrumentelor lor vă vor situa


în rândul programatorilor web de vârf şi programatorilor în general. La finalul cursurilor pe care
noi le propunem, va veti castiga statul de programator, venind chiar și din pozitia unui începător
în acest domeniu. Spre exemplu cursul de programare php va va introduce intr-un mediu de
programare extrem de simplu, dar cu instrumente foarte puternice, absolut necesare unui expert
în programare.
Există un număr din ce în ce mai mare de clienţi care folosesc unele dintre conexiunile
broadband la Internet (prin cablu, xDSL, prin satelit, etc) prin care se elimină lipsurile
conexiunilor prin modem permiţând un acces mai bun la web inclusiv de la domiciliu, spre
deosebire de trecut, când conexiunea de acasă se folosea doar pentru Mail si Web.
Ultimele tendinţe arată că s-a trecut complet la Web bazat pe soluţii software. Aplicaţile
de desktop vor fi păstrate în domeniile în care este nevoie, în timp ce în toate celelalte cazuri se
va căuta să se mute în mediul web. Imaginaţi-vă că pentru toate acestea aveţi nevoie doar de un
browser şi de o conexiune bună la Internet.
Citirea la distanţă a consumului de energie şi gaz, gestionarea operaţiunilor de la distanţă
prin Internet, muncă la distanţă de acasă, sunt doar câteva exemple de noi tehnologii care vor
apărea într-un viitor apropiat. Fiecare dintre aceste tehnologii va necesita un personal extrem de
profesionist şi competent pentru punerea în aplicare şi întreţinerea acestora, gata să îndeplinească
toate cerinţele de afaceri moderne.
Cum se realizează o pagină web?
Pe cât de complicat sună pe atât de ușor poate fi definită pagina web și în același timp
înțeleasă de marea majoritate a persoanelor interesate. Ei, bine cea mai complexă pagina web
este cea care are extensia Html și ca să fiu mai bine înțeleasă acest cuvânt provine din limba
engleză și înseamnă Hyper Text Makup Language. Paginile HTML sunt formate din etichete sau
tag-uri și au extensia .html sau .htm. In marea lor majoritate aceste etichete sunt pereche, una de
deschidere <eticheta> și alta de închidere </eticheta>.
Aceste tipuri de pagini se pot crea cu ajutorul programelor specializate, cum ar fi:
(Macromedia Dreamwaver, etc.) dar și cu ajutorul oricărui editor de text (Microsoft Word,
Notepad, Wordpad….etc).
Ca să putem întelege mai bine acest “proces” de realizare a paginilor web este necesar să
știm că pagina este structurată în 3 mari capitole, mai exact:
1. Inceputul paginii ce cuprinde tag-urile de inceput, cum ar fi: <html> , <title> , <b>
2. Conținutul poate fi format din imagini și text

Întocmit expert elaborare material didactic Ciolea Daniela 4


Avizat manager de proiect

3. Partea finală formată la rândul ei din tag-uri dar de încheiere, cum ar


fi: </html>, </title>, </b>.
Mai concret toata pagina web este formata din tag-uri.
Spre exemplu o pagină simplă web ar arată cam așa:
<html>
<head>
<title>Titlu</title>
</head>
<body>
Conținut pagină:
</body>
</html>
Explicație taguri folosite:
<html></html> Cu acest tag se începe şi se încheie orice document HTML.
<head></head> Acest tag se află în partea superioară a paginii web.
<title>Titlu</title> Acest tag se află în partea superioară a paginii web.
<body></body> Fundalul paginii web.
Atentie! Fundalul poate fi o imagine și pentru aceasta folosim tagul urmator: <body
backround=””> </body>, dar și o culoare și atunci folosim astfel: <body bgcolor=””> </body>

Alte taguri utilizate în realizarea unei pagini web:


<hr> Spațiu
<b> Face textul îngroșat
<i> Face textul înclinat.
<u> Face textul subliniat.
<h1> Face textul foarte mare.
<h6> Face textul foarte mic.
<br> Funcţionează precum enter-ul, se trece pe
rândul următor.
&nbsp; Funcţionează precum space-ul, lasă spaţiu
la început de rând. Pentru a forma un
paragraf folosiţi acest tag de mai multe ori,
consecutiv.

Întocmit expert elaborare material didactic Ciolea Daniela 5


Avizat manager de proiect

<center> </center> Cu ajutorul acestui tag se centrează textul


sau imaginea.

<font face=”fontul scrisului” Aceste tag-uri setează fontul, marimea şi


size=”mărimea textului” color=”culoarea culoarea scrisului.
textului, obligatoriu, denumirea culorii
trebuie scrisă în limba engleză”> Scris
</font>
<img src=”adresa unde se afla poza” Afişează o poză. Width dă valoarea lăţimii
width=”valoare” height=”valoare” imaginii, height dă valoarea înălţimii.
border=”valoare”> Border dă mărimea chenarului în care se
află imaginea. Dacă dăm valoarea 0,
imaginea nu va avea chenar.
<a href=”adresa unde se afla o a doua Legătura între două pagini web.
pagina web”> Numele adresei </a>

Cele Mai Bune Programe Pentru Creare Site Web Gratuit

1. WebWave
WebWave este fără îndoială cel mai eficient și mai ușor de utilizat! Iată care sunt
principalele avantaje oferite de acest program:
ü poți crea un site web gratuit în mai puțin de 5 minute
ü este extrem de ușor de utilizat, fiind accesibil oricărei persoane
ü oferă site-ului tău un design premium la costuri zero
ü oferă posibilitatea trecerii la Planul Premium la un cost redus
ü permite înregistrarea unui domeniu propriu în planul premium
Am punctat principalele 5 avantaje oferite de WebWave. Pentru că mai sunt o mulțime de
alte facilități, pe care vreau să le descoperi singur, te invit să accesezi pagina programului
accesând acest link.
Dacă vrei să vizualizezi care sunt pașii necesari creării unui site web gratuit cu
WebWave, citește tutorialul din https://www.cumfaciunsite.com/.

Întocmit expert elaborare material didactic Ciolea Daniela 6


Avizat manager de proiect

2. WebNode
Spre deosebire de WebWave, programul WebNode prezintă avantajul că este puțin mai
”sofisticat” în ceea ce privește gradul de personalizare pe care îl poate avea noul tău site.
Cu toate acestea, trebuie să știi că WebNode este în același timp un program mai dificil,
fiind mai greu de utilizat de către începători. Totodată, creând un site web cu acest program, vei
avea nevoie de mult mai mult timp față de cât îți va lua folosind programul WebWave.
Află mai multe detalii despre WebNode accesând acest link.
3. SimpleSite
Spre deosebire de WebNode și WebWave, programul pentru realizarea de site-uri web
gratuite SimpleSite se remarcă prin panoul de editare foarte avansat, ceea ce îți oferă
posibilitatea de a crea un site gratuit pe care îl poți personaliza până în cele mai mici detalii.
Cu toate acestea, având în vedere dificultatea de utilizare și prețul foarte ridicat pentru
accesarea unui pachet premium, nu îți recomand acest program decât dacă ești experimentat în
crearea de site-uri web și dispui de un buget mai mare pentru a face upgrade.
Site-ul oficial al acestui program este disponibil la adresa https://www.simplesite.com.
Care este cel mai bun program pentru crearea de site-uri web
Vrei să faci un site web gratuit, însă nu cunoști programare? Din fericire, nu vei avea
nevoie de cunoștințe de programare! Tot ce trebuie să știi este să utilizezi un program pentru
creat site-uri web.
În primul rând, nu îți recomand să întrebi cum se face un site pe cineva care cunoaște
programare. Răspunsul primit va fi întotdeauna: WordPress. Eu însă nu îți recomand această
soluție. De ce? Este pur și simplu greu de utilizat pentru începători. Deși cu WordPress poți să
faci un site foarte repede cu ajutorul unui șablon, simplitatea se termină când vine vorba de
editarea site-ului în sine.
Principalul punct slab al WordPress-ului este reprezentat de dificultatea cu care editezi
site-ul. Să presupunem că dorești să miști un logo cu câțiva pixeli – aici încep problemele. În
WordPress, nu poți face acest lucru fără cunoștințe de programare. Din această cauză, voi
renunța la opțiunea de a-ți recomanda platforma WordPress din start și mă voi concentra asupra
opțiunilor gratuite care nu necesită cunoștințe de programare.
Cea mai eficientă modalitate de a crea un site web este cu ajutorul unui program. Există
câteva opțiuni disponibile, eu însă îți recomand cu toată încrederea să optezi pentru WebWave.
De ce este WebWave cel mai bun program? În primul rând, este cel mai simplu de
utilizat, oferă posibilitatea de a crea un site web gratuit și îți pune la dispoziție mai mult de 20 de
șabloane gratuite, optimizate pentru dispozitivele mobile.
Întocmit expert elaborare material didactic Ciolea Daniela 7
Avizat manager de proiect

De asemenea, acest program se remarcă prin aceea că asigură o asistență tehnică foarte
bună, în limba română, accesibilă atât pe chat cât și pe e-mail.
Cum funcționează programul WebWave?
Foarte simplu. Creezi un site web în baza unui șablon existent (sau în totalitate de la zero)
și ajustezi conținutul în funcție de preferințele tale. Tot ce trebuie să faci este să folosești
cursorul mouse-ului, să faci click pe elementul dorit și să-l muți în locul dorit.
Ceea ce este interesant la acest program este că îți oferă posibilitatea să înlocuiești fiecare
text și imagine cu cele proprii, totul cu numai câteva click-uri. Sună atractiv? Să trecem la chestii
exacte.
Limbajele pe care se bazează PHP sunt:
• HTML ( Hyper Text Markup Language) – pentru definirea conținuturilor paginilor web
• CSS ( Cascading Style Sheets)- pentru definirea aspectului paginilor web
• JavaScript- pentru programarea evenimentelor din paginile web, pentru a adăuga
interactivitate paginilor web Tutoriale:
• HTML Tutorial [http://www.w3schools.com/cssref/default.asp]
• CSS Reference [http://www.w3schools.com/cssref/default.asp]
• JavaScript Reference [http://www.w3schools.com/jsref/default.asp]
Alte resurse utile:
• http://php.net/manual/ro/
Ce este PHP?
• … un acronim pentru “PHP: Hypertext Preprocessor”
• …un limbaj de programare open-source, cu o largă răspândire în domeniul IT
• … gratis pentru a fi descărcat și utilizat
De ce este un limbaj atât de atractiv și popular?
• pentru că este suficient de puternic pentru a fi în centrul celui mai mare sistem de
blogging pe web (WordPress)!
• pentru că este suficient de complex pentru a rula cea mai mare rețea socială (Facebook)!
• de asemenea, este destul de ușor să fii un programator începător de server-side! PHP...
• Fișierele PHP pot conține text, coduri HTML, CSS, JavaScript și coduri PHP
• codurile PHP sunt executate pe server, iar rezultatul este returnat în browser ca un cod
HTML simplu
• Fișierele PHP au extensia ".php"

Întocmit expert elaborare material didactic Ciolea Daniela 8


Avizat manager de proiect

CAPITOLUL 1

PROGRAMARE WEB LA NIVEL DE CLIENT

1.1. Concepte și tehnici de bază


Modelul client-server descrie relaţia dintre două entităţi (aplicaţii software,
calculatoare), care au roluri diferite: una dintre ele – serverului, iar cealaltă – serverul trimite
clientului rezultatul obţinut. Clienţii şi serverele nu sunt neapărat calculatoare, ci programe (un
calculator poate fi simultan şi client şi server), dar, în mod obişnuit pentru a putea deservi rapid
un număr mare de clienţi. Programul client (clientul) interacţionează direct cu utilizatorul prin
intermediul interfeţelor grafice, programele server (serve informaţii, clientul se conectează la
server şi adresează o cerere, interioar la nivelul serverului, trimite înapoi un răspuns, care poate
conţine informaţia solicită sau precizează că nu dispune de ea. Aplicaţiile web funcţionează
conform modelului client clienţi. Serviciile internet necesită servere şi clienţi specializaţi, există
deci servere web, servere de e-mail, servere de FTP, şi analog clienţi. Sintagma tehnologii pentru
server furnizării de conţinut dynamic în web. Prin PHP se înţelege atât limbajul de scripting, cât
şi serverul de aplicaţii, cel din urmă având rolul de a procesa şi interpreta scripturile scrise
utilizând limbajul PHP. PHP este un limbaj de programare ce rulează pe pagină HTML puteţi
îngloba cod PHP care va fi executat la fiecare vizitare a paginii. Codul PHP este interpretat pe
serverul WEB şi gen (clientului (browserului) fiindu-i tra PHP a fost conceput în anul 1994 şi a
fost iniţ fost adoptat apoi de alţi programatori ş produsul clar şi matur de astăzi. În octombrie
2002, era în uz de mai mult de nouă domenii din lumea întreagă, iar acestora îl puteti vedea la
adresa PHP este un produs Open Source, cu acces la codul sursă. Îl puteţi folosi, modifica ş toate
acestea în mod gratuit.
Iniţial, PHP era acronimul de la conversia de numire recursivă GNU (GNU = Gnu`
PHP Hypertext Preprocessor. Spre deosebire de programele scrise într Javascript) codul PHP
este interpretat pe server, utilizatorul primind prin intermediul web numai rezultatul obţinut, în
diverse formate (de exemplu HTML). În ceea ce priveşte popularitatea printre limbajele de
programare, PHP ocupă poziţia 3, după C/C++ şi Java. Versiunea actuala a PHP este 5.1 (RC 1)
Pagina de baza pentru PHP este: Pagina pentru Zend (compania a c http://www.zend.com
Introducere Suport de curs - Pagina 2 ial, PHP era acronimul de la Personal Home Page, dar a
fost modificat pentru a se alinia la GNU (GNU = Gnu`s Not Unix) şi acum este acronimul pentru
Spre deosebire de programele scrise într-unul din limbajele pentru client (de exemplu,

Întocmit expert elaborare material didactic Ciolea Daniela 9


Avizat manager de proiect

Javascript) codul PHP este interpretat pe server, utilizatorul primind prin intermediul web numai
rezultatul obţinut, în diverse formate ( de exemplu HTML).

În ceea ce priveşte popularitatea printre limbajele de programare, PHP ocupă poziţia 3,


după C/C++ şi Java. Versiunea actuala a PHP este 5.1 (RC 1) Pagina de baza pentru PHP este:
Pagina pentru Zend (compania a c http://www.zend.com)

1.2. Tehnologii de dezvoltare și implementare


Vă prezentăm un exemplu de cod PHP (introduction.php)

Ce avem de făcut?

Server side:
• La început pornim serverul web (localhost).
• Apoi scriem codul de mai sus într-un editor de text, cum ar fi Notepad++ .
• Salvăm fișierul cu numele „introduction.php“ în directorul „C:/xampp/htdocs“.
Client side:
• După salvarea fișierului îl deschidem în browser (http://localhost/introduction.php) și
analizăm conținutul paginii web afișate în browser.
În PHP se pot realiza următoarele operații:
... generare de pagini cu conținut dinamic
Întocmit expert elaborare material didactic Ciolea Daniela 10
Avizat manager de proiect

... creare, deschidere, citire, scriere, ștergere și închidere de fișiere de pe server ...
colectarea datelor din formulare
... trimiterea și primirea cookie-urilor
... adăugarea, ștergerea, actualizarea datelor din baza de date
... controlul accesului utilizatorilor
... criptarea datelor PHP nu te limitează în privința obiectelor afișate prin pagini web: pot
fi afișate imagini, fișiere PDF, video Flash, texte XHTML sau XML.
De ce să alegi programare în PHP?
• PHP rulează pe diferite platforme (Windows, Linux, Unix, Mac OS X, etc.)
• PHP este compatibil cu aproape toate serverele utilizate în prezent (Apache, IIS etc.)
• PHP suportă o gamă largă de baze de date.
• PHP este gratuit. Descărcați-l din resursa oficială PHP: www.php.net
• PHP este ușor de învățat și rulează eficient pe partea de server
De ce anume avem nevoie?
Pentru a începe să utilizați PHP, parcurgeți pașii de mai jos:
• Identificați o gazdă web PHP gazdă și suport MySQL
• Instalați un server web pe propriul PC, apoi instalați PHP și MySQL
• Urmați instrucțiunile de instalare de pe situl oficial http://php.net/manual/en/install.php
• De ce avem cu adevărat nevoie în acest curs?
• Un server web XAMPP ( Apache), un interpretor PHP și un SBGD (MySQL)
• Un editor de text (Notepad++)
• Un browser (Firefox)
În cadrul acestui seminar, vom configura PHP pe propriul PC prin utilizarea XAMPP
(inclusiv Apache și PHP, MySQL).
Site-ul oficial PHP (PHP.net) are instrucțiuni de instalare pentru PHP:
http://php.net/manual/en/install.php
Exemplul următor evidențiază modul în care PHP lucrează cu HTML, CSS și JavaScript:
Ce vom realiza?
• vom crea un fișier *.php dintr-un fișier *.html deja existent
• vom adăuga stiluri utilizând CSS
• vom adăuga/include pagini dinamice (fișiere *.php)
• vom include un subsol, conținut ș i un meniu de navigare în paginile web.
Fișierele basis.html și basis.css au fost create și au următorul conținut: basis.css
Ce este World Wide Web (www) ?
Întocmit expert elaborare material didactic Ciolea Daniela 11
Avizat manager de proiect

• Termenul World Wide Web este un sistem de documente și informații de tip hipertext
legate între ele care pot fi accesate prin rețeaua mondială de Internet. Documentele, care rezidă
în diferite locații pe diverse calculatoare server, pot fi regăsite cu ajutorul unui identificator
univoc numit URI. Hipertextul inclusiv imagini etc. este afișat cu ajutorul unui program de
navigare în web numit browser, care descarcă paginile web de pe un server web și le afișează pe
un terminal „client” la utilizator.
• Toate calculatoarele folosesc un protocol de comunicare numit HTTP.
Cum funcționează www?
• Informațiile web sunt stocate în documente numite pagini web
• Paginile Web sunt fișiere stocate pe computere numite servere web
• Calculatoarele care ”citesc” paginile web sunt numite clienți web
• Clienții web vizualizează paginile cu un program numit browser web
• Cele mai populare browsere sunt Google Chrome, Firefox și Internet Explorer.
Interpretorul PHP acționează ca o extensie a serverului web care este invocată de ori câte
ori o pagina PHP este accesată (imaginea din dreapta). Această componentă procesează codul-
sursa din pagină și apoi transmite rezultatul înapoi la web-server, ajungând în final în browserele
utilizatorilor.

Întocmit expert elaborare material didactic Ciolea Daniela 12


Avizat manager de proiect

Limbajul HTML
_ Asa cum am vazut în primul capitol, serverul web livreaza la cerere fişiere HTML.

_ Acestea sunt fişiere text conţinând şi directive care sunt folosite de browser pentru afişarea pe
ecran a textelor, imaginilor, tabelelor, formularelor, ferestrelor şi a celorlalte elemente pe care cel
care a compus fişierul le-a utilizat.

_ Aceste directive le putem vedea doar daca vizualizam sursa documentului şi de regula nu apar
pe ecran.

Generalitati
_ În HTML pentru a diferenţia directivele de restul elementelor acestea se pun între paranteze
ascuţite:
<directiva>
_ O mare parte a lor au efect asupra unei întregi porţiuni din fişier, încadrata de inceput – sfarsit :
<directiva>
...........
</directiva>

Format general
<html>
<head>
Directive continând informaţii generale despre pagina
</head>
<body>
Conţinutul paginii incluzând texte şi directive
</body>
</html>

Hello world
<html>
<head>
<title>Hello world title</title>
</head>
<body>
HELLO WORLD!
</body>
</html>
Sau, mai simplu:
HELLO WORLD!

Întocmit expert elaborare material didactic Ciolea Daniela 13


Avizat manager de proiect

TEHNOLOGII JAVA PENTRU APLICATII WEB

Aplicatii Web
O aplicatie Web este o aplicatie accesibilã dintr-un program de navigare (“Browser
Web”) si aflatã în general pe un alt calculator (numit si “server”) decât calculatorul folosit de
utilizator (numit si “client” al aplicatiei), ambele conectate în reteaua Internet. Programele de
navigare pe Internet (Mozilla FireFox, Internet Explorer, Opera, Chrome) comunicã cu aplicatia
din server prin protocolul HTTP si limbajul HTML.
Cuvintele “server” si “client” desemneazã si programele care asigurã comunicarea între
calculatorul server si calculatorul client.
Un server Web este un program care primeste cereri HTTP de la clienti (programe de tip
browser, dar si alte programe) si “serveste” rãspunsuri acestor cereri sub formã de pagini Web
care contin documente HTML si alte resurse asociate (imagini s.a.). Continutul unui rãspuns era
la început static (fisiere HTML pregãtite anterior si redate ca atare), iar mai apoi dinamic
(paginile Web contin, pe lângã fragmente HTML si date adãugate de server si rezultate din
prelucrãri si/sau din baze de date folosite de server).
Utilizatorul unei aplicatii Web introduce în browser adresa (identificatorul) unei resurse
Web, numiã URL (Uniform Resource Location) sau URI (Uniform Resource Identifier).
Exemplu : http://www.host.com/path/file.html
Termenul “host” desemneazã calculatorul server din reteaua Internet care “gãzduieste”
aplicatia Web, iar “path” este calea (secventa de directoare) din server cãtre fisierul “file.html”.
Un server de aplicatii (Application Server) este un server Web care oferã aplicatiilor
gãzduite o serie de servicii suplimentare si un “container” în care se executã aplicatiile.
Odatã cu aparitia serviciilor Web (Web Services) s-a lãrgit definitia aplicatiilor Web;
conform JEE6 Tutorial o aplicatie web este o extensie dinamicã a unui server Web sau a unui
server de aplicatii. Se pot deosebi douã tipuri de aplicatii Web:
- Orientate cãtre prezentare (Presentation Oriented), care genereazã pagini Web interactive scrise
în diferite limbaje cu marcaje (HTML, XHTML, XML s.a.);
- Orientate cãtre servicii (Service Oriented), care implementeazã un furnizor de servicii Web
(Web Service Endpoint).
Clientul unui serviciu Web, ca si clienti ai altor aplicatii Web, pot sã nu foloseascã un
browser Web si sã fie programe de acces la serviciile oferite de aplicatie.
Existã si aplicatii Web destinate utilizãrii într-o retea localã (Intranet), dar majoritatea lor
sunt accesibile în reteaua globalã Internet.
Întocmit expert elaborare material didactic Ciolea Daniela 14
Avizat manager de proiect

Aplicatiile Web au avantajul cã orice calculator legat la Internet poate avea acces la o
astfel de aplicatie, iar modificarea aplicatiei nu necesitã decât modificãri în server fãrã a fi
afectati si utilizatorii aplicatiei. In plus, programul browser nu necesitã multe resurse, ceea ce a
condus la expresia “thin client” pentru utilizatorul unui browser. Nu conteazã sistemul de
operare sub care se executã programul browser (Windows sau Linux sau altul), dar pot conta
eventuale diferente de implementare a standardelor Web (HTML, CSS, DOM, Javascript) de
cãtre browser. O aplicatie Web poate include alte proceduri Web existente, cum ar fi cãutãri si
posta electronicã.
Exemple uzuale de aplicatii Web sunt posta electronica (e-mail sau WebMail), centre de
informare (wikis) si motoare de cãutare în baze de cunostinte (Google,Yahoo,s.a.), comert
electronic, licitatii prin Internet, bloguri, forumuri de discutii, portaluri s.a.
Fiecare aplicatie are o adresã de Internet URL (un nume de locatie, de “site”), de aceea se
foloseste uneori si expresia “site” sau “website” în loc de aplicatie.
Cele mai multe aplicatii Web au un numãr nelimitat (în general foarte mare) de
utilizatori, dar existã si aplicatii Web cu numãr mic de clienti si care sunt alternative la aplicatii
anterioare locale (informãri si transmitere de documente în cadrul unei firme, proiectare asistatã
de produse s.a.)
O aplicatie Web are ca functie principalã transmiterea (de la server la client) de pagini
Web, care pot fi statice (cu continut fix, stabilit de server) sau dinamice (cu continut care
depinde de cererile clientului, de informatiile extrase din baze de date si de logica aplicatiei). In
general, dupã introducerea adresei de site de cãtre clientul aplicatiei, aplicatia din server trimite o
paginã de prezentare (“home page”), care permite utilizatorului selectarea în continuare a unor
operatii prevãzute de aplicatie sau care cere utilizatorului informatii de identificare (nume si
parolã), dacã aplicatia are restrctii de acces. In continuare dialogul client-server are loc prin
cereri HTTP formulate de client prin intermediul unor elemente de interfatã graficã (butoane,
cãsute pentru introducere text, formulare s.a.), la care aplicatia trimite ca raspuns pagini web (în
HTML) ce pot contine text, imagini, alte formulare si date extrase din baze de date existente pe
server.
Pentru a face mai atractiv dialogul client-aplicatie se folosesc texte si imagini animate
(dinamice), realizate în principal prin includerea de secvente JavaScript în paginile HTML
trimise de server (secvente interpretate de browser).
Tehnologia Ajax (Asynchronous Javascript XML) permite o interactiune mai rapidã între
client si aplicatie prin modificarea paginilor afisate de browser fãrã retransmiterea unei noi
pagini (modificate) de cãtre server (în paralel si asincron cu actiunile utilizatorului).
Întocmit expert elaborare material didactic Ciolea Daniela 15
Avizat manager de proiect

Limbajul JavaScript (ECMAScript) permite si realizarea de interfete mai sofisticate


pentru aplicatiile Web, apropiate ca posibilitãti de interfetele grafice ale aplicatiilor locale
(desktop), ceea ce a condus la termeni ca “Rich Web Application” sau “Rich Internet
Application” (RIA).

Dezvoltarea de aplicatii Web


Orice aplicatie Web trebuie sã interpreteze cererile HTTP primite de la browser (GET,
POST, s.a.) si sã genereze pagini Web ca rãspuns la aceste cereri. In plus, cele mai multe
aplicatii folosesc si una sau câteva baze de date din care se extrag date ca urmare a unor cereri,
iar aceste date sunt incluse în paginile de rãspuns (pagini cu continut dinamic).
Fiecare aplicatie are o anumitã logicã (un algoritm) de tratare a cererilor primite, logicã
care poate deveni destul de complexã.
Servirea unui continut dinamic înseamnã cã multe pagini afisate de o aplicatie Web prin
intermediul unui browser au pãrti fixe (statice), pentru care este potrivit limbajul HTML, dar si
pãrti variabile care nu pot fi descrise în HTML, dar sunt inserate în paginile HTML.
Aplicatiile Web au în general o complexitate mai mare decât aplicatiile locale pentru cã:
- Problemele care trebuie rezolvate presupun competente diferite si limbaje diferite:
HTML si JavaScript pentru partea de prezentare, baze de date si SQL pentru datele persistente si
un limbaj de programare (de obicei orientat pe obiecte) pentru logica aplicatiei.
- Trebuie compatibilizate limbaje si tehnologii diferite: cererile HTTP trebuie
transformate în obiecte, paginile HTML trebuie sã preia date din programe Java; aceste limbaje
nu au fost proiectate sã lucreze împreunã. Probleme similare apar la utilizarea datelor dintr-o
bazã de date relationalã într-un limbaj cu obiecte, ceea ce a condus la aparitia unor produse de tip
ORM (Object Relational Mapping) pentru rezolvarea lor.
- Protocolul HTTP este un protocol “stateless”, în care o cerere nu tine seama de cererile
anterioare (de “starea” aplicatiei), dar în practicã multe aplicatii Web functioneazã ca un automat
cu stãri (de ex. Acumularea unor comenzi de produse într-un cos de cumpãrãturi).
- Accesul public la aplicatiile Web si numãrul mare de utilizatori ridicã probleme de
securizare si de calitate a serviciilor (timp de rãspuns bun, disponibilitate permanentã, modificare
continuã).
- Testarea si depanarea aplicatiilor Web sunt mai dificile decât pentru aplicatiile locale.
- Cerintele asupra acestor aplicatii au crescut continuu atât ca facilitãti oferite (postã
electronicã, servicii Web, portaluri, s.a), ca aspect (componente grafice de interfata cât mai

Întocmit expert elaborare material didactic Ciolea Daniela 16


Avizat manager de proiect

diverse), ca usurintã de utilizare de cãtre beneficiarii (interactivitate sporitã) aplicatiei si ca timp


de implementare.
Ca orice aplicatie software realã si aplicatiile Web au o evolutie în timp, în sensul cã se
pot modifica cerintele privind interfata de acces si functionalitatea aplicatiei. De aceea conteazã
nu numai timpul de dezvoltare a unui prototip initial al aplicatiei ci si efortul de modificare a
aplicatiei aflatã în exploatare.
Solutiile pentru abordarea acestei complexitãti au diverse forme:
- Modularizarea (componentizarea) aplicatiilor Web prin folosirea schemei de proiectare
MVC prin folosirea de extensii “plugin” (adãugate static sau dinamic, fãrã oprirea aplicatiei)
- Utilizarea de platforme suport (Web Frameworks) pentru dezvoltarea si testarea
aplicatiilor
- Utilizarea de medii IDE cu facilitãti speciale pentru aplicatii Web
(Eclipse,NetBeans,IDEA, s.a.).
- Folosirea unor limbaje mai noi (Python,Ruby,Groovy, Scala) si modernizarea
limbajelor mai vechi cu tehnici OOP (PHP 5, JavaScript, s.a.) pentru reducerea codului
aplicatiilor.
Tehnologiile folosite pentru realizarea de aplicatii Web au evoluat rapid iar în prezent
existã o mare diversitate de solutii disponibile, clasificate în general dupã limbajele utilizate în
partea de server: PHP, Perl, Python, Ruby s.a.

Web Frameworks
Expresia “Web Framework” (infrastructurã, platformã, suport), ca si “Application
Framework”, este mult folositã dar destul de vag definitã; o definitie generalã este aceea de
infrastructurã pe baza cãreia se construiesc aplicatii de o anumitã complexitate.
Ideia generalã este aceea cã dezvoltarea unei noi aplicatii nu trebuie sã plece de la zero si
cã o bunã parte din codul aplicatiei poate fi preluatã din biblioteci si/sau poate fi generatã
conform unui model comun unei clase de aplicatii. Existã prea multe sarcini si aspecte comune
aplicatiilor Web pentru ca ele sã nu fie reutilizate în mai multe aplicatii. Ce si cât se reutilizeazã
depinde de fiecare framework, dar obiectivele sunt comune: reducerea timpului de dezvoltare si
de punere la punct a aplicatiilor si o calitate cât mai bunã a lor (cerinte oarecum contradictorii).
Un framework Web se poate reduce la o bibliotecã de clase sau de functii Javascript sau
la un mecanism de utilizare a paginilor sablon (“template”); unele au obiective partiale iar altele
se vor a fi cât mai complete si includ alte produse framework (“Full Stack Framework”).

Întocmit expert elaborare material didactic Ciolea Daniela 17


Avizat manager de proiect

Un framework Web cu obiectiv limitat poate fi folosit pentru ORM (Hibernate,..), pentru
obiecte grafice interactive de interfatã (“widgets”), pentru a include functionalitate Ajax în
aplicatii (Prototype, jQuery, s.a.), pentru reducerea fisierelor de configurare prin conventii,
pentru generarea unui schelet al aplicatiei (“Scaffolding”), pentru testarea aplicatiilor etc.
Anumite produse framework sunt cunoscute mai ales pentru noutãtile introduse în
domeniu si care au marcat anumite pietre de hotar (JEE, .NET, Spring, Ruby on Rails =RoR), iar
altele au perfectionat aceste inovatii si le-au fãcut mai accesibile (Grails simplificã utilizarea
Spring, Hibernate, Prototype, RoR s.a.).
Un framework complet include un server Web si o bazã de date pentru a simplifica si
accelera dezvoltarea si testarea aplicatiilor. Aplicatia finalã (cu multe fisiere si foldere) este de
obicei arhivatã într-un format standard pentru a fi transferatã pe un server Web unde va fi
exploatatã (proces numit “deployment”= instalare).
Produsele de tip framework sunt clasificate de obicei dupã limbajul utilizat (altele decât
HTML sau XML): PHP, Pyton, Java, s.a.
Un framework Web poate fi utilizat în mod linie de comandã sau dintr-un IDE; de
exemplu Grails poate fi folosit din IDEA, Eclipse si NetBeans.
Multe produse framework actuale sunt de tip MVC adicã impun aplicatiilor Web o
structurã conformã schemei MVC (Model-View-Controller), având 3 pãrti distincte:
- M (Model) desemneazã datele folosite de aplicatie (date preluate de obicei dintr-o bazã
de date relationalã);
- V (View) desemneaza partea de prezentare a aplicatiei (pagini HTML cu JavaScript);
- C (Controller) desemneazã logica care controleazã accesul la date si generarea de pagini
Web, pe baza cererilor HTTP primite de aplicatie.
Pe lângã implementarea schemei MVC o aplicatie Web mai poate contine si alte
componente, cum ar fi:
- componente de autentificare utilizatori autorizati
- componente de cãutare pe Internet de informatii
- componente de generare mesaje prin posta electronicã
- componente de generare fisiere în formate diferite (PDF, formate MSOffice: DOC,XLS)
- componente de conectare la servicii Web.

Întocmit expert elaborare material didactic Ciolea Daniela 18


Avizat manager de proiect

Java Enterprise Edition (Java EE)


Java EE este o platformã pentru dezvoltarea de aplicatii Web (distribuite) în limbaj Java,
aplicatii complexe (“large-scale”), portabile, scalabile, sigure si modulare si care sã se poatã
integra usor cu tehnologii anterioare (“legacy technologies”).
In jargonul JEE o aplicatie distribuitã complexã este numitã aplicatie de firmã (Enterprise
Application) pentru cã apare în firmele mari informatizate.
Java EE este în primul rând o colectie de specificatii care ar trebui respectate de serverele
compatibile JEE (SPI=System Programmer Interface) si respectiv de aplicatiile JEE
(API=Application Programmer Interface).
Specificatiile se referã la:
- interfete API si biblioteci de clase care sã unifice programarea aplicatiilor distribuite
complexe: JDBC pentru acces la baze de date SQL, JMS pentru mesagerie, JNDI pentru registre
de nume, JAX-WS si JAX-RS pentru servicii Web, JTA pentru tranzactii, JPA pentru
persistentã, etc.
- componente “standard” ale aplicatiilor Web: servleti, pagini JSP, biblioteci de tag-uri,
module EJB (Enterprise Java Beans), portleti, conectori, etc.
- servicii care trebuie asigurate de cãtre un server de aplicatii (un container de aplicatii
Web)
- fisiere de configurare si structura arhivelor ce contin aplicatii Web
Ideea principalã era de a reduce diversitatea aplicatiilor Web scrise în Java si diversitatea
serverelor de aplicatii Java pentru a reduce timpul de dezvoltare si de instalare pe diferite servere
a unor aplicatii, inclusiv prin reutilizarea unor module si servicii comune.
Unele dintre tehnologiile introduse de JEE pentru aplicatii Web scrise în Java se folosesc
si în servere sau produse framework care nu sunt total compatibile JEE: servleti, JSP, logging,
s.a.
Un server care suportã aplicatii Web scrise în Java trebuie sã continã un container de
servleti.
Principalele servere compatibile Java sunt Apache Tomcat si Jetty.
Un server de aplicatii (AS=Application Server) oferã servicii suplimentare fatã de un
server container de servleti (pe care-l contine): tranzactii, jurnalizare (logging), servicii de nume,
s.a.
Un server de aplicatii expune clientilor posibilitatea de a utiliza aplicatii aflate pe un alt
calculator.

Întocmit expert elaborare material didactic Ciolea Daniela 19


Avizat manager de proiect

Un server compatibil JEE implementeazã toate interfetele API de pe platforma JEE si


oferã serviciile considerate standard pentru toate aplicatiile.
In prezent existã mai multe servere de aplicatii compatibile Java EE, unele comerciale
(IBM Websphere, JBoss, Weblogic) si altele gratuite ( Glassfish, Geronimo s.a.).

Tehnologii Web pe platforma JEE


Platforma JEE este destinatã în primul rând aplicatiilor mari si admite o diversitate a
acestor aplicatii, în sensul cã pot exista mai multe servere, cã utilizatorul final (client) poate
folosi si alte programe decât un browser Web, cã poate fi necesarã integrarea în aplicatia JEE a
unor baze de date sau fisiere existente anterior.
Aplicatii JEE au si atributul de “multi-tiered” adicã sunt structurate pe mai multe
niveluri, iar tehnologiile folosite sunt clasificate dupã nivelul pe care se folosesc. Cele 3 niveluri
sunt:
- Nivelul Web (Web Tier) : partea care preia cererile client si le transmite nivelului
urmãtor.
- Nivelul Business (Business Tier): partea de logicã a aplicatiei, care compune rãspunsuri
- Nivelul EIS (Enterprise Information System): partea de lucru cu date persistente
(externe).
Tehnologiile JEE folosite pe nivelul Web sunt:
- Servleti
- JSP (Java Server Pages) si biblioteci de taguri JSP (JSP Tag Library)
- JSF (Java Server Faces)
- JSF Facelets
- Limbajul unificat de expresii (Unified Expression Language)
- Clase JavaBeans folosite în paginile JSP si JSF
Tehnologiile JEE folosite pe nivelul Business sunt:
- Componente EJB (Enterprise Java Beans)
- Servicii Web de tip REST
- Furnizori/clienti de servicii Web SOAP
- Entitãti persistente JPA (Java persistence API)
Tehnologiile JEE folosite pe nivelul EIS sunt:
- JDBC (Java Data Base Connectivity) care integreazã limbajul SQL în Java
- JPA (Java Persistence API)
- Java EE Connector Architecture, pentru cuplare cu produse non-JEE
Întocmit expert elaborare material didactic Ciolea Daniela 20
Avizat manager de proiect

- JTA (Java Transaction API) pentru utilizare de tranzactii


Dezvoltarea de aplicatii Java EE se poate face în linie de comandã (folosind programul
“ant”) sau folosind mediul NetBeans.
Mediul integrat pentru dezvoltare de programe NetBeans oferã suport pentru dezvoltarea
de aplicatii JEE, incluzând multe biblioteci, serverul Glassfish si o bazã de date (Derby). Pentru
exemplele din tutorialul JEE sunt descrise proceduri de operare în NetBeans (existã fisiere
proiect NetBeans), dar este posibilã si utilizarea lor în linie de comandã.

Evolutia platformei JEE


Principala noutate a platformei initiale Java EE a fost introducerea unor noi componente,
numite EJB (Enterprise Java Beans) care se executau sub controlul containerului JEE. Un EJB
era o clasã Java care trebuia sã respecte anumite interfete pentru metodele din EJB apelate de
container.
Initial erau trei tipuri de clase EJB:
- EJB sesiune (Session EJB)
- EJB entitate (Entity EJB)
- EJB mesaj (Message EJB)
Aceste componente EJB nu puteau fi depanate decât dupã instalare în container (deci
numai pe un server JEE), ceea ce s-a dovedit a fi un dezavantaj important si o piedicã în
adoptarea lor.
In acelasi timp au apãrut alte solutii ORM pentru accesul din Java la date persistente (din
baze de date SQL), mai simple si care foloseau clase Java obisnuite (POJO=Plain Old Java
Objects).
Cele mai mari modificãri de la o versiune la alta au avut loc pe nivelul Business, prin
renuntarea treptatã la componentele Entity EJB si trecerea la alte tehnologii pentru obiecte
persistente.
O modificare importantã a avut loc dupã ce s-au introdus în limbajul Java (1.5) adnotãrile
(“annotations”), care au simplificat fisierele de configurare XML necesare unei aplicatii JEE.
Ajuns acum la versiunea 6, Java EE a suferit în timp schimbãri importante:
- Pe partea de persistentã a datelor (componenta M din MVC) s-a renuntat la ideea
initialã de clase EJB entitate în favoarea unor clase Java obisnuite (POJO=Plain Old Java
Objects); clasele Entity EJB pot fi testate numai pe serverul de aplicatii, dar clasele POJO pot fi
testate si înainte de instalare pe server. Ultima versiune, EJB3 (JPA), are multe simplificãri si

Întocmit expert elaborare material didactic Ciolea Daniela 21


Avizat manager de proiect

îmbunãtãtiri, dar existã alternative pentru clasele persistente preferate în multe cazuri (Hibernate
de ex.).
- Pe partea de prezentare (componenta V din MVC) s-a trecut (în ultima versiune) de la
pagini JSP la tehnologia JSF (Java Server Faces) si la componente “facelet”.
Platforma Java EE evolueazã în continuare prin aparitia de noi interfete API.

Alternative la platforma JEE


Cerintele impuse de Java EE unui server de aplicatii urmãresc asigurarea tuturor
serviciilor care ar putea fi cerute de aplicatii, chiar dacã multe aplicatii nu folosesc aceste
servicii. De aici si complexitatea sporitã a unor astfel de servere, care se reflectã si în
complexitatea procesului de elaborare a unor aplicatii Java EE.
Mai nou, existã servere JEE modulare, care au câteva niveluri de complexitate în functie
de cerintele aplicatiilor (Apache Geronimo, Glassfish s.a.), dar si containere “lightweight” cum
este Spring Framework, care impun mai putine conditii aplicatiilor Web dezvoltate în Java.
Spring oferã mai multe tehnologii Java pentru dezvoltare de aplicatii Web, între care se
poate opta, iar unele erau mai simple decât solutiile JEE (cel putin într-o anumitã etapã a
platformei JEE).
Produsele framework pentru dezvoltare de aplicatii Web în Java pot sã fie sau nu
compatibile cu specificatiile Java EE. Dintre cele compatibile JEE mai folosite sunt: Spring,
Seam (JBoss), s.a. Aplicatiile dezvoltate cu Spring pot fi exploatate pe un server JEE dar si pe un
server mai modest (Tomcat sau Jetty).
Unul din obiectivele initiale si ambitioase ale platformei JEE era acela de a permite
scalarea aplicatiilor Web pentru mentinerea unor performante bune pe mãsurã ce numãrul
clientilor si facilitãtile oferite cresteau (de unde si atributul “multi-tier” pentru aplicatii JEE).
Mai nou, pentru aplicatii Web scalabile se oferã platforme bazate pe un nor de calculatoare
(“Cloud Computing”) cum este Google Application Engine si altele.
O alternativã la JEE dar si la utilizarea limbajului Java o constituie platforma .NET de la
Microsoft, consideratã ca principala optiune fatã de solutiile Java. Existã si o variantã Spring
pentru .NET.

Întocmit expert elaborare material didactic Ciolea Daniela 22


Avizat manager de proiect

Capitolul 2
PROGRAMARE WEB LA NIVEL DE SERVER

2.1. Programarea Web la nivel de server


Evolutia retelei Internet este strans legata de evolutia tehnologiilor informatice, a
algoritmicii si a limbajelor de programare. O prima revolutionare a spatiului WWW s-a produs
odata cu posibilitatea de a introduce imagini in documentele HTML, prefigurand transformarea
banalului si staticului hypertext in ceea ce astazi numim hypermedia. Inglobarea de grafica, sunet
si film in documentele web a fost urmata de posibilitatea includerii de secvente de cod executate
de browser (secvente JavaScript sau VBScript), precum si de aplicatii (applet-uri) Java. Modul
de afisare al documentelor a putut fi apoi controlat mai precis prin utilizarea foilor de
stil (Cascading Style Sheets).
Dezvoltarea conceptelor si tehnologiilor web a avut loc si in directia dinamizarii
continutului documentelor hypermedia, prin aparitia de limbaje pentru programarea
aplicatiilor web server-side (aplicatii executate de catre server-ul gazda).
Web-ul actual a evoluat in directia proiectarii unor situri capabile sa-si actualizeze
continutul in mod dinamic, de la ora la ora, care sa ofere modalitati multiple de interactiune cu
vizitatorul:
setarea caracteristicilor paginii in functie de preferintele utilizatorului;
afisarea continutului in functie de necesitatile informationale ale vizitatorului;
participarea la discutii in forumuri;
exprimarea parerii despre un anumit subiect prin intermediul sondajelor;
cumpararea de produse din magazine virtuale;
plata impozitelor si taxelor;
Programarea la nivel de client (client-side programming)
In momentul actual, un document Web poate fi realizat prin folosirea urmatoarelor
tehnologii pe partea de client:
Foi de stiluri in cascada (CSS) si HTML dinamic (Dynamic HTML - DHTML) pentru
formatarea documentului, pozitionarea elementelor in pagina si pentru realizarea efectelor
primare de animatie;
Scripturi JavaScript si VBScript pentru realizarea de mici aplicatii bazate pe evenimente
(validarea datelor transmise prin intermediul formularelor, realizarea de meniuri derulante, mici

Întocmit expert elaborare material didactic Ciolea Daniela 23


Avizat manager de proiect

aplicatii care se executa la un anumit interval de timp sau atunci cand se actioneaza un buton,
etc) ;
Aplicatii Java - scripturi Java (apleturi) care sunt executate de navigator, utilizate de
obicei pentru realizarea de simulari ale unor fenomene, jocuri, prezentari multimedia.
Animatii flash, shockwave etc. – sunt utilizate de obicei pentru realizarea de animatii,
jocuri, prezentari multimedia, elemente de navigare pentru paginile Web (meniuri, butoane).
Dezavantajul major al tehnologiilor de mai sus este dependenta acestora de
navigatorul Web si implicit de calculatorul client. Utilizatorul poate dezactiva, de exemplu,
executarea secventelor JavaScript din motive de securitate sau dintr-o greseala navigatorul
nemaiputand afisa corect documentele Web ce contin astfel de scripturi.
Animatiile flash si apleturile Java pot fi interpretate de client numai daca utilizatorul a instalat
niste module (programe) speciale numite module plug-in. (cum ar fi playerul flash). Continutul
paginilor Web nu va fi afisat corect daca plugin-urile necesare nu sunt instalate sau sunt instalate
versiuni mai vechi.
Nu in ultimul rand, aplicatiile pe partea de client nu au acces la fisiere si baze de date,
astfel ca nu se pot realiza aplicatii care necesita stocarea si regasirea informatiilor.
Programarea la nivel de server (server-side programming)
Programarea la nivel de server a aparut pentru a depasi limitele programarii la
nivelul clientului. Un script executat pe calculatorul server este independent atat de navigator,
cat si de software-ul folosit pentru serverul Web. In plus, scriptul server-side poate accesa
resurse aflate pe server, cum ar fi bazele de date, fisierele text, servere de mail, comenzi ale
sistemului de operare.
Programarea pe partea de server presupune existenta a doua entitati, care sunt, in general,
separate:
Limbajul de scripting propriu-zis (scripting language);
Interpretorul limbajului (scripting engine).
Interpretorul limbajului de scripting este construit fie ca modul al serverului Web, fie este o
aplicatie separata ce conlucreaza cu acesta.
Diagrama din figura 2.1 poate fi completata pentru a ilustra interactiunile dintre aplicatia
client (navigatorul), serverul Web si interpretorul limbajului (figura 4.2).

Întocmit expert elaborare material didactic Ciolea Daniela 24


Avizat manager de proiect

Figura 2.2 Interactiunea browser-server Web – Interpretor

Sa comentam modul in care interactioneaza navigatorul, serverul Web si interpretorul,


folosindu-ne de figura de mai sus. Comunicarea browser – server web se realizeaza astfel:
Navigatorul emite catre serverul Web o cerere pentru accesarea scriptului. Secventele de
program scrise intr-un limbaj de programare server-side (script) sunt inserate in
documente HTML, prin utilizarea unui marcaj special, prin urmare dialogul browser-
server decurge in modul prezentat in lectia precedenta.
Serverul Web stabileste daca nu exista restrictii privind accesarea scriptului si, in cazul
afirmativ, trimite catre interpretor secventele de program, pentru a fi executate (interpretate).
Interpretorul executa scriptul, accesand, daca este cazul, alte servere sau servicii
necesare (server de baze de date, serverul de posta electronica, e.t.c). Aceste servere aflate “in
spate”, adica fiind accesibile doar prin intermediul altor servere si fiind “invizibile” din punctul
de vedere al utilizatorului, se numesc servere back-end.
Interpretorul returneaza catre serverul Web rezultatele executiei, acestea fiind formatate ca
document HTML (XHTML, XML);
Serverul Web inlocuieste secventele de program din documentul initial cu rezultatele
primite de la interpretor si-l furnizeaza navigatorului.
Observatii
Cele mai multe dintre limbajele de programare pentru server sunt interpretate de
componenta scripting engine instructiune cu instructiune, motiv pentru care am preferat ca
denumire cuvantul interpretor.

Întocmit expert elaborare material didactic Ciolea Daniela 25


Avizat manager de proiect

Totusi, se pot utiliza si limbaje unde scripturile trebuie compilate in prealabil, asa cum se
intampla in limbajele de programare de nivel inalt uzuale, caz in care denumirea de interpretor
este improprie.
De exemplu, la inceputurile programarii Web, programatorii foloseau scripturi scrise in
limbajul C, care erau compilate si executate apoi prin intermediul serverului Web.
Comunicarea dintre serverul Web si alte aplicatii se realizeaza conform unor reguli
generale, care au fost standardizate sub denumirea Common Gateway Interface (CGI), pentru a
defini o interfata universala, independenta de aplicatiile software utilizate.
Scripturile server-side mai sunt cunoscute si sub denumirea de scripturi CGI.
Rezolvarea unor probleme legate de securitate a dus la utilizarea unui director special in
care se stocheaza scripturile CGI (/cgi-bin), avand stabilite drepturi de acces specifice.
Tehnologiile server-side actuale nu mai impun stocarea scripturilor intr-un director anume. Fiind
parte a unui site Web, scripturile sunt memorate in acelasi loc cu celelalte fisiere ce compun site-
ul, in directoare cu numele: www, htdocs sau publichtml, in functie de serverulutilizat si de
sistemul de operare ce ruleaza pe server.
De-a lungul timpului au fost folosite o multitudine de limbaje pentru a concepe scripturi
CGI, dintre care aminim:
Limbaje de nivel inalt de uz general: C, C++, Fortran;
Limbaje ale interpretoarelor de comenzi (shell) din sistemele de operare din
familia Unix/Linux. Aceste limbaje utilizau comenzi ale sistemului de operare si structuri de
control ale executiei rudimentare.
Limbaje de scripting specializate: Perl, Phyton, ASP (Active Server Page), JSP(Java
Scripting Page), PHP, AppleScript e.t.c.
PHP este o solutie simpla pentru a genera pagini web dinamice, avand o serie de avantaje,
dintre care amintim:
Simplitate si independenta fata de sistemul de operare. PHP este un limbaj de programare
multi-platforma, astfel incat un cod scris in Windows va fi la fel de bine interpretat de un server
Unix, cu modificari minime. Acest lucru se poate dovedi util intrucat mediul Windows pune la
dispozitie o gama mai larga de editoare precum si capacitati mai bune si mai prietenoase de
testare.
PHP se aseamana din multe puncte de vedere cu limbajul C, prin urmare cei ce cunosc
acest limbaj nu vor avea prea multe probleme in insusirea conceptelor din PHP;
PHP este insotit de un set bogat de librarii standard, dispunand de peste 1000 de functii;
PHP ofera suport pentru programarea orientata pe obiecte;
Întocmit expert elaborare material didactic Ciolea Daniela 26
Avizat manager de proiect

PHP ofera suport (functii) pentru conectarea la toate serverele de baze de date importante;
Nu in ultimul rand, PHP este un produs ce poate fi utilizat gratuit, pentru ca este dezvoltat
prin contributia comunitatii programatorilor, aflandu-se sub incidenta licentei GNU Public
Licence.
Stiati ca…
La fel ca multe alte proiecte software importante, PHP s-a nascut sub forma unui mic
utilitar care trebuia sa rezolve o problema particulara. In 1995, Rasmus Lerdorf si-a publicat
CV-ul in pagina sa Web. Pentru ca sa poata urmari cine i-a vizitat pagina, Rasmus a introdus in
pagina un marcaj special si a scris in Perl un script CGI care sa colecteze informatii despre
vizitatori.
Lerdorf si-a denumit utilitarul PHP tools (Personal Home Page).
Ulterior, Lerdorf a conceput o interfata intre clientii Web si o baza de date recurgand la
aceeasi idee: etichete HTML proprii interpretate de un script CGI scris in limbajul C. Aplicatia a
fost denumita Form Interpreters (FI).
Lerdorf a reunit codul PHP cu FI si l-a facut public sub numele PHP/FI (acesta purtand
si numele de PHP 2.0). Primii pasi fiind facuti, a urmat contributia comunitatii programatorilor,
care au dus la dezvoltarea PHP/FI in regim open source pastrand denumirea PHP.
Limbajul PHP a ajuns astazi la versiunea 5.0.

2. Programarea web în limbajul PHP


Elemente de sintaxă ale limbajului PHP
Un script PHP poate fi plasat oriunde în interiorul unui fișier HTML. Scriptul PHP începe
cu <?php și se termină cu ?>:
<?php
// cod scris în PHP
?>
Extensia predefinită a unui fișier PHP este " .php". În mod obișnuit , un fișier PHP
conține taguri HTML și instrucțiuni de cod PHP.

Notă : Instrucțiunile PHP se încheie cu simbolul ”;”.


Întocmit expert elaborare material didactic Ciolea Daniela 27
Avizat manager de proiect

Comentarii
Un comentariu în cod PHP este o linie care nu este citită/ executată ca parte a
programului. Singurul său scop este de a fi citit de către cineva care analizează codul.
Comentariile pot fi folosite pentru:
Alte persoane să înțeleagă scopul în care au fost scrise anumite linii de cod
• Autorul codului/ programatorul să își poată aminti de ce a scris respectivele instrucțiuni. Cei
mai mulți programatori trăiesc experiența de a reveni la propria lor muncă un an sau doi mai
târziu și de a constata că au uitat de ce au scris anumite linii de cod.
Există mai multe posibilități de a realiza comentarii în PHP:

Întocmit expert elaborare material didactic Ciolea Daniela 28


Avizat manager de proiect

Spring Framework
Spring Framework este o platformă open source pentruu simplificarea scrierii aplicațiilor
în limbajul Java. Deși este folosit în principal pentru platforma Java EE,u Spring poate fi utilizat
pe orice aplicație Java. Spring este considerat o alternativă la modelul Enterpiseu JavaBeans
(EJB). Spring a fost lansat în anul 2002 de către Rod Johnsonu împreună cu cartea sa, Expert
One-on-One: J2EE Design and Development. În iunie 2003 Spring a intrat sub licența Apache
2.0.
Pași pentru instalare și utilizare Spring Framework:
Instalare Java Development Kit (JDK)
Instalare Apache Common Logging API
Configurare Eclipse
Configurare biblioteci Spring Framework
Beneficii utilizare Spring Framework:
Spring permite dezvoltatorilor să dezvolte aplicații enterprise;
Spring este organizat într-o manieră modulară;
Spring utilizează unele dintre tehnologiile existente, cum ar fi: ORM, JEE, Quartz și
JDK, precum și alte tehnologii de vizualizare;
Testarea unei aplicatii scrise cu Spring este simplă, deoarece codul dependent de mediu
este transmis și integrat în cadrul framework-ului;
Spring este un framework web MVC bine conceput, care oferă o alternativă foarte bună
pentru alte framework-uri, cum ar fi Struts sau altele mai puțin populare.
Swing
Swing este un set de instrumente GUI pentru Java.
Este parte din Oracle Java Foundation Classes (JFC) - un API pentru a furniza o interfață
grafică cu utilizatorul (GUI) pentru aplicațiile Java.
Swing a fost dezvoltat pentru a oferi un set mai sofisticat deu componente GUI decât cele
anterioare din Abstract Window Toolkit (AWT).
În plus față de componentele clasice, cum ar fi butoanele, checkbox-urile și etichetele,
Swing oferă mai multe componente avansate, cum ar fi panoul de tab-uri (tabbed panel), scroll
panes, tabele și liste.
Spre deosebire de componentele AWT, componentele Swing nu sunt implementate prin
cod specific platformei. Acestea sunt scrise în întregime în Java și sunt independente de
platformă.

Întocmit expert elaborare material didactic Ciolea Daniela 29


Avizat manager de proiect

Începând cu versiunea Java 1.1 au apărut Java Foundation Classes (JFC) care includ un
set numeros de componente denumite Swing.
În vederea scrierii aplicatiilor care folosesc acesteu componente trebuie importat
package-ul javax.swing.
În general, ferestrele care stau la baza aplicatiilor Swing sunt derivate din clasa JFrame
care contine margini, titlu, butoane pentru închiderea, respectiv minimizarea fereastrei.
Clasele din pachetul Swing sunt bazate pe arhitectura MVC. Modelul este reprezentarea
logică, view-ul este reprezentarea vizuală și controller-ul specifică comportamentul.
Putem avea mai multe view-uri asociate aceluiași model. De exemplu, putem vizualiza
aceleași date sub formă de tabel sau sub formă de grafic. În AWT, fiecare componentă grafică
are o clasă nativă (clasa peer) care comunică cu componenta nativă a sistemului de operare.
Componentele din pachetul Swing nu mai au aceste clase peer și pot arăta în mod diferit
pe aceeași platformă din cauză că respectă arhitectura MVC.
Pachetul Swing conține două tipuri de componente: containere (JFrame, JApplet,
JWindow, JDialog); componente "lightweight" (JButton, JPanel, Jlist, etc.). Containerele
reprezintă cadrul în care aceste componente pot exista.
Swing versus AWT:
Swing:
ü suportă modelul MVC
ü componentele necesită pachetul java.swing. *
ü componentele sunt independente de platformă
ü rulează mai rapid decât AWT
ü pluggable look and feel
AWT:
ü nu suportă modelul MVC
ü componentele necesită pachetul java.awt.*
ü componentele sunt dependente de platformă
ü rulează mai lent
ü native look and feel
JUnit
Unit Testing: testarea celor mai mici componente ale codului sursă (clase sau metode).
Unit Testing este o metodă de testare software prin care unitățile individuale de cod sursă sunt
testate pentru a determina dacă acestea sunt bune pentru a fi utilizate.

Întocmit expert elaborare material didactic Ciolea Daniela 30


Avizat manager de proiect

Test-Driven Development (TDD) este un proces de dezvoltare software care se bazează


pe repetarea unui ciclu de dezvoltare foarte scurt.
Test-Driven Development (TDD) înseamnă:
ü scrierea unui test care eșuează;
ü modificarea codului sursă, astfel încât să meargă;
ü eliminarea redundanțelor.
De ce să efectuăm Unit Testing?
ü testele sunt ușor de scris;
ü teste pot fi scrise ad-hoc, atunci când avem nevoie de ele;
ü pe baza acestora se pot defini colecții de teste - denumite TestSuites;
ü acestea pot fi rulate automat ori de câte ori este necesar (se scriu o dată și se
utilizează de mai multe ori);
ü există mai multe framework-uri și instrumente care simplifică procesul de scriere
și rulare a testelor;
ü reduce timpul petrecut la depanare și pentru găsirea de bug-uri;
ü reduce numărul de bug-uri în codul livrat sau integrat;
ü mărește rata de identificare a erorilor în timpul fazei de scriere a codului.
JUnit este un instrument pentru dezvoltare Test-Driven (TDD).
JUnit este un cadru de clase care permite scrierea și executarea de teste pentru diferite metode /
clase din codul sursă.
Arhitectura JUnit include componentele:
ü TestRunner,
ü TestResults,
ü TestCase,
ü Assert
FindBugs
FindBugs caută bug-uri în programele Java. Acesta se bazează pe conceptul de șabloane
de bug-uri. Un șablon de bug este un cuvânt sau secvență de cod sursă, care generează de multe
ori o eroare.
FindBugs utilizează analiza statică pentru a inspecta bytecode-ul Java pentru a determina
aparițiile șabloanelor de bug-uri.
FindBugs poate identifica bug-uri pur și simplu prin inspectarea codului sursă al unui
program, fără ca execuția programului să fie necesară.
Descrierea tipurilor de bug-uri identificate:
Întocmit expert elaborare material didactic Ciolea Daniela 31
Avizat manager de proiect

ü Bad practice (încălcări ale practicilor recomandate șiu esențiale de scriere a


codului sursă);
ü Correctness (o eroare aparentă de codificare care rezultă în cod și care nu a fost,
probabil, ceea ce a dorit dezvoltatorul);
ü Malicious code vulnerability;
ü Multithreaded correctness;
ü Performance;
ü Dodgy (cod care este confuz sau scris într-un mod care conduce la erori).
Instalare FindBugs Eclipse plugin:
ü In Eclipse, select Help-u>Install new software
ü Click New Remote Site
ü Name: FindBugs update site
ü URL: http://findbugs.cs.umd.edu/eclipse
ü You should see FindBugs Feature
ü Select the I accept option to accept the license and click Next
Configurare FindBugs Eclipse plugin:
In Eclipse, select Windows->Preferences, under Java select FindBugs.

Întocmit expert elaborare material didactic Ciolea Daniela 32


Avizat manager de proiect

Capitolul 3

TEHNICII, TRANZACȚII ȘI SECURITATE WEB

3.1. Securitatea aplicatiilor web


• Preliminarii
• Tipuri de atacuri
• Prevenirea & supravietuirea
• Monitorizarea & testarea
• Aspecte importante

• Arhitectura generala a unui sit Web dynamic (aplicatie Web) – detalii in (Buraga, 2003;
Buraga, 2005)
Incident de securitate≡eveniment aparut in cadrul retelei, cu implicatii asupra securitatii unui calculator
sau a retelei–Provenind din interiorul ori exteriorul retelei
•Multe protocoalede baza ale Internetului (inclusive HTTP) nu au luat in calcul vulnerabilitatile
ce pot surveni
•Cracker vs. hacker
Vulnerabilitate≡slabiciunea unui sistem hardware/ software ce permite utilizatorilor neautorizati
sa aiba acces asupra sa
•Nici un sistem nu este100% sigur
•Vulnerabilitatile apar si datorita proastei administrari
Cauzele existentei vulnerabilitatilor (Acostachioaie, 2003)–Bug-uri(erori) existente in programe
(scripturi, servereWeb, navigatoare,...), introduse deseori neintentionat
–Ignorarea/nedocumentarea bug-urilor existente (cunoscute)
–Configurarea necorespunzatoarea programelor, serverelor si retelelor
–Lipsa suportului din partea producatorilor

Întocmit expert elaborare material didactic Ciolea Daniela 33


Avizat manager de proiect

–Comoditatea sau necunoasterea problemelor de securitatede catre administrator ori de


conducerea organizatiei

ATACURI

•Cunoasterea profilului atacatorului

•Atribute ce trebuie considerate:

–Resursele disponibile(financiare, tehnice,…+ pregatirea in domeniu)

–Timpul alocat (atacatorii rabdatori vor avea mai mult succes)

–Riscul asumat–depinde de obiective (atacul ar putea fi revendicat sau nu de cracker)

–Accesul la Internet si calitatea acestuia: tip (dial-up, conex. satelit,…), mod de alocarea IP-ului
etc.

–Obiectivele urmarite(e.g., recunoastere mondiala, denigrarea tintei, furt de informatii, furt de


bani)

Tipuri de atac

–Accesul utilizator

•Atac prin acces via cont-utilizator obisnuit sau cu privilegii superioare

•Etape:

–Colectarea de informatii–utilizatori, vulnerabilitati,…

–Exploatarea

–Deteriorarea

»Modificarede informatii

»Accesla date importante

»Asigurareaa ccesului ulterior la sistem

»Modificareajurnalelorde sistem

–Accesulde la distanta

•Nu necesita acces-utilizator la sistem

•Creazare fuzuride servicii prin cereri incorecte ori“in rafala”–DOS (Denial of Service), DDOS
(Distributed DOS)

•Efecte:
Întocmit expert elaborare material didactic Ciolea Daniela 34
Avizat manager de proiect

–Distrugerea unui server ori unei aplicatiiWeb

–Defectarea/incetinirea (temporara)

a serveruluiWeb sau a sistemului

–Accesul de la distanta la diverse aplicatii

•Trimitere de date invalide aplicatiilor, nu serviciilor de retea(traficul nu e afectat);

e.g., SQL injectionsauCross-Site Scripting

•Nunecesita obtinerea de acces utilizator

•Etape:

–Colectarea de informatii–identificarea aplicatiei

(e.g. server sauclient Web, aplicatieWeb)

–Exploatarea–trimiterea continutului, direct sau indirect, spre aplicatie

–Deteriorarea

–Accesulde la distanta la diverse aplicatii

•SQL injection

–Scrierea unor interogari SQL ce permit afisarea, alterarea, stergereae date din bazelede date via
formulare Web ori direct in URI

•Cross-Site Scripting (XSS)

–“Injectarea”in cadrul sistemului, pt. Executia direct in browser, a scripturilor


JavaScript/VBScript

–Exemplu: <imgsrc=“javascript:cod”/>care redirectioneazautilizatorulsprealt sit


oriblocheazanavigatorul

–Detalii in (Long, 2005)

Întocmit expert elaborare material didactic Ciolea Daniela 35


Avizat manager de proiect

APLICAȚII PENTRU PROGRAMAREA WEB

Întocmit expert elaborare material didactic Ciolea Daniela 36


Avizat manager de proiect

O aplicaţie web este un program care rulează într-o arhitectură client-server folosind
tehnologiile deschise World Wide Web. Ele înlocuiesc modelele în care atât serverul cât şi
clientul rulează tehnologii proprietar, mentenanţa aplicaţiilor de pe partea de client fiind prea
complexă, costisitoare şi susceptibilă la erori. În schimb, omniprezenţa browserelor web şi
comoditatea de a le folosi drept client conduce la eliminarea acestei mari probleme. Astfel, au
evoluat şi pe partea de server serverele de aplicaţii, iar pe lângă limbajele de programare au
apărut frameworkuri şi tehnologii dedicate programării acestora.
Webul a apărut la început cu scopul de a distribui documente, iniţial în cadrul său
apărând protocolul HTTP şi formatul HTML. Prima dezvoltare în direcţia folosirii unui server
web a fost apariţia CGI⁠(en) la începutul anilor 1990. CGI permitea rularea unor scripturi pe server,
care să genereze un răspuns dinamic în format HTML. Pasul următor a fost transformarea
acestor documente HTML în interfeţe dinamice cu utilizatorul, prin crearea de către Netscape a
limbajului JavaScript, care este dedicat scriptării comportamentului browserului şi introducerea
de elemente dinamice; tot în acea perioadă, Sun a asociat limbajului Java capabilitatea de a rula
mici aplicaţii scrise în acest limbaj şi denumite appleţi într-un plugin al browserului, iar
Macromedia a inventat Flash, o tehnologie ce făcea posibil acelaşi lucru. În ultimii ani ai
secolului al XX-lea, funcţionalitatea limbajului JavaScript a fost extinsă semnificativ prin
introducerea API-ului XmlHttpRequest, prin care se putea programa efectuarea şi procesarea
răspunsurilor la mici cereri HTTP dintr-o pagină web, fără a reîncărca întreaga pagină. Iniţial,
datele acestor mici cereri erau transferate de la client la server predominant în format XML, ceea
ce a dus la denumirea de AJAX (Advanced JavaScript And XML), deşi ulterior, pe măsură ce
limbajele de programare server-side au introdus suportul, a început să fie preferat standardul
JSON (obiecte JavaScript serializate).
Pe partea de server, CGI a fost urmat de apariţia specificaţiei Java Servlet, inclusă apoi
în Java Enterprise Edition, ceea ce a făcut ca Java să devină limbaj de programare dominant în
cadrul aplicaţiilor web pe partea de server. Alte limbaje de programare dedicate programării
server-side au fost ASP (dezvoltat de Microsoft) şi PHP (proiect open-source), şi apoi Ruby.
Anii 2010 au adus o mult-aşteptată extindere a standardului HTML, cu HTML5, care
impune browserelor implementarea internă a multor funcţionalităţi care până atunci fuseseră
apanajul exclusiv al pluginurilor dezvoltate de terţi, iar dezvoltarea explozivă a smartphone-
urilor a dus mai întâi la o lipsă de browsere web cu funcţionalităţi similare celor pentru
calculatoare şi deci la dezvoltarea de aplicaţii client dedicate fiecărei aplicaţii web.

Întocmit expert elaborare material didactic Ciolea Daniela 37


Avizat manager de proiect

Dezvoltare web / programare aplicatii software


Mai e putin pana cand tehnologia va face parte din ADN-ul nostru. Glumim, sau poate
ca nu suntem departe de adevar. Odata cu dezvoltarea si lansarea intr-un ritm alert a tuturor
gadgeturilor actuale, smartphone-uri, tablete, notebookuri, website-urile si aplicatiile online au
trebuit sa se adapteze noilor realitati in miscare si nu doar ca moft, ci ca necesitate.
Clientul tinta este in miscare astfel incat, este nevoie ca produsul sau serviciul sa il
urmeze, sa ii fie disponibil, functional si la indemana. In functie de cerintele proiectului Dvs,
echipa noastra dezvolta si programeaza aplicatii software moderne, orientate web, dinamice,
fiabile si scalabile:
• cu sau fara baze de date, folosind tehnologii responsive, in functie de
ecranul de pe care sunt accesate (desktop, notebook, tableta, smartphone);
• accesibile printr-un browser web, online indiferent de sistemul de operare;
• avand acces utilizatori pe baza unor credentiale aflate in administrarea
clientului;
• sigure, testate in diverse scenarii, fara brese de securitate (SQL / HTML
injection, XSS, etc);
• cu sistem (CMS content management sistem) de management al
continutului pentru o actualizare si intretinere usoara a continutului;
• modulare pentru a permite o dezvoltare software ulterioara, cuprinsa in
specificatia curenta;
• cu integrarea unor alte aplicatii web (chat, formuri, fluxuri de informatii,
analytics, api), pentru import sau export de date (offline sau sicronizate) ;
• cu procesarea diverselor formate de date (text, imagine, fisiere multimedia
audio – video sau alte tipuri de fisiere);
• pe baze de date compatibile cu cele deja folosite de client in vederea unei
posibile interconectari cu alte aplicatii (CRM, ERP, facturare, contabilitate, etc);
• monitorizate cu un sistem de log-uri de acces si rapoarte de activitate,
trafic, accesari etc.
• avand sisteme de back-up local si / sau extern.
Dezvoltam aplicatii software complexe folosind in principal mediul LAMP (Linux /
Apache / PHP / MySQL - MariaDB); clientii beneficiaza astfel de cateva avantaje foarte
importante: costuri reduse de licentiere terte, costuri mici de intretinere infrastuctura hardware,
costuri reduse pentru dezvoltari software ulterioare; aplicatiile web dezvoltate de noi folosesc
platforme hardware cu performante uzuale la preturi rezonabile.
Întocmit expert elaborare material didactic Ciolea Daniela 38
Avizat manager de proiect

Aplicatiile software pot fi portate pe majoritatea tipurilor de baze date relationale:


Microsoft SQL, SQLlite, PostgreSQL, ORACLE, etc.
Pentru programarea web site-urilor folosim: HTML, CSS, Java script, Ajax, JQuery,
BootStrap.
Instalari si personalizari aplicatii si scripturi Open Source (GPL)
Un serviciu important pentru un numar mare de clienti (parte acum din serviciile
noastre curente de dezvoltare web) il reprezinta instalarea si adaptarea unei platforme web
(impreuna cu module, ad-on-uri si scripturi specializate) open source din urmatoarele categorii:
• e-commerce / magazin virtual: Magento, Prestashop, OSC, ZenCart,
Opencart;
• blog, site prezentare, CMS – Wordpress, Joomla, Typoo 3, Drupal,
Episerver
• forum – PHPBB, SMF, vBulletin;
• WiKi, chat online

Întocmit expert elaborare material didactic Ciolea Daniela 39


Avizat manager de proiect

Întocmit expert elaborare material didactic Ciolea Daniela 40


Avizat manager de proiect

Întocmit expert elaborare material didactic Ciolea Daniela 41


Avizat manager de proiect

Întocmit expert elaborare material didactic Ciolea Daniela 42


Avizat manager de proiect

Întocmit expert elaborare material didactic Ciolea Daniela 43


Avizat manager de proiect

Întocmit expert elaborare material didactic Ciolea Daniela 44


Avizat manager de proiect

Întocmit expert elaborare material didactic Ciolea Daniela 45


Avizat manager de proiect

Întocmit expert elaborare material didactic Ciolea Daniela 46


Avizat manager de proiect

Întocmit expert elaborare material didactic Ciolea Daniela 47


Avizat manager de proiect

Întocmit expert elaborare material didactic Ciolea Daniela 48


Avizat manager de proiect

Întocmit expert elaborare material didactic Ciolea Daniela 49


Avizat manager de proiect

Tehnologii WEB
1. Obiectivul lucrării
Obiectivul lucrării este de a prezenta tehnologiile Java pentru implementarea de aplicaţii web.
2. Tehnologia Java Servlet
Pe măsură ce Web s-a dezvolat şi a început să fi utilizat pentru oferirea de servicii, a
apărut necesitatea de a construi pagini cu conţinut dinamic. Applet-urile reprezintă un exemplu
de tehnologie, ce utilizează platforma clientului pentru a oferi un conţinut dinamic.
La nivelul serverelor de web, printre primele tehnologii folosite pentru creare de conţinut
dinamic a fost Common Gateway Interface (CGI). Ulterior au apărut şi s-au dezvoltat tehnologii
similare (PHP, ASP) care oferă metode pentru construirea de pagini ce permit interacţiunea cu
utilizatorul. Tehnologia propusă de firma SUN pentru construirea de pagini cu conţinut dinamic
este tehnologia Servlet. Această tehnologie este bazată pe limbajul Java, componentele de
timp servlet fiind implementate în acest limbaj. Bazat pe tehnologia Servlet s-au dezvoltat
ulterior tehnologii ca Java Server Pages (JSP) şi Java Server Faces (JSF) -ambele destinate
construirii de pagini cu conţinut dinamic.
Un servlet reprezintă o componentă web , gestionată de un container , care generează
conţinut dinamic. Servlet-urile sunt clase java, ce oferă independenţă de platformă şi
sunt incărcate şi executate dinamic de către server. Servlet-urile comunică cu clienţii pe baza
paradigmei cerere – raspuns. Acest model cerere – raspuns se bazează de obicei pe
protocolul Hypertext Transport Protocol (HTTP).
Containerul de servleturi este o componentă ce oferă servicii de reţea prin intermediul
cărora servleturile primesc şi transmit cereri şi răspunsuri de la şi către clienţi. Containerul
de servleturi înmagazinează servleturile şi este responsabil pentru gestionarea acestora. Un
container poate exista în cadrul unui server web sau poate fi adăugat ulterior utilizând
mecanismul de extensie al serverului.

Întocmit expert elaborare material didactic Ciolea Daniela 50


Avizat manager de proiect

Exemplu: Un program client (web browser) accesează un server web şi transmite o cerere
HTTP (poate fi de exemplu un form completat cu datele unei persoane). Acceastă cerere este
preluată de către serverul de web şi în cazul în care este destinată unui servlet, este transmisă mai
departe către containerul de servleturi. Containerul determină cărui servlet îi este adresată
cererea şi va invoca respecivul servlet, transmiţînd-ui ca parametri două obiecte cerere (request)
şi raspuns (response).
Servletul va utiliza obiectul request pentru a determina cererea făcută de clientul web.
După realizarea operaţiilor necesare (de exemplu scrierea sau citirea unor date dintr-o bază de
date), servletul va tansmite către client un raspuns prin intermediul obiectului response.
In continuare este prezentată structura de bază a unui servlet.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class UnServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
PrintWriter out;
String title = "Simple Servlet ";
//seteaza tipulcontinutului
response.setContentType("text/html");
// trmite rasuns catre client
out = response.getWriter();
out.println("<HTML><HEAD><TITLE>");
out.println(title);
out.println("</TITLE></HEAD><BODY>");
out.println("<H1>" + title + "</H1>");
out.println("<P>Raspuns de la UnServlet.");
out.println("</BODY></HTML>");
out.close();
}
}
Pentru a construi un servlet care lucrează prin protocolul HTTP trebuie extinsă
clasa HttpServlet. In continuare este suprascrisă metoda doGet(…) pentru a prelucara cereri
GET. De asemenea poate fi rescrisă şi metoda doPost pentru a prelucra cereri POST.

Întocmit expert elaborare material didactic Ciolea Daniela 51


Avizat manager de proiect

Metodele doGet() şi doPost () primesc ca argumente doua obiecte: HttpServletRequest şi


HttpServletRespons. Obiectul HttpServletRequest este utilizat pentru a determina cererea pe care
a făcut-o clientul (datele din FORM, header HTTP etc.). Pentru aceasta clasa pune la dispoziţie
metode cum ar fi: getHeaders(), getMethod(), getPathInfo(), getParameter(), getInputStream(),
getReader().
Obiectul HttpServletResposn este utizat pentru a transmite raspunsul către client. Acesta
conţine metodele necesare pentru a stabili headerul, tipul de raspuns şi pentru a obţine fluxul de
ieşire prin intermediul căruia răspunsul este transmis către client.Clasa pune la dispoziţie metode
cum ar fi: setHeader(), setStatus(), getWriter, getOutputStream() etc.
Observaţie: Metodele doGet() şi doPost() sunt apelate de către metoda service(), şi există
posibilitatea să se rescrie metoda service(), prin intermediul acesteia fiind prelucrate atât cererile
POST cât şi cererile GET.
Diferenta dintre metodele doGet() si doPost():
DoGet DoPost
In doGet Method the parameters are In doPost, parameters are sent in separate
appended to the URL and sent along with line in the body
header information
Maximum size of data that can be sent using There is no maximum size for data
doget is 240 bytes
Parameters are not encrypted Parameters are encrypted
DoGet method generally is used to query or Dopost is generally used to update or post
to get some information from the server some information to the server
DoGet is faster if we set the response content DoPost is slower compared to doGet since
length since the same connection is used. doPost does not write the content length
Thus increasing the performance
DoGet should be idempotent. i.e. doget This method does not need to be idempotent.
should be able to be repeated safely many Operations requested through POST can have
times side effects for which the user can be held
accountable, for example, updating stored
data or buying items online.
DoGet should be safe without any side This method does not need to be either safe
effects for which user is held responsible

Întocmit expert elaborare material didactic Ciolea Daniela 52


Avizat manager de proiect

Ciclul de viata a unui servlet cuprinde următoarele etape:


1. creare şi iniţializare servlet. In momentul în care un servlet este încărcat în memorie va fi
apelată metoda init(ServletConfig cfg)
2. preluare si deservire cereri sosite de la clienti
3. distrugere servlet si eliberare memore. In momentul în care un servlet este distrus va fi
apelată metoda destroy()
In momentu în care un servlet este invocat pentru prima dată containerul
de servleturi va încărca o instanţă a acestui servlet în memorie. Această instanţă va prelua
şi deserv toate cererile ce sosesc de la clienţi pentru acest servlet. Existenţa unei singure instanţe
a unui servlet în memorie, ce deserveste toţi clienţii prezintă avantaje prin faptul că:
• reduce memoria ocupată de servlet-uri
• micşorează timpul de răspuns şi resursele de procesor cerute pentru deservirea
unui client de către un servlet, deoarece nu trebuie construită câte o instanţă
a servletului pentru fiecare cerere a unui client
• La iniţializare, un servlet poate iniţializa toate resursele de care are nevoie,
acestea persistând pe parcursul apelurilor de la diverşi clienţi. Un exemplu este
iniţializarea unei conexiuni la baza de date ce mai apoi poate fi reutilizată pentru a
deservi toţi clienţii
Pentru a demonstra persistenţa unui servlet se construieşte următorul servlet:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SimpleCounter extends HttpServlet {

int count = 0;
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/plain");

Întocmit expert elaborare material didactic Ciolea Daniela 53


Avizat manager de proiect

PrintWriter out = res.getWriter();


count++;
out.println("Since loading, this servlet has been accessed " +
count + " times.");
}
}
Servletul va fi încărcat în memorie la prima invocare a acestuia de către un client, după
care această instanţă creată va deservi toţi clienţii. Din punctul de vedere al programatorului
unui servlet, fiecare client poate fi văzut ca un nou thread ce apelează
metodele service(), doGet() sau doPost().
Marea majoritatea a containerelor de servleturi permit comunicarea între servlet-
urile încărcate în memorie, astfel încât o cerere transmisă către un servlet poate
fi redirectată către un alt servlet, pagina de răspuns fiind transmisă către client de
ultimul servlet din lanţ.

3. Compilarea şi instalarea unui servlet


Modul de instalarea a unui servlet variază în funcţie de containerul de servleturi folosit.
În cadrul acestui laborator se va folosi containerul de servleturi Apache Tomcat 5.5. Deoarece în
cadrul laboratorului se lucrează cu mediul de dezvoltare Eclipse, în cadrul acestuia a fost
instalat plugin-ul Sysdeo Tomcat Launcher
(http://www.sysdeo.com/sysdeo/eclipse/tomcatplugin).
Acest plugin ofere posibilitatea de startare\restartare a serverului Tomcat direct din
mediul Eclipse, de asemenea oferă wizard pentru construirea de proiect pentru aplicaţie
cu Servleturi şi permite testarea servlet-urilor direct din mediul Eclipse.
Paşii necesati pentru a construi un proiect de tip Tomcat
1. Se creează un proiect in eclipse de tip Tomcat. Se selectează File > New > Project. Se
alege opţiunea Tomcat Project.

Întocmit expert elaborare material didactic Ciolea Daniela 54


Avizat manager de proiect

2. La pasul următor se setează numele proiectului ServletTest.


3. La pasul următor se setează in campul Context Name: /ServletTest. Se lasă bifată
căsuţa Can update server.xml file. Se apasă butonul Finish. In acest moment un proiect
de tip Tomcat este creat in cadrul mediului Eclipse.
4. Se adaugă in cadrul proiectului următoarea clasă
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class UnServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
PrintWriter out;
String title = "Simple Servlet ";
//seteaza tipulcontinutului
response.setContentType("text/html");
// trmite rasuns catre client
out = response.getWriter();
out.println("<HTML><HEAD><TITLE>");
out.println(title);
out.println("</TITLE></HEAD><BODY>");
out.println("<H1>" + title + "</H1>");
out.println("<P>Raspuns de la UnServlet.");
out.println("</BODY></HTML>");
out.close();
}
}
5. In directorul WEB-INF din cadrul proiectului se adaugă fişierul web.xml cu următorul
conţinut
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>UnServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>

Întocmit expert elaborare material didactic Ciolea Daniela 55


Avizat manager de proiect

<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
6. Se compilează aplicaţia
7. Click dreapta pe numele proiectului si din meniul contextual se selectează
opţiunea Tomcat > Update context definition
8. Se startează Tomcat. Din meniul Tomcat se selectează opţiunea Start Tomcat
9. Se verifica funcţionarea servletului. Dintr-un browser se incarcă pagina
http://localhost:8080/ServletTest/hello
4. Aplicaţie cu servlet-uri
In cadrul acestei secţiuni este prezentată o aplicaţie simplificată, bazată pe servleturi pentru
realizarea unui magazin online. Sunt construite două servleturi, acestea fiind descrise
în listingul următor. Pe lângă servleturi, aplicaţia mai conţine o bază de date şi o pagină html.
Baza de date conţine un tabel ce are campurile produs, cantitate şi pret. In cadrul acestei
baze de date sunt memorate produsele ce sunt disponibile în cadrul magazinului online.
Pagina html conţine două formuri. Primul dintre ele conţine două câpuri text, şi un
buton submit, şi este utilizată pentru a transmite comenzi produs – cantitate
către servletul ServletChek. Cel de al doile form conţine un singur buton submit, ce este utilizat
pentru a transmite către ServletBuy comanda finală.
Servlet 1
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
/**
*
*/
public class ServletChek extends HttpServlet {
private static final String CONTENT_TYPE = "text/html";
private String dburl="jdbc:odbc:dbShop";
private Connection con;
private ArrayList cos;
private Statement st;
//metoda este apelata automat la prima apelare a servletului
public void init() throws ServletException {
try{

Întocmit expert elaborare material didactic Ciolea Daniela 56


Avizat manager de proiect

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection(dburl);
st = con.createStatement();
}catch(Exception e){e.printStackTrace();}
}
//Procesare cereri primite de la form-uri
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOExcep
tion {
HttpSession session = request.getSession(true);//.1
ArrayList cos = (ArrayList)session.getValue(session.getId());
if(cos==null) {
cos = new ArrayList();
session.setAttribute(session.getId(),cos); //.2
}
String r = null;
try{
String prod = request.getParameter("produs");
int cant =Integer.parseInt(request.getParameter("cantitate"));
if(comandaProdus(prod,cant)) {
r = "Comanda primita";
cos.add(prod+" "+cant);
}
else r = "Eroare receptionare comanda";
}catch(Exception e){r = "Eroare receptionare comanda";}
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>ServletChek</title></head>");
out.println("<body>");
out.println("<p>"+r+"</p>");
out.println("</body></html>");
}
boolean comandaProdus(String prod, int cant){
ResultSet rs=null;
try{
rs = st.executeQuery("SELECT CANTITATE FROM PRODUSE WHERE PRODUS = '"+prod+"'");
//verific daca produsul exista
if(rs.next()==false) return false;
int exista = rs.getInt("cantitate");
//cantiatea dorita este insuficienta
if((exista-cant)<0) return false;
Întocmit expert elaborare material didactic Ciolea Daniela 57
Avizat manager de proiect

//daca cantitatea este suficienta atunci se modifica cantitatea din baza de date
int cantNoua=exista-cant;
st.executeUpdate("UPDATE PRODUSE SET CANTITATE="+cantNoua+" WHERE PRODUS= '"+prod+"'");
}catch(Exception e){e.printStackTrace();return false;}
return true;
}
//Stergere resurse
public void destroy() {
try{
con.close();
con=null;
}catch(Exception e){e.printStackTrace();}
}
}
Servlet 2
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class ServletBuy extends HttpServlet implements SingleThreadModel {
private static final String CONTENT_TYPE = "text/html";
//Process the HTTP Get request
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOExcep
tion {
HttpSession session = request.getSession(true);
ArrayList cos = (ArrayList)session.getAttribute(session.getId()); //.3
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>ServletBuy</title></head>");
out.println("<body>");
if((cos==null)||(cos.size()==0)){
out.println("<p>Cosul este gol.</p>");
}
else
{
for(int i=0;i<cos.size();i++){
out.println("<p>Produs: "+(String)cos.get(i)+"</p>");
}
session.invalidate(); //.4

Întocmit expert elaborare material didactic Ciolea Daniela 58


Avizat manager de proiect

}
out.println("</body></html>");
}
}
Primul servlet are rolul de a prelua comenzile de la clienţi. Un client poate fi : un applet,
un alt program java (care comunică cu servletul utilizând protocolul HTTP sau un form din
cadrul unei pagin html.
In momentul în care servletul ServletChek primeşte o cerere POST sau GET, este
executată metoda service() care va prelucra respectiva cerere. O variantă alternativă este de a
implementa în cadrul servletului metodele doGet() şi doPost() pentru a prelucra separat cererile
GET şi POST.
In cadrul servletului ServletChek se utilizează un mecanism pentru memorarea unui set
cereri pe care un client le-a făcut (session tracking). Acest mecanism poartă numele de
memorarea sesiunii. Acest mecanism permite servletului să memoreze toate comenzile pe care
clientul le-a făcut pe parcursul unei seiuni de cumpărături.
Pentru urmărirea comenzilor unui client prima operaţie este de obţinerea a
obiectului HttpSession (1.). Dacă clientul a accesat pentru prima
dată servletul atunci getSession(true) creează un nou obiect sesiune şi este returnat (daca
parametrul este false atunci metoda returnează null).
Obiectul sesiune oferă posibilitatea de a adăuga in cadrul acestuia perechi nume –
valoare, unde nume este un String iar valoare este un obiect java (2.).
Memorarea sesiunii este un mecanism prin care servleturile din cadrul aceluiaşi container
pot comunica între ele pentru un anumit client . In linia (3) se observă modul în care pe baza
unui obiect sesiune, un servlet poate obţine o valoarea ataşată unui nume ( adăugarea s-a făcut în
(2) ).
O sesiune poate fi invalidată automat sau manual. Invalidarea automată se realizează de
către serverul de web când pentru o anumită perioadă de timp un client nu a mai făcut nici o
cerere. Invalidarea manuală se realizează de către servlet când, de exemplu clientul a terminat
sesiunea de cumpărături. Invalidarea unei sesiuni înseamnă eliminarea obiectului HttpSession şi
a perechilor nume – valoare asociate cu acesta. Acest lucru se realizeaza in cadrul programului
pe linia (4).
Observaţie: Mecanismul de memorare a sesiunii utilizează cookies pentru asocierea unui
utilizator cu un obiect sesiune. Dacă clientul nu suportă cookies sau are dezactivat acest

Întocmit expert elaborare material didactic Ciolea Daniela 59


Avizat manager de proiect

mecanism atunci exemplul anterior nu va mai funcţiona. In acest caz trebuie utilizat mecanismul
de rescriere a URL-urilor.
Cel de al doilea servlet (ServletBuy) realizează operaţiile finale în momentul în care un
client decide terminarea sesiunii de cumpărături. In cazul de faţă servletul verifică dacă clientul
are produse în coş sau nu are, după care realizează invalidarea sesiunii.
Pentru verificarea aplicaţiei prezentate anterior adiţional pe lângă cele
două servleturi trebuie construită baza de date ce va fi localizată pe acelaşi calculator
cu servleturile şi vor trebui realizate setările necesare pentru ca servleturile sa se poată conecta la
baza de date.
Listingul următor prezintă pagina html necesară pe partea de client.
<html>
<head>
<title>Magazin Online</title>
</head>
<body>
<p><font face="Courier">Magazin Online</font></p>
<form method="POST" action="servlet/ServletChek">
<p><b>
Produs: <input type="text" name="produs" size="20">
Cantitate:<input type="text" name="cantitate" size="20">
</b></p>
<p><input type="submit" value="Adauga Produs" name="B1"></p>
</form>
<form method="POST" action="servlet/ServletBuy">
<p><input type="submit" value="Trimite Comanda" name="B1"></p>
</form>
</body>
</html>
5. Java Server Pages (JSP)
Tehnologia JSP are la bază tehnologia servlet-urilor şi replică într-o mare măsură tehnologia
Active Server Pages (ASP) de la Microsoft.
În esenţă este vorba de posibilitatea de inserare de cod java în cadrul paginilor HTML. Codul
java este inclus între tagurile speciale <% şi %> .

O pagină HTML cu secvenţe de cod JSP arată astfel:


<HTML>
<HEAD><TITLE>Hello</TITLE></HEAD>
Întocmit expert elaborare material didactic Ciolea Daniela 60
Avizat manager de proiect

<BODY>
<H1>
<%
if (request.getParameter("name") == null) {
out.println("Hello World");
}
else {
out.println("Hello, " + request.getParameter("name"));
}
%>
</H1>
</BODY></HTML>
În momentul în care paginile JSP sunt încărcate, serverul (care găzduieşte paginile JSP)
va genera automat, compila, încărca şi rula servleturi speciale pentru a genera conţinutul dinamic
al paginii.

Servletul generat în fundal ca urmare a realizării cererii de încărcare a paginii prezentate


în listingul anterior arată astfel:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class _hello1_xjsp extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
BufferedReader in = request.getReader();
out.println("<HTML>");
out.println("<HEAD><TITLE>Hello</TITLE></HEAD>");
Întocmit expert elaborare material didactic Ciolea Daniela 61
Avizat manager de proiect

out.println("<BODY>");
out.println("<H1>");
if (request.getParameter("name") == null) {
out.println("Hello World");
}
else {
out.println("Hello, " + request.getParameter("name"));
}
out.println("</H1>");
out.println("</BODY></HTML>");
}
}
Prima încărcare a paginii JSP va dura mai mult deoarece serverul va trebui să genereze,
compileze şi să încarce servletul corespunzător.

Elementele unei pagini JSP


Codul JSP poate fi inserat în cadrul paginilor în trei moduri.
1. <%= expression %> în acest caz expresia este evaluată şi rezultatul este trimis către ieşire (afişare).
2. <% code %> acest cod este inserat în cadrul metodei service() corespunzătoare servletului ce va fi generat
pe baza paginii JSP.
3. <%! code %> astfel de declaraţii sunt folosite pentru a insera cod în cadrul servletului dar în afara oricărei
metode.
Expresii JSP
După cum s-a precizat expresiile sunt evaluate, convertite în şir de caractere şi trimise
către ieşire. De exemplu următoarea secvenţă va trimite către ecran timpul curent al sistemului.
Current time: <%= new java.util.Date() %>
Pentru lucrul cu expresii sunt câteva expresii care sunt predefinite şi pot fi folosite în
cadrul acestora. Cele mai importante sunt următoarele:
• request, reprezintă obiectul de tip HttpServletRequest;
• response, reprezintă obiectul de tip HttpServletResponse;
• session, reprezintă obiectul de tip HttpSession asociat cu obiectul request;
• out, reprezintă un obiect de tip PrintWriter ce poate fi folosit pentru trimiterea datelor
către ieşire.
Un alt exemplu:
Your hostname: <%= request.getRemoteHost() %>

Întocmit expert elaborare material didactic Ciolea Daniela 62


Avizat manager de proiect

Scripturi JSP
Paginile JSP permit inserarea de cod complex java prin intermediul tagurilor <% %>.
Câteva exemple:
<%
String queryData = request.getQueryString();
out.println("Attached GET data: " + queryData);
%>
<% if (Math.random() < 0.5) { %>
Have a <B>nice</B> day!
<% } else { %>
Have a <B>lousy</B> day!
<% } %>
if (Math.random() < 0.5) {
out.println("Have a <B>nice</B> day!");
} else {
out.println("Have a <B>lousy</B> day!");
}
Folosind tagurile <% %> se poate scrie cod mixt HTML şi java.

Declaraţii JSP
Declaraţiile permit definirea de metode sau atribute ce vor fi inserate în codul servletului ce va fi
generat pe baza paginii JSP ( în afara metodei service()).
Inserarea declaraţiilor se face cu tagurile <%! %>. Declaraţiile nu pot fi utilizate pentru a genera
direct text către ieşire standard. Exemplu:
<%! private int accessCount = 0; %>
Accesses to page since server reboot:
<%= ++accessCount %>

Directive JSP
Există două tipuri importante de directive ce pot fi utilizate în cadrul unei aplicaţii.
Directiva page permite definirea de importuri de pachete şi setarea a diferiţi parametri ai
clasei servlet ce va fi generate pe baza paginii JSP. Directiva include permite includerea de
fişiere în momentul în care este generat servletul asociat paginii JSP.
Ca şi exemplu directiva include poate fi folosite pentru a include o bară de navigaţie în
cadrul paginilor unui site:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

Întocmit expert elaborare material didactic Ciolea Daniela 63


Avizat manager de proiect

<HTML>
<HEAD>
<TITLE>Servlet Tutorial: JavaServer Pages (JSP) 1.0</TITLE>
<META NAME="author" CONTENT="webmaster@somesite.com">
<META NAME="keywords" CONTENT="...">
<META NAME="description" CONTENT="...">
<LINK REL=STYLESHEET
HREF="Site-Styles.css"
TYPE="text/css">
</HEAD>
<BODY>
<%@ include file="/navbar.html" %>
<!-- Part specific to this page ... -->
</BODY>
</HTML>

Exemplu pagina JSP


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Using JavaServer Pages</TITLE>
<META NAME="author" CONTENT="content xxx yyy zzz">
<META NAME="keywords"
CONTENT="JSP,JavaServer Pages,servlets">
<META NAME="description"
CONTENT="A quick example of the four main JSP tags.">
<LINK REL=STYLESHEET
HREF="My-Style-Sheet.css"
TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FDF5E6" TEXT="#000000" LINK="#0000EE"
VLINK="#551A8B" ALINK="#FF0000">
<CENTER>
<TABLE BORDER=5 BGCOLOR="#EF8429">
<TR><TH CLASS="TITLE">
Using JavaServer Pages</TABLE>
</CENTER>
<P>
Some dynamic content created using various JSP mechanisms:
<UL>

Întocmit expert elaborare material didactic Ciolea Daniela 64


Avizat manager de proiect

<LI><B>Expression.</B><BR>
Your hostname: <%= request.getRemoteHost() %>.
<LI><B>Scriptlet.</B><BR>
<% out.println("Attached GET data: " +
request.getQueryString()); %>
<LI><B>Declaration (plus expression).</B><BR>
<%! private int accessCount = 0; %>
Accesses to page since server reboot: <%= ++accessCount %>
<LI><B>Directive (plus expression).</B><BR>
<%@ page import = "java.util.*" %>
Current date: <%= new Date() %>
</UL>
</BODY>
</HTML>

JDBC & Hibernate


Obiective
Scopul acestui laborator este experimentarea unor mecanisme de acces la baze de date.
Subiecte atinse:
§ JDBC

§ Façade Pattern

§ Hibernate

JDBC
JDBC (Java Database Connectivity) reprezinta infrastructura oferita de Java pentru accesarea
bazelor de date. Vom folosi MySQL drept motor. Puteti descarca jar-ul driver-ului MySQL
(Connector/J).
Utilizare de baza
Incarcarea driver-ului
Pentru fiecare motor de baze de date, fabricantul pune la dispozitie o clasa driver. In cazul
MySQL aceasta se numeste com.mysql.jdbc.Driver, si se gaseste in jar-ul mentionat mai
sus. Incarcarcarea driver-ului in sistem se face printr-un apel:

Class.forName("com.mysql.jdbc.Driver");

Stabilirea conexiunii
Pasul urmator este obtinerea unei conexiuni (obiect Connection) la baza de date, cu precizarea:
§ adresei server-ului

Întocmit expert elaborare material didactic Ciolea Daniela 65


Avizat manager de proiect

§ numelui bazei de date

§ utilizatorului

§ parolei

String url = "jdbc:mysql://121.0.0.1:3306/mydatabase";


Connection conn = DriverManager.getConnection(url, name, pass);

Se observa formatul url-ului de mai sus:


§ 3306 este portul default pe care asculta un server MySQL

§ numele bazei de date se gaseste la sfarsitul adresei

Metoda DriverManager.getConnection va incerca depistarea unui driver, dintre cele incarcate in


sistem, capabil sa interpreteze url-ul primit.
Executarea query-urilor
Pentru executarea de query-uri trebuie create obiecte Statement, pe baza unei conexiuni
existente. Acestea sunt de 2 tipuri:

Statement simpleStatement = conn.createStatement();


PreparedStatement preparedStatement = conn.prepareStatement("SELECT * FROM stud
WHERE mark > ? AND age = ?");

Diferenta intre un statement simplu si unul prepared este ca, in cel de-al doilea caz, se poate
preciza, de la bun inceput, un tipar parametrizat al unui query (semnele de intrebare tin locul
unor valori nespecificate). Executia query-urilor se face in felul urmator:

// simple statement
ResultSet rs = simpleStatement.executeQuery("SELECT * FROM stud");
// prepared statement
preparedStatement.setInt(1, 5); // first question mark
preparedStatement.setInt(2, 9); // second question mark
ResultSet rs = preparedStatement.executeQuery();

Se observa ca, in cazul PreparedStatement, este suficienta precizarea valorilor lipsa, in timp ce,
pentru un Statement obisnuit, trebuie specificat intregul query.
Atentie! Numerotarea liniilor si coloanelor incepe intotdeauna de la 1, nu de la 0!
Iterarea si modificarea inregistrarilor
Rezultatele unui query sunt, de obicei, depuse intr-un obiect ResultSet. Aceasta are
un cursor asociat, ce indica inregistrarea curenta. Initial, cursorul este situat inaintea primei
inregistrari, asemanator cu iteratorii pe colectii. O secventa tipica de accesare este:
Întocmit expert elaborare material didactic Ciolea Daniela 66
Avizat manager de proiect

while (rs.next()) {
int age = rs.getInt("Age");
int mark = rs.getInt(2);
String name = rs.getString(1);
}

Se observa:
§ metoda next avanseaza cursorul si intoarce false daca s-a depasit ultima inregistrare

§ exista diferite metode de acces la coloanele inregistrarii curente:

§ coloana poate fi referita prin indice (>= 1 !) sau prin nume


§ valorile pot fi interpretate diferit: ca numere, siruri etc
Un ResultSet permite modificarea directa a valorilor din baza de date:

rs.updateInt(1, 23);
rs.updateInt(2, 45);
rs.updateRow(); // NECESAR!!!

Metodele updateInt, updateString etc. sunt complementare metodelor get*, si actioneaza doar
asupra inregistrarii curente (indicata de cursor).
Atentie! Metodele update* fac doar modificari locale, asupra ResultSet-ului.
Pentru sincronizarea cu baza de date este necesar apelul updateRow!
Puteti obtine metainformatii despre un ResultSet apeland metoda getMetaData. Acestea includ,
printre altele, numarul coloanelor, numele si tipul fiecareia.
Row sets
RowSet-urile (a nu se confunda cu ResultSet-urile, cu toate ca prima categorie deriva din a
doua) reprezinta wrapper-e pentru ResultSet-urile clasice. Ele pot gestiona, intern, conexiunea
cu baza de date, astfel incat utilizatorul sa nu mai fie nevoit sa initializeze explicit conexiuni.
Sunt de 2 tipuri:
§ connected: pastreaza in permanenta o conexiune la baza de date

§ disconnected: sunt capabile sa lucreze asupra unei copii locale si sa se sincronizeze cu

baza de date in anumite momente.


Vom folosi implementarea JdbcRowSetImpl, avand proprietatea connected. Iata o secventa
tipica:

RowSet rs = new JdbcRowSetImpl(url, user, pass);


rs.setCommand("SELECT * FROM stud"); // permite si varianta prepared!

Întocmit expert elaborare material didactic Ciolea Daniela 67


Avizat manager de proiect

rs.execute();
while (rs.next()) {
...
}

Se observa:
§ obiectul RowSet primeste direct informatiile de conectare

§ cum interfata RowSet deriva din ResultSet, rezulta ca se poare itera direct pe ea (ca pe

orice alt ResultSet).


Façade Pattern
Design pattern-ul Façade urmareste ascunderea unor detalii complexe in spatele unei interfete
simplificate. Un astfel de exemplu il constituie clasele RowSet, care ascund folosirea de
obiecte Connection si Statement. Veti avea ocazia sa experimentati acest model in cadrul task-
urilor.
Hibernate
Lucrul cu software orientat obiect si baze de date relationale poate fi time-consuming si
poate cauza diverse erori datorita diferentelor dintre reprezentarea datele in baza de date si
modelarea lor in obiecte.
Hibernate este o biblioteca ORM()Object-Relational Mapping) pentru limbajul Java, utila
pentru maparea modelului orientat pe obiecte peste bazele de date relationale. Principalul atu al
acestei librarii este faptul ca ofera o solutie rapida, de inalta performanta, independenta de tipul
bazei de date folosite pentru modelarea obiectelor unei baze relationale.
Aceasta tehnologie este free si open source, distribuita sub licenta GNU Lesser General
Public License.
Principala caracteristica a Hibernate este maparea intre clasele Java si tabelele bazelor de
date precum si intre tipurile de date Java si SQL. Hibernate pune la dispozitie posibilitatea
redactarii de query-uri si data-retrieval.
Mapari
Maparea claselor Java pe tabele dintr-o baza relationala se realizeaza prin configurarea unui
fisier XML sau prin folosirea de adnotari Java. Atunci cand se alege prima varianta, Hibernate
poate genera un schelet de cod pentru clasele persistente. Daca se folosesc adnotarile Java acest
lucru nu mai este necesar. Hibernate poate folosi oricare dintre cele doua variante pentru a
mentine schema bazei de date.

Întocmit expert elaborare material didactic Ciolea Daniela 68


Avizat manager de proiect

Hibernate ofera posibilitatea de a realiza relatii unu-la-unu sau multi-la-multi intre clase. De
asemenea se pot realiza asocieri reflexive intre un obiect si mai multe instance din acelasi timp,
relatie de tip unu-la-multi.
Configurarile necesare pentru lucrul cu Hibernate se realizeaza in fiserul hibernate.cfg.xml.
Acest fisier contine informatii pentru realizarea conexiunii JDBC precum:
§ propietati - property

§ connection.driver_class
§ connection.url
§ connection.username
§ connection.password
§ connection.pool_size - folosit pentru configurarea pool-ului
§ dialect - specifica dialectul pe care Hibernate o va converti
§ hbm2ddl.auto - activeaza generarea schemei bazei de date direct in baza
§ mapari persistente pentru clasele POJO - mapping

§ class - numele clasei mapate referitor la pachetul in care se afla


§ resource - localizeaza clasa folosind java.lang.ClassLoader
Un exemplu de fisier de configurare este ilustrat mai jos:

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD
3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="">
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">student</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/idp9</property>
<property name="hibernate.connection.username">student</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- mappings for POJO classes -->
<mapping class="mappings.Stud" resource="mappings/Stud.hbm.xml"/>
<mapping class="mappings.Subject" resource="mappings/Subject.hbm.xml"/>
</session-factory>
</hibernate-configuration>

Întocmit expert elaborare material didactic Ciolea Daniela 69


Avizat manager de proiect

Migrarea unei aplicatii Java care foloseste Hibernate pentru lucrul cu baze relationale la
un alt timp de baza(eg. Oracle → Postgresql), se face realizand configurarile necesare in acest
fisier.
Pentru maparea unei tabele din baza de date este necesar de un fisier de
mapare .hbm.xml (resursa setata in fisierul de configurare care ofera metadatele necesare
incarcarii si stocarii de obiecte persistente din clasa mapata) :

<hibernate-mapping package="mappings">
<class catalog="idp9" name="Stud" table="stud">
<!-- primary key -->
<id name="id" type="java.lang.Integer">
<column name="id"/>
<generator class="identity"/>
</id>
<property generated="never" lazy="false" name="name" type="string">
<column length="45" name="name" not-null="true"/>
</property>
<property generated="never" lazy="false" name="mark" type="int">
<column name="mark" not-null="true"/>
</property>
</class>
</hibernate-mapping>

Elementul de tip class specifica numele clasei mapate, iar impreuna cu


atributul package al hibernate-mapping specifica unde se gaseste clasa care va fi mapata pe
tabela. Tabela din baza care contine datele pentru aceasta entitate este specificata prin
atributul table.
Pentru maparea valorilor coloanelor din baza relationala, Hibernate ofera mai multe
posibilitati:
§ Suprascrierea tipurilor default pe care le foloseste Hibernate pentru maparea unei coloane

pe o propietate
§ Maparea unei enumerari Java pe coloane, asemeni unor propietati normale

§ Maparea unei propietati pe mai multe coloane

Pentru maparea cheilor primare ale tabelelor se foloseste conventia:

<id name="id" type="java.lang.Integer">


Întocmit expert elaborare material didactic Ciolea Daniela 70
Avizat manager de proiect

<column name="event_id"/>
<generator class="identity"/>
</id>

Elementul id identitifica coloana event_id din tabela ca si cheie primara. Aceastea


identifica de asemenea propietatea id a clasei care continand valoarea de identificare.
Elementul generator aflat in interiorul elementului id informeaza Hibernate care este strategia
de generare a cheilor primare pentru aceasta entitate. In acest exemplu, se foloseste identity care
foloseste o simpla incrementare a valorii cheii primare. Acelasi rezultate poate fi obtinut cu
valoarea increment.
Pentru maparea propietatilor se foloseste conventia:

<property name="date" type="timestamp" column="EVENT_DATE"/>


<property name="title"/>

Cele doua elemente declara doua proietati ale clasei: date si title.
Propietatea date include atributul column. In absenta lui, se va considera ca numele coloanei
este acelasi cu numele propietatii entitatii.
Propietatea title nu are specificatorul de tip si nici numele coloanei pe care se mapeaza.
Tipurile declarate si folosite in fisierele de mapare nu sunt tipuri Java sau tipuri SQL. Hibernate
va incerca sa determine care este conversia corecta si sa mapeze tipurile in mod autonom data
specificatorul de tip lipseste.Pentru aceasta, Hibernate foloseste Java reflection pentru a
determina tipul Java al propietati declarate, folosind o mapare default pentru tipul gasit.
In unele cazuri, detectia automata nu va gasi varianta cea mai buna, precum in exemplul
de mai sus. Hibernate nu poate sti daca propietatea de tip java.util.Date se va mapa
pe SQL DATE, TIME, sau TIMESTAMP.Valorile de data si timp sunt convertite corect daca
se foloseste o mapare pe tipul timestamp care identifica o instanta a
clasei org.hibernate.type.TimestampType.
Hibernate ofera un tool foarte util numit hibernate-tools capabil sa genereze clasele POJO si
fisierele de mapari corespunzatoare tabelelor unei baze de date folosind procesul de reverse-
engineering.
Persistenta
Hibernate ofera suport de persistenta pentru Plain Old Java Objects(POJOs).
Clasele POJO folosesc conventia de nume JavaBeans pentru getters, setters iar campurile interne
se recomanda sa abia modificatorul de acces private.

Întocmit expert elaborare material didactic Ciolea Daniela 71


Avizat manager de proiect

O cerinta pentru ca o clasa sa fie persistenta este existenta constructorului default (fara
argumente), deoarece Hibernate se va folosi de acesta pentru a crea obiecte folosind Java
Reflection. Constructorul poate fi private, dar pachetul sau visibilitatea trebuie sa permita
generarea de proxy-uri la runtime si de asemenea accesarea datelor fara folosirea de metode de
bytecode instrumentation.
Colectiile de date sunt stocate in obiecte Java precum Set, List. Genericele, introduse in
Java 5, sunt de asemenea suportate. Hibernate by default (incepand cu Hibernate 3) foloseste
metoda de lazy load a colectiilor.
Pentru obiectele „inrudite“ se pot configura operatii in cascada de la unul la altul. De
exemplu, un obiect de tip Album poate fi configurat ca operatiile de save si/sau delete aplicate pe
aceasta clasa sa se apeleze in cascada pe obiectele copil de tip Track.
Integrare
Hibernate este disponibil pe SourceForge in format ZIP si TGZ. Pentru download,
accesati hibernate 3.
Hibernate3.jar este o agregare a tutturor claselor Hibernate si trebuie inclus pe classpath-
ul proiectului pentru a putea folosi obiecte Hibernate.
Directorul lib/required/ contine jar-urile necesare functionarii corecte a lui Hibernate, si
trebuie de asemenea sa se alfe pe classpath-ul proiectului.
Directorul /lib/jpa/ contine jarul pentru JPA API. Acesta este necesar daca in proiect folositi
adnotari JPA sau elemente ale API-ului JPA.
Hibernate Query Language
Hibernate ofera un limbaj de lucru cu bazele de date relationale inspirat din SQL numit
Hibernate Query Language. Acest limbaj permite scrierea de queriuri asemenea
limbajul SQL care se vor aplica pe obiectele Hibernate.
Obiectele de tip Criteria Queries sunt varianta orientata obiect a lui HQL.
Sintaxa HQL este foarte asemanatoare cu cea SQL:

SELECT mate
FROM Cat AS cat
INNER JOIN cat.mate AS mate

Entitati si componente
In Hibernate, o entitate este un obiect stand-alone care poate fi manipulat independent de
alte obiecte.

Întocmit expert elaborare material didactic Ciolea Daniela 72


Avizat manager de proiect

In contrast cu entitatea, o componenta este subordonata unei entitati si poate fi manipulata


doar prin intermediul acesteia. Spre exemplu, un obiect de tip Album poate reprezenta o entitate
dar obiectele de tip Track asociate cu obiectele Album reprezinta o componenta a
entitatii Album, inseamnand ca pot fi salvate sau obtinute doar prin intermediul obiectelor de tip
Album.
Application programming interface
API-ul Hibernate se afla in pachetul org.hibernate.
org.hibernate.SessionFactory interface
Obiectele de tip SessionFactory sunt thread-safe si imutabile. Acestea folosesc la crearea de noi
sesiuni Hibernate. De regula, se foloseste o singura instanta de clasa care implementeaza aceasta
interfata (de regula expusa cu design patternul Singleton).
Pentru obtinerea unui obiect de tip session Factory:

// un obiect de tip session factory se seteaza o singura data pentru intreaga aplicatie
sessionFactory = new Configuration()
.configure() // realizeaza setarile corespunzatoare fisierului de configurare
hibernate.cfg.xml
.buildSessionFactory();

org.hibernate.Session interface
Obiectele de tip Session sunt destinate folosirii pe durata unei tranzactii logice asupra unei
baze de date si simbolizeaza o sesiune Hibernate. Nu sunt thread-safe si nu se recomanda
folosirea lor de mai multi clienti simultan.
Sesiunea Hibernate permite managementul starii de persistenta a obiectelor - transient,
persisted, detached, realizarea de query-uri si tranzactii.
Lucrul cu sesiunile Hibernate este destul de intuitiv:

Session session = sessionFactory.openSession();


//....
session.close();

Pentru a folosi tranzactii, se poate folosi sesiunea obtinuta mai sus:

//...
session.beginTransaction();
//do something

Întocmit expert elaborare material didactic Ciolea Daniela 73


Avizat manager de proiect

session.getTransaction().commit();
//...

Pentru realizarea unui query pe baza de date, folosind modelul orientat obiect se procedeaza in
felul urmator:

List<?> result = session.createCriteria(Cat.class).list();

Daca query-ul are un singur rezultat, se poate folosi metoda uniqueResult in locul lui list.
Pentru obtinerea unui anume numar de intrari din baza se pot folosi
metodele: setFirstResult pentru setarea indexului de la care se doreste vizualizarea rezultatului
si setFetchSize.
Pentru a impune restrictii asupra unui query Hibernate pune la dispozitie mai multe
posibilitati printre care: Restrictions, Projections, DetachedCriteria (pentru inner join).
Un exemplu de folosire a restrictiilor este ilustrat mai jos:

List cats = session.createCriteria(Cat.class)


.add( Restrictions.like("name", "Iz%") )
.add( Restrictions.gt( "weight", new Float(minWeight) ) )
.addOrder( Order.asc("age") )
.list();
//or
List cats = session.createCriteria(Cat.class)
.createCriteria("kittens")
.add( Restrictions.like("name", "Iz%") )
.list();

Pentru utilizarea proiectiilor, se procedeaza in felul urmator:

List cats = session.createCriteria(Cat.class)


.setProjection( Projections.projectionList()
.add( Projections.rowCount() )
.add( Projections.avg("weight") )
.add( Projections.max("weight") )
.add( Projections.min("weight") )
.add( Projections.groupProperty("color") )
)
Întocmit expert elaborare material didactic Ciolea Daniela 74
Avizat manager de proiect

.addOrder( Order.asc("color") )
.list();

Resurse utile
§ Download Connector/J

§ Tutorial JDBC

§ Tutorial RowSet

§ Façade Pattern

§ Object-relational mapping

§ Hibernate

§ Hibernate Query Language

§ Hibernate 3 download

§ Singleton pattern

Întocmit expert elaborare material didactic Ciolea Daniela 75


Avizat manager de proiect

BIBLIOGRAFIE

1. Al-Jarf A, Sado R., Effect of on-line learning on struggling ESL college writers, Proc.
National Educational Computing Conference, San Antonio, TX, 2002.
2. Boles D.W., Google Apps Administrator Guide A Private-Label Web Workspace, 1st
edition, Course Technology Press, 2007
3. Jim Farley, William Crawford, Java Enterprise in a Nutshell, 3rd Edition, O'Reilly
Media, 2005
4. Mike Keith, Merrick Schincariol, Pro JPA 2, 2nd Edition, Apress, 2013, ISBN:
9781430249269
5. Clarence Ho, Rob Harrop, Pro Spring 3, Apress, 2012, ISBN: 9781430241072
6. Willie Wheeler with Joshua White, Spring in Practice, 2012, Manning Publications Co,
ISBN: 9781935182054
7. D. Acostachioaie, Securitatea sistemelor Linux, Polirom, Iași, 2003
8. S. Buraga, Proiectarea siturilor Web (editia a doua), Polirom, Iași, 2005:
http://www.infoiasi.ro/~design
9. S. Buraga (coord.), Aplicații Web la cheie, Polirom, Iași, 2003:
http://www.infoiasi.ro/~phpapps
10. S. Garfinkel, G. Spafford, Web Security, Privacy and Commerce, O’Reilly, 2001
11. J. Long, Google Hacking for Penetration Testers, Syngress Publishing, 2005
12. Jonathan Knudsen, Patrick Niemeyer – Learning Java, 3 rd Edition, O’Reilly
13. Vispi Munshi, Developing a technical architecture for Web-based enterprise software
systems, http://www.ibm.com/developerworks/web/library/watecharch/
14. Radulescu F., Baze de date in Internet, Editura Printech, 2000
15. Hypertext Transfer Protocol -- HTTP/1.1, Cap. 10 Status Code Definitions,
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
16. http://it-science.lufo.ro/en/activiti/itac-i-programare/74-cum-se-realizeaz-o-pagin-web
17. https://www.cumfaciunsite.com/
18. http://demo.laurian.ro/wp-content/uploads/2016/10/ghid_limbaj_PHP_final-.pdf
19. http://www.lec-academy.ro/lectie-online/?idlectie=2126
20. http://www.cristianciurea.ase.ro/PPOO/CursPPOO_10.pdf
21. http://www.itcsolutions.eu
22. http://www.acs.ase.ro
23. https://ro.wikipedia.org/wiki/Spring_Framework
Întocmit expert elaborare material didactic Ciolea Daniela 76
Avizat manager de proiect

24. https://en.wikipedia.org/wiki/Swing_(Java)
25. https://www.baeldung.com/persistence-with-spring-series
26. https://www.baeldung.com/hibernate-4-spring
27. https://www.baeldung.com/hibernate-5-spring
28. https://www.baeldung.com/the-persistence-layer-with-spring-and-jpa
29. https://www.baeldung.com/the-persistence-layer-with-spring-data-jpa
30. https://www.baeldung.com/spring-data-java-8
31. https://www.baeldung.com/spring-data-annotations
32. http://www.tutorialspoint.com/spring/
33. https://www.tutorialspoint.com/computer_glossary.htm
34. https://www.tutorialspoint.com/spring/spring_web_mvc_framework.htm
35. https://maven.apache.org/
36. http://tomcat.apache.org/
37. https://spring.io/tools
38. https://www.capterra.com/sem-compare/learning-management-system-software
39. https://edu.google.com/?modal_active=none
40. https://www.docebo.com
41. https://www.efrontlearning.com
42. https://www.talentlms.com
43. http://quizstar.4teachers.org/
44. http://www.etraincenter.com
45. https://rria.ici.ro/
46. http://www.oecd.org/education/ceri/
47. http://oerwiki.iiep-unesco.org/
48. https://www.oeconsortium.org/
49. https://ocw.mit.edu/courses/new-courses/
50. https://cnx.org/
51. https://www.ck12.org/
52. https://www.saylor.org/
53. www.mooc.org
54. www.coursera.org

Întocmit expert elaborare material didactic Ciolea Daniela 77

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