Documente Academic
Documente Profesional
Documente Cultură
PROGRAMARE WEB
Anexa 2
CURS
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
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
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/.
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"
CAPITOLUL 1
Javascript) codul PHP este interpretat pe server, utilizatorul primind prin intermediul web numai
rezultatul obţinut, în diverse formate ( de exemplu HTML).
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.
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!
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
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”).
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.
î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.
Capitolul 2
PROGRAMARE WEB LA NIVEL DE SERVER
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).
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.
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:
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ă.
Î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.
Capitolul 3
• 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
ATACURI
–Accesul la Internet si calitatea acestuia: tip (dial-up, conex. satelit,…), mod de alocarea IP-ului
etc.
Tipuri de atac
–Accesul utilizator
•Etape:
–Exploatarea
–Deteriorarea
»Modificarede informatii
»Modificareajurnalelorde sistem
–Accesulde la distanta
•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
–Defectarea/incetinirea (temporara)
•Etape:
–Deteriorarea
•SQL injection
–Scrierea unor interogari SQL ce permit afisarea, alterarea, stergereae date din bazelede date via
formulare Web ori direct in URI
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.
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.
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.
int count = 0;
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/plain");
<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{
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
}
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
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 %> .
<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.
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.
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">
<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>
<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>
§ 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
§ utilizatorului
§ parolei
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
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
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
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
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>
pe o propietate
§ Maparea unei enumerari Java pe coloane, asemeni unor propietati normale
<column name="event_id"/>
<generator class="identity"/>
</id>
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.
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.
// 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.beginTransaction();
//do something
session.getTransaction().commit();
//...
Pentru realizarea unui query pe baza de date, folosind modelul orientat obiect se procedeaza in
felul urmator:
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:
.addOrder( Order.asc("color") )
.list();
Resurse utile
§ Download Connector/J
§ Tutorial JDBC
§ Tutorial RowSet
§ Façade Pattern
§ Object-relational mapping
§ Hibernate
§ Hibernate 3 download
§ Singleton pattern
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