Aplicat ie pentru tip arirea etichetelor de origine [614177]
UNIVERSITATEA DIN PITES ¸TI
FACULTATEA DE MATEMATIC ˘A-INFORMATIC ˘A
DOMENIUL DE LICENT ¸ ˘A INFORMATIC ˘A
LUCRARE DE LICENT A
Aplicat ie pentru tip arirea etichetelor de origine
Dacia, Renault si Nissan
Coordonator:
lect. univ. dr. MIROIU Maria
Absolvent: [anonimizat]-Lucia C alc^ i (Tic a-Diaconu)
{ 2013 {
Cuprins
1 Tehnologii folosite 5
1.1 Arhitectura N-Tier . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1 Sisteme tradit ¸ionale de g˘ azduire . . . . . . . . . . . . . . . 5
1.1.2 Sisteme distribuite . . . . . . . . . . . . . . . . . . . . . . 6
1.1.3 Modelul Client/Server . . . . . . . . . . . . . . . . . . . . 7
1.1.4 Modelul Client/Server distribuit . . . . . . . . . . . . . . . 8
1.1.5 Comunicarea ˆ ıntre procese . . . . . . . . . . . . . . . . . . 9
1.1.6 Beneficiile modelului Client/Server . . . . . . . . . . . . . 9
1.1.7 Arhitectura Client/Server 2-Tier. . . . . . . . . . . . . . . 10
1.1.8 Arhitectura Client/Server 3-Tier. . . . . . . . . . . . . . . 12
1.1.9 Framework-ul 3-Tier pentru aplicat ¸iile cu baze de date pe
WWW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2 Introducere ˆ ın Struts Web Framework . . . . . . . . . . . . . . . . 18
1.2.1 Ce sunt framework-urile aplicatiiei . . . . . . . . . . . . . 18
1.2.2 Tehnologiile ˆ ımputernicite . . . . . . . . . . . . . . . . . . 19
1.2.3 Struts, v˘ azut de sus . . . . . . . . . . . . . . . . . . . . . . 24
1.2.4 S˘ a ne uit˘ am ˆ ınapoi . . . . . . . . . . . . . . . . . . . . . . 30
1.2.5 Ce am facut . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2 Fundamente – MySQL si WASCE 34
2.1 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.1.1 Scurt˘ a introducere . . . . . . . . . . . . . . . . . . . . . . 34
2.2 WASCE IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.2.1 Introducereˆ ın o WebSphere Application Server Community
Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.2.2 Familia de aplicat ¸ii server WebSphere . . . . . . . . . . . . 36
2.2.3 T ¸inta utilizatorilor Community Edition . . . . . . . . . . . 37
2.2.4 Componente ale Community Edition . . . . . . . . . . . . 38
2.2.5 Instalare Community Edition . . . . . . . . . . . . . . . . 39
2.2.6 Dezvoltarea cu Community Edition . . . . . . . . . . . . . 41
2.2.7 Lucrul cu baze de date . . . . . . . . . . . . . . . . . . . . 41
2
CUPRINS 3
3 Aplicat ie: Procesul de etichetare al pieselor de schimb 43
3.1 Descrierea aplicat ¸iei . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.1.1 Motivul aplicat ¸iei . . . . . . . . . . . . . . . . . . . . . . . 43
3.2 Logarea ˆ ın aplicat ¸ie . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.3 Ecranul principal . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.4 Paginile alpicat ¸iei . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.4.1 Securitate – Utilizatori . . . . . . . . . . . . . . . . . . . . 46
3.4.2 Securitate – Roluri . . . . . . . . . . . . . . . . . . . . . . 47
3.4.3 Securitate – Tipuri iesire . . . . . . . . . . . . . . . . . . . 47
3.4.4 Securitate – Tipuri imprimante . . . . . . . . . . . . . . . 48
3.4.5 Gestiune – Intr˘ ari etichete . . . . . . . . . . . . . . . . . . 50
3.4.6 Gestiune – Ie¸ siri etichete imprimate . . . . . . . . . . . . . 51
3.4.7 Gestiune – Ie¸ siri etichete neimprimate . . . . . . . . . . . 53
3.4.8 Gestiune – Rebut . . . . . . . . . . . . . . . . . . . . . . . 54
3.4.9 Gestiune – Stoc . . . . . . . . . . . . . . . . . . . . . . . . 55
3.4.10 Imprimare . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Introducere
Aceast˘ a lucrare de licent ¸˘ a este proiectul de stagiu din cadrul Grupului Renault
Romˆ ania.
ˆIn cadrul stagiului am ˆ ınv˘ at ¸at s˘ a pun ˆ ın practic˘ a cuno¸ stint ¸ele dobˆ andite ˆ ın cei
trei ani de facultate, dar ¸ si lucruri noi sau de aprofundare cum ar fi lucrul ˆ ın
echip˘ a, respectarea termenelor limit˘ a, respectarea programului de lucru, colabo-
rarea ¸ si comunicarea ˆ ın echip˘ a.
ˆIn primul capitol am prezentat tehnologiile folosite ˆ ın cadrul aplicat ¸iei: arhi-
tectura 3-tier (stratul de enterprise, cel al aplicat ¸iei ¸ si cel al clientlui) ¸ si despre
Struts, precum ¸ si o mic˘ a aplicat ¸ie cu Struts.
ˆIn capitolul doi am discutat despre MySQL, un program de baze de date ¸ si
despre WASCE IDE, mediul de dezvoltare al aplicat ¸iei.
ˆIn ultimul capitol prezint aplicat ¸ia ˆ ın detaliu.
4
Capitolul 1
Tehnologii folosite
1.1 Arhitectura N-Tier
1.1.1 Sisteme tradit ionale de g azduire
Un sistem central de procesare (Mainframe) care asigur˘ a toate procesele. Ter-
minalele locale sunt responsabile pentru afi¸ sarea ¸ si pentru intr˘ arile de la tastatur˘ a
de c˘ atre utilizator ¸ si capabilit˘ at ¸i de vizualizare. Terminalele locale nu dispun de
capabilit˘ at ¸i inteligente de procesare.
Figura 1.1: Sistemul Non-Client-Server
Serverul de fi¸ siere ¸ si procesul de recuperare sunt asigurate de c˘ atre File Server.
Procesarea textului ¸ si de prelucrarea calculului tabelar sunt furnizate de stat ¸iile
de lucru PC.
5
6 CAPITOLUL 1. TEHNOLOGII FOLOSITE
1.1.2 Sisteme distribuite
Atˆ at datele ¸ si procesarea tranzact ¸iilor sunt divizate ˆ ıntre unul sau mai multe
calculatoare conectate printr-o ret ¸ea, fiecare calaculator jucˆ and un rol specific ˆ ın
sistem.
Asigur˘ a datele pe toate site-urile ˆ ıntr-un sistem distribuit, reflect˘ a ¸ si face
schimb˘ ari oriunde ˆ ın sistem.
Figura 1.2: Sisteme distribuite
1.1. ARHITECTURA N-TIER 7
1.1.3 Modelul Client/Server
Completeaz˘ a sistemele distribuite. R˘ aspunde limit˘ arilor g˘ asite ˆ ın cele dou˘ a
modele de g˘ azduire a datelor de procesare.
1.Modelul tradit ¸ional de g˘ azduire mainframe, ˆ ın care un singur mainframe
asigur˘ a accesul datelor share-uite c˘ atre mai multe terminale.
2.Modelul ret ¸ea local˘ a (LAN), ˆ ın care mai multe sisteme izolate acceseaz˘ a un
fi¸ sier server care nu asigur˘ a o putere central˘ a de procesare.
Asigur˘ a integrarea datelor ¸ si a serviciilor. Application Processing este asigu-
rat˘ a de mai multe straturi:
1.DB Server,
2.Serverul aplicat ¸iei,
3.Stat ¸ia de lucru la calculator.
Figura 1.3: Modelul Client/Server 3-Tier
8 CAPITOLUL 1. TEHNOLOGII FOLOSITE
1.1.4 Modelul Client/Server distribuit
Procesarea aplicat ¸iei este asigurat˘ a de toate straturile ret ¸elei:
1.Mainframe,
2.Serverul aplicat ¸iei,
3.Stat ¸iile de lucru.
Multiplele baze de date trebuie s˘ a suporte cereri distribuite de date, s˘ a suporte
volume mari, ˆ ıncarcare echilibrat˘ a ¸ si scalabilitate (extensibilitate). Necesit˘ a o
ret ¸ea de administrare ¸ si managementul aplicat ¸iei extinse.
Figura 1.4: Model de sistem distribuit Client/Server
1.1. ARHITECTURA N-TIER 9
1.1.5 Comunicarea ^ ntre procese
Bazat˘ a pe serverul de calcul client/server. Procesul client comunic˘ a cu procesul
server. Fiecare proces ˆ ındepline¸ ste funct ¸ii separate. Datele sunt pasate ˆ ıntre
procese, folosind funct ¸iile IPC(Inter-process Communication).
Figura 1.5: Comunicarea ˆ ıntre procese
1.1.6 Beneciile modelului Client/Server
Divizeaz a procesele aplicat iei c˘ atre multiple ma¸ sini:
{Datele non-critice ¸ si funct ¸iile sunt procesate la client
{Funct ¸iile critice sunt procesate pe server
Optimizeaz a stat ia de lucru a clientului pentru datele de intrare ¸ si
prezentare (de ex. grafice ¸ si suportul mouse)
Optimizeaz a serverul pentru procesarea datelor ¸ si stocarea lor (de ex.
cantitate m˘ arit˘ a de memorie ¸ si spat ¸iu pe disc)
Scalarea pe orizontal a – Multiple servere, fiecare avˆ and capabilit˘ at ¸i ¸ si
putere de procesare, pot fi ad˘ augate la procesele de ˆ ınc˘ arcare distribuite
Scalarea pe vertical a – Poate fi mutat pe ma¸ sini mai puternice, cum ar
fi minicomputer sau un mainframe pentru a lua avantajul unor sisteme mai
mari ¸ si mai performante
Reduce repetarea datelor – Datele stocate pe server pentru fiecare client
reduce volumul datelor duplicate pentru aplicat ¸ie
10 CAPITOLUL 1. TEHNOLOGII FOLOSITE
1.1.7 Arhitectura Client/Server 2-Tier.
Are dou˘ a componente esent ¸iale:
1.Un calculator Client ¸ si
2.Un server de BD.
2-Tier considerente:
Programul client acceseaz˘ a direct baza de date
{Necesit˘ a o schimbare de cod pentru o alt˘ a baz˘ a de date
{Volum mare de trafic datorat transportului de date
Programul client execut˘ a aplicat ¸ia logic˘ a
{Limitat de capacitatea proces˘ arii a stat ¸iei de lucru a clientului (me-
morie, procesor)
{Necesit˘ a codul aplicat ¸iei pentru a fi distribuit˘ a fiec˘ arei stat ¸ii de lucru
a clientilor.
Figura 1.6: Arhitectura Client/Server 2-Tier
1.1. ARHITECTURA N-TIER 11
Arhitectura 2-Tier – Pro si Contra
Avantaje Dezavantaje
Probleme de dezvoltare: Probleme de dezvoltare:
Structur˘ a simpl˘ a
U¸ sor de ˆ ıntret ¸inut ¸ si de instalatNormele complexe ale aplicat ¸iei
sunt greu de implementat ˆ ın serverul
bazei de date – necesit˘ a mai mult cod
pentru client
Normele complexe ale aplicat ¸iei
sunt greu de implementat ˆ ın
aplicat ¸ia client ¸ si au performante
slabe
Schimb˘ arile logicii de afacere nu
sunt aplicate ˆ ın mod automat de un
server – schimb˘ arile necesit˘ a un nou
software pe partea de client pentru
a fi distribuite ¸ si instalate
Nu este portabil la alte platforme
server de BD
Performant ¸a: Performant ¸a:
Performant ¸a adecvat˘ a pentru vo-
lume mici c˘ atre medii ale mediilor
de dezvoltare
Logica afacerii ¸ si a bazei de
date sunt fizic aproape, care ofer˘ a
performant ¸e superioarePerformant ¸˘ a inadecvat˘ a pentru
mediile cu volum mediu spre ˆ ınalt,
de vreme ce serverul bazei de date
este solicitat s˘ a efectueze logica a-
facerii. Aceasta ˆ ıncetine¸ ste viteza
operat ¸iunilor BD pe serverul BD.
12 CAPITOLUL 1. TEHNOLOGII FOLOSITE
1.1.8 Arhitectura Client/Server 3-Tier.
Arhitectura client/server 3-tier are trei componente esent ¸iale:
1.un PC client
2.o aplicat ¸ie server
3.un server al bazei de date
3-Tier considerente:
Programul client cont ¸ine doar logica de prezentare
{Mai putine resurse necesare pentru stat ¸ia de lucru a clientului
{Dac˘ a locat ¸ia BD se schimb˘ a, clientul nu modific˘ a nimic
{Mai putin cod de distribuit stat ¸iei de lucru a clientului
Un server gestioneaz˘ a mai multe cereri de client
{Mai multe resurse disponibile pentru programul server
{Reduce traficul de date pe ret ¸ea
Figura 1.7: Arhitectura 3-Tier general˘ a
1.1. ARHITECTURA N-TIER 13
Architectura 3-Tier Pro si Contra
Avantaje Dezavantaje
Probleme de dezvoltare: Probleme de dezvoltare:
Normele aplicat ¸iei complexe sunt
usor de implementat ˆ ın serverul de
aplicat ¸ie
Logica afacerii off-ˆ ınc˘ arcate de
la serverul BD ¸ si client, care
ˆ ımbun˘ at˘ at ¸e¸ ste performant ¸a
Schimb˘ arile logicii de afaceri
este automat realizat˘ a de server –
schimb˘ arile necesit˘ a doar un nou
software pentru noua aplicat ¸ie server
pentru a fi instalate
Logica aplicat ¸iei server este porta-
bil˘ a cu alte platforme de BD ˆ ın vir-
tutea aplicat ¸iei softwareStructur˘ a mult mai complex˘ a
Mai dificil de ˆ ıntret ¸inut ¸ si de insta-
lat
Performant ¸a: Performant ¸a:
Performant ¸˘ a superioar˘ a pentru
volume medii c˘ atre ˆ ınalte ale medi-
ilor de dezvoltareSepararea fizic˘ a a serverelor de
aplicat ¸ii, care cont ¸in funct ¸ii ale
logicii afacerii, de serverele de BD,
care contin BD, poate afecta mode-
rat performant ¸a
14 CAPITOLUL 1. TEHNOLOGII FOLOSITE
1.1.9 Framework-ul 3-Tier pentru aplicat iile cu baze de
date pe WWW
Abstract. WWW (World Wide Web) este ˆ ın prezent tehnologia dominant˘ a
pentru desfasurarea de aplicat ¸ii telematice, precum ¸ si pentru aplicat ¸iile corpo-
rative pe intranet. Aceasta se bazeaz˘ a pe un model slab de funct ¸ionare care
cauzeaz˘ a probleme importante ˆ ın adaptarea mo¸ stenirii ¸ si a aplicat ¸iilor conexe. O
serie de probleme legate de portare de sisteme cum ar fi DBMS-uri (DataBase
Management System) de la WWW sunt investigate. Practicile care au fost apli-
cate sunt revizuite.
Propun o arhitectur˘ a bazat˘ a pe CORBA care funct ¸ioneaz˘ a ˆ ın spatele unui
server WWW. Baza de date legat˘ a de operat ¸iuni este efectuat˘ a dinamic ˆ ın timp
ce obiectele respective sunt persistente, manipulate pe hit-uri apart ¸inˆ and aceleia¸ si
sesiuni.
ˆIn prezent, internetul este privit ca o tehnologie foarte promit ¸˘ atoare ¸ si este
folosit˘ a foarte mult pentru dezvoltarea de aplicat ¸ii pe internet ¸ si intranet. Acest
sistem de informat ¸ii client / server det ¸ine un mare succes ˆ ın standardizarea de
comunicare ˆ ıntre client ¸i (browsere) ¸ si serverele cu informat ¸ii.
HTTP ( Hypertext Transfer Protocol) este un set de reguli destul de
simple, optimizate pentru sisteme hipermedia distribuite ˆ ın ret ¸elele de arie larg˘ a.
Serverul WWW ˆ ındepline¸ ste fiecare cerere individual˘ a de informat ¸ii indepen-
dente de la cele anterioare. Problema este dubl˘ a. ˆIn afar˘ a de handicapul de
performant ¸˘ a care funct ¸ioneaz˘ a slab pe WWW, serverele WWW nu au nici o
modalitate de a asocia ”logic” cereri conexe, precum ¸ si ment ¸inerea de informat ¸ii
pentru ele, ca parte a unei ”sesiuni de utilizator”.
Handicapul de performant˘ a este atribuit faptului c˘ a HTTP are nevoie de o
nou˘ a conexiune TCP pentru fiecare cerere pe care le deserve¸ ste. Dezavanta-
jele HTTP – combinat ¸iile TCP (Transmission Control Protocol) au fost cuan-
tificate ¸ si mai multe propuneri noi au fost f˘ acute pentru a depa¸ si handicapul de
performant ¸˘ a.
ˆIn ceea ce prive¸ ste al doilea pliu al problemei HTTP, o metod˘ a de portare
a aplicat ¸iilor statefull la WWW a fost propus˘ a. Ea se bazeaz˘ a pe un server
de traducere, o component˘ a software care acceseaz˘ a interfat ¸a original˘ a a unui
sistem de mo¸ stenire declan¸ sat de c˘ atre browser-ul WWW. Serverul Traducere
interpreteaz˘ a ie¸ sirea cerere destinat˘ a unui terminal convent ¸ional (de exemplu,
IBM 3270, VT100) la codul HTML.
Pe direct ¸ia invers˘ a, transmit ¸˘ atoarele de traducere Server creaz˘ a cererea HTTP
emis˘ a de c˘ atre browser-ul la interfat ¸a original˘ a a sistemului de mo¸ stenire. Con-
form taxonomiei middleware WWW, serverele de traducere sunt clasificate ca
”Gateway Interface”. Serverul de traducere nu se ocup˘ a bine de insert ¸ii sau ac-
tualiz˘ ari de informat ¸ii. Mai mult, dependent ¸a de fi¸ siere de specialitate, denumite
scheme, face ca propagarea de modific˘ ari de aplicare a WWW sa fie destul de
dificil˘ a.
1.1. ARHITECTURA N-TIER 15
Gateway-urile RDBMS (Relational DataBase Management System) au atras
interesul comunit˘ at ¸ii WWW ˆ ın ultimii ani. Problemele asociate cu desfaturarea
de gateway-uri de baze de date sunt:
portabilitatea ˆ ıntre sisteme,
generalitate,
conformitatea cu standardele de performant ¸˘ a,
precum ¸ si funct ¸ionarea dinamic˘ a.
A fost propus un cadru pentru implementarea bazelor de date de pe WWW.
Principalele caracteristici ale acestui cadru au fost generalitatea ¸ si conformitatea
cu standardele existente. Avantajele unei arhitecturi noi, client/server pentru
desfa¸ surarea de aplicat ¸ii de baze de date WWW au fost evaluate ˆ ıntr-o serie de
experimente, prin utilizarea unui pinger HTTP.
Se propune o nou˘ a arhitectur˘ a, bazat˘ a pe Java pentru dezvoltarea de aplicat ¸ii
de baze de date statefull. Arhitectura ˆ ıncearc˘ a s˘ a depa¸ seasc˘ a multe dintre pro-
blemele raportate ˆ ın paragrafele anterioare. V˘ a prezint o component˘ a software
specializat˘ a numit˘ a dispenser . Dispenser-ul aloc˘ a fire de execut ¸ie c˘ atre aplicat ¸ia
bazei de date pentru utilizatorii activi ¸ si t ¸ine evident ¸a utiliz˘ arii acestora. ˆIn
aceast˘ a arhitectur˘ a, exist˘ a o mapare unu-la-unu ˆ ıntre subiectele de aplicare ¸ si
fiele de execut ¸ie ale sesiunii. Stimulii din browsere ajung la baza de date prin
Java Servlets. Servlet-ul comunic˘ a cu baza de date prin CORBA.
Arhitectura sugerat˘ a adopt˘ a un sistem 3-tier, a¸ sa cum se arat˘ a in Figura (1.8).
Nivelul de mijloc cuprinde:
un server WWW,
un motor de execut ¸ie Servlet,
Object Request Broker (ORB)
¸ si obiectele CORBA (Common Object Request Broker Adapter) implemen-
tate care comunic˘ a cu baza de date
Acest nivel presupune un client/server de asociere in care client ¸ii sunt Java
Servlets (Javasoft Servlet API 2.0). Rolul server-ului este atribuit de o combinat ¸ie
ˆ ıntre dispenser ¸ si firele de execut ¸ie a bazei de date Java.
Java Servlets au fost adoptat ¸i pentru c˘ a ace¸ stia sunt capabili de a ment ¸ine
sesiunea de tracking ˆ ıntre diferite cereri HTTP de la aceia¸ si utilizatori. Aceasta
necesit˘ a un server WWW, care poate gestiona cererile de Servlet. Orice server
care are un motor Servlet, practic, se ˆ ıncadreaz˘ a ˆ ın arhitectura, dar alegerea a
fost cea a serverului Web Apache, ˆ ımpreuna cu modul de JServ destinat pentru
sust ¸inerea execut˘ arii Servlet-ului.
ˆIn partea serverul din nivelul de mijloc, CORBA IDL a fost utilizat pentru a
specifica interfet ¸ele de componente. Interfet ¸ele descrise ˆ ın middleware sunt dou˘ a:
16 CAPITOLUL 1. TEHNOLOGII FOLOSITE
dispenser-ul
¸ si firul de baze de date (dbthread).
Dispenser-ul are o grupare de fire de execut ¸ie c˘ atre baza de date, fiecare
ment ¸inˆ and o conexiune la sistemul de baze de date care stau la baz˘ a. Firele
de execut ¸ie c˘ atre bazele de date vin la dispozit ¸ia client ¸ilor cu ajutorul dispenser-
ului.
Fiecare fir de execut ¸ie de date din grupare are, la rˆ andul s˘ au, un obiect-
conexiune ˆ ımpachetat care realizeaz˘ a comunicarea efectiv˘ a cu sistemul de baze de
date. Obiectul ˆ ımpachetat prime¸ ste cereri de la firele de execut ¸ie de la bazele de
date ¸ si returneaz˘ a rezultate relevante. Atˆ at dispenser cˆ at ¸ si firele de execut ¸ie ale
bazei de date au un set de metode care sunt puse la dispozit ¸ie, prin intermediul
ORB, clientilor. Dispenser-ul are metode pentru rezervarea ¸ si eliberarea unui fir
de execut ¸ie c˘ atre baza de date, ˆ ın timp ce firul de execut ¸ie include metode pentru
accesarea informat ¸iilor det ¸inute ˆ ın baza de date. DBMS (DataBase Management
System) folosit ˆ ın implementarea aplicat ¸iei a fost MySQL.
Figura 1.8: Arhitectura propus˘ a
Pe partea de client a arhitecturii din nivelul de mijloc, Servlet-ul invoc˘ a o
parte din ORB, ˆ ın scopul de a localiza ¸ si a comunica cu dispozitivul ¸ si firele de
execut ¸ie ale bazei de date. Partea de server cont ¸ine o instant ¸˘ a a dispenser-ului ¸ si
mai multe instant ¸e de fire de execut ¸ie de baze de date.
Dispenser-ul, ˆ ın rutine sale de init ¸ializare, ˆ ın afar˘ a de crearea pool-ului de fire
de exceut ¸ie de baze de date, export˘ a un nume in Orb Name Service ¸ si creeaz˘ a un
fir de execut ¸ie numit Invalidator. Numele exportat este util atunci cˆ and Servlet-ul
vrea sa localizeze Dispenser-ul pentru prima data (prin intermediul ORB Name
Service). Firul de execut ¸ie invalidator previne sesiunile de a t ¸ine ˆ ınchise obiectele
bazei de date, ˆ ın timp ce este inactiv˘ a, pentru o lung˘ a perioad˘ a de timp.
Ori de cˆ ate ori o cerere ajunge la serverul aplicat ¸iei de bazei de date, Servlet-ul
relevant folose¸ ste API-ul sesiunii, fie pentru a identifica o sesiune existent˘ a sau
1.1. ARHITECTURA N-TIER 17
de a genera una nou˘ a. ˆIn primul caz, contextul sesiunii (p˘ astrat pe partea de
Servlet), cont ¸ine o trimitere la firul de execut ¸ie al bazei de date care se ocup˘ a,
de fapt, de sesiunea curent˘ a. ˆIn funct ¸ie de cerere, Servlet-ul invoc˘ a o metod˘ a
adecvat˘ a ˆ ın firul de execut ¸ie de date. Pentru a verifica dac˘ a firul este ˆ ınca ˆ ın
manipularea acestei sesiuni, Servlet-ul ˆ ınainteaz˘ a propriul ID de sesiune la firul
de execut ¸ie. ˆIn ultimul caz (de exemplu, o nou˘ a sesiune context este creat˘ a),
Servlet-ul contacteaz˘ a dispenser-ul pentru a rezerva un fir de execut ¸ie c˘ atre baza
de date pentru a gestiona sesiunea curent˘ a, iar apoi invoc˘ a metoda adecvat˘ a ˆ ın
firul de execut ¸ie recent atribuit.
Firul de execut ¸ie al bazei de date are un vector intern cu toate cursoarele
bazei de date deschise (ResultSets-uri in JDBC API), impreun˘ a cu un pointer
care se afl˘ a la ultima deschis˘ a (toate operat ¸iunile de baze de date sunt efectuate
prin intermediul JDBC). Ori de cˆ ate ori o declarat ¸ie SQL este trimis˘ a la firul de
execut ¸ie, ˆ ın cazul ˆ ın care acesta este o instruct ¸iune SELECT, cursorul recent des-
chis se adaug˘ a la sfˆ ar¸ situl vectorului ¸ si indicatorul este schimbat cu aceasta (a se
vedea Figura(1.9)). Pe de alt˘ a parte, atunci cˆ and sose¸ ste o declarat ¸ie goal˘ a, cur-
sorul indicat este utilizat ˆ ın scopul de a aduce urm˘ atoarele rezultate (extragerea
rˆ and-cu-rˆ and). ˆIn cele din urm˘ a, atunci cˆ and sose¸ ste o cerere de cursor, firul de
execut ¸ie ˆ ınchide ultimul cursorul al vectorului, schimbˆ and indicatorul la cursorul
anterior ¸ si returnˆ and rezultatele cursorului anterior care a fost ultimul trimis. Ar
trebui subliniat faptul c˘ a persistent ¸a cursoarelor a¸ sa cum este descris˘ a mai sus,
ˆ ındepline¸ ste ment ¸inerea st˘ arii urm˘ arite ˆ ın mediul Web.
Figura 1.9: Vectorul cursorului deschis
Rezultatele operat ¸iilor din baza de date sunt integrate, de c˘ atre firul de execut ¸ie
al bazei de date,ˆ ıntr-un tablou bidimensional de ¸ siruri de caractere ¸ si trimisˆ ınapoi
la Servlet-ul adecvat, prin ORB. Acest tablou are, practic, o serie de ˆ ınregistr˘ ari
preluate de c˘ atre RDBMS.
Invalidator-ul verific˘ a pool-ul de fire de execut ¸ie al bazei de date, ˆ ın scopul
de a localiza cele care au fost accesate ˆ ınainte de o anumit˘ a limit˘ a de timp.
Aceast˘ a perioad˘ a de timp ofer˘ a o indicat ¸ie clar˘ a de timp ˆ ın care sistemul server
ar trebui s˘ a anticipeze o nou˘ a cerere de la acela¸ si browser. Dup˘ a aceast˘ a perioad˘ a,
Invalidator consider˘ a clientul inactiv ¸ si returneaz˘ a firul de execut ¸ie la pool-ul de
fire de execut ¸ie disponibile.
18 CAPITOLUL 1. TEHNOLOGII FOLOSITE
1.2 Introducere ^ n Struts Web Framework
Struts este un cardu open-source care extinde Java Servlet API ¸ si folose¸ ste arhi-
tectura MVC (Model, View, Controller). Aceasta permite crearea intret ¸inut˘ a,
extensibil˘ a a aplicat ¸iilor web flexibile bazate pe tehnologii standard, cum ar
fi JSP, JavaBeans, pachete de resurse ¸ si XML (Extensible Markup Language).
Cˆ and se utilizaz˘ a Struts, cadrul ofer˘ a un servlet controler, ActonServlet, care
este definit in libr˘ ariile Struts care sunt incluse ˆ ın IDE, ¸ si care este automat
ˆ ınregistrat˘ a ˆ ın descriptorul de desfa¸ surare web.xml . ActionServlet-ul folose¸ ste
un fi¸ sier struts-config.xml pentru a mapa cererile primite de la obiectele de
act ¸iune Struts, ¸ si instant ¸iaz˘ a orice obiect ActionForm ascociat cu act ¸iunea de a
stoca temporar datele din formular. Obiectul Action proceseaz˘ a cererile utilizˆ and
metoda sa de executare, ˆ ın timp ce face uz de toate datele stocate ˆ ın form bean.
Odat˘ a ce obiectul Action proceseaz˘ a o cerere, acesta stocheaz˘ a date noi (de e-
xemplu, ˆ ın form bean, sau ˆ ıntr-un result bean separat), ¸ si transmite rezultatele
la vizualizarea corespunzatoare.
1.2.1 Ce sunt framework-urile aplicatiiei
Un framework este o aplicat ¸ie reutilizabil˘ a, semi-complet˘ a care poate fi spe-
cializat˘ a pe producerea de aplicat ¸ii comune. Aplicat ¸iile software ruleaz˘ a pe cal-
culatoare asem˘ an˘ atoare, a¸ steapt˘ a intr˘ ari de la dispozitive asem˘ an˘ atoare, ie¸ siri
c˘ atre display-uri ¸ si salvarea datelor pe hard disk-uri. Dezvoltatorii lucreaz˘ a cu
aplicat ¸ii pe calculatoarele desktop coventionale, obi¸ snuindu-se cu seturile de tool-
uri ¸ si cu mediile de dezvoltare care se balanseaz˘ a ˆ ıntre aplicat ¸ii. Framework-urile
aplicat ¸iilor construite pe aceea¸ si structur˘ a le asigur˘ a dezvoltatorilor o structur˘ a
reutilizabil˘ a care le serve¸ ste asemeni unei fundat ¸ii pentru produsele proprii. Un
framework asigur˘ a dezvoltatorilor un set de componente coloan˘ a vertebral˘ a care
au urm˘ atoarele caracteristici:
sunt cunoscute c˘ a lucreaz˘ a bine ˆ ın alte aplicat ¸ii,
sunt gata s˘ a fie utilizate ˆ ın urm˘ atorul proiect,
pot fi folosite de celelalte echipe din organizat ¸ie.
Alte tipuri de framework-uri
Ideea unui framework nu se aplic˘ a doar aplicat ¸iilor ci ¸ si componentelor ei.
Unele cadre au fost legate de un mediu de dezvoltare proprietar. Putem utiliza
orice mediu de dezvoltare cu Struts:
Visual Age pentru Java
JBuilder
1.2. INTRODUCERE ^IN STRUTS WEB FRAMEWORK 19
Eclipse
Emacs
Textpad.
Toate sunt alegeri populare ˆ ın rˆ andul dezvoltatorilor de Struts. Dac˘ a se poate
folosi cu Java, ˆ ıl putem folosi cu Struts.
1.2.2 Tehnologiile ^ mputernicite
Aplicat ¸iile dezvoltate cu Struts sunt bazate pe un num˘ ar de tehnologii ˆ ım-
puternicite. Aceste componente nu sunt specifice Struts ¸ si stau la baza fiec˘ arei
aplicat ¸ii web pe Java. Unul din motive pe care dezvoltatorii folosec framework-
uri ca Struts este c˘ a ascunde detaliile nepl˘ acute din spatele acronimelor cum ar fi
HTTP, CGI ¸ si JSP. Ca un dezvoltator pe Struts, nu trebuie un alfabet de guru,
ci ni¸ ste cuno¸ stint ¸e de baz˘ a ale tehnologiilor care ajut˘ a la inventarea unor solut ¸ii
creative ale problemelor ˆ ın¸ sel˘ atoare.
Hypertext Transfer Protocol (HTTP)
Protocoalele diplomatice sunt concepute pentru a evita neˆ ınt ¸elegerile ¸ si pen-
tru a ment ¸ine negocierile. ˆIn mod similar, atunci cˆ and computerele trebuie s˘ a
vorbeasc˘ a, ele urm˘ aresc, de asemenea, un protocol oficial. Protocolul define¸ ste
modul de transmitere de date ¸ si cum s˘ a-l decodeze odat˘ a ce ajunge. Aplicat ¸iile
web folosesc Hypertext Transfer Protocol (HTTP) pentru a transmite datele ˆ ıntre
browserul care ruleaz˘ a pe calculator ¸ si aplicat ¸ia care ruleaz˘ a pe server.
Multe aplicat ¸ii server comunic˘ a utilizˆ and alte protocoale decˆ at HTTP. Une-
le dintre acestea ment ¸in o legatur˘ a permanent˘ a ˆ ıntre computere. Serverul de
aplicat ¸ii ¸ stie exact care este conectat ˆ ın orice moment ¸ si poate spune cˆ and o
conexiune este scazut˘ a. Pentru c˘ a ei ¸ stiu starea pentru fiecare conexiune ¸ si iden-
titatea fiec˘ arei persoane care o folose¸ ste, acestea sunt cunoscute ca protocoale
statefull .
Prin contrast, HTTP este cunoscut ca un protocol stateless . Un server HTTP
va accepta orice solicitare din partea oric˘ arui client ¸ si va oferi ˆ ıntotdeauna un
anumit tip de r˘ aspuns, chiar dac˘ a r˘ aspunsul este doar de a spune nu. F˘ ar˘ a
costurile de negociere ¸ si ment ¸inerea unei conexiuni, protocoale stateless se pot
ocupa de un volum mare de cereri. Acesta este un motiv pentru care Internetul
a fost ˆ ın masur˘ a pentru a se scala la milioane de calculatoare.
Un alt motiv pentru care HTTP a devenit un standard universal este sim-
plitatea sa. O cerere HTTP arat˘ a ca un document text obi¸ snuit. Acest lucru
l-a f˘ acut usor de folosit pentru aplicat ¸ii care fac cereri HTTP. Se poate trimite
o solicitare HTTP de mˆ ana, folosind un utilitar standard, cum ar fi Telnet. ˆIn
cazul ˆ ın care raspunsul HTTP vine inapoi, este, de asemenea, ˆ ın text simplu pe
care dezvoltatorii ˆ ıl pot citi.
20 CAPITOLUL 1. TEHNOLOGII FOLOSITE
Prima linie din cererea HTTP cont ¸ine metoda, urmat˘ a de locat ¸ia resurselor
solicitate ¸ si versiunea de HTTP. Zero sau mai multe cereri HTTP urmez˘ a linia
init ¸ial˘ a. Antetele HTTP ofer˘ a informat ¸ii suplimentare la server. Aceasta pot
include tipul de browser ¸ si versiunea, tipuri de documente acceptabile, ¸ si cookie-
urile browser-ului, pentru a numi doar cˆ ateva. Dintre cele sapte metode cerere,
GET ¸ si POST sunt de departe cele mai populare.
Dupa ce serverul a primit cererea, se va emite un r˘ aspuns HTTP. Prima linie
din r˘ aspuns se nume¸ ste linia de stare ¸ si poart˘ a versiunea protocolul HTTP, un
statut numeric, ¸ si o scurt˘ a descriere a statutului. ˆIn urmatoarea linie de stare,
serverul va returna un set de r˘ aspunsuri antet HTTP care lucreaz˘ a ˆ ıntr-un mod
similar cu anteturile cerere.
A¸ sa cum am ment ¸ionat, HTTP nu p˘ astreaz˘ a informat ¸ii de stare ˆ ıntre cereri.
Serverul ˆ ınregistreaz˘ a cererea, trimite r˘ aspunsul, ¸ si merge mai departe pentru ce-
rerea urm˘ atoare. ˆIn timp simplu ¸ si eficient, un protocol stateless este problematic
pentru aplicat ¸ii dinamice care au nevoie de a urm˘ ari utilizatorii lor.
Cookie-urile ¸ si rescrierea URL-ului sunt dou˘ a metode comune pentru a urm˘ ari
utilizatori ˆ ıntre cereri. Un cookie este un pachet special de informat ¸ii de pe
computerul utilizatorului. Rescrierea URL-ului stocheaz˘ a o referire special˘ a la
adresa paginii pe care un server Java ˆ ıl poate utiliza pentru a urm˘ ari utilizatorii.
Pe cont propriu, un server web standard HTTP nu face trafic ˆ ın cont ¸inut
dinamic. Se folose¸ ste ˆ ın principal cererea de a localiza un fisier ¸ si apoi revine c˘ atre
fi¸ sierul de r˘ aspuns. Fi¸ sierul este de obicei formatat folosind Hypertext Markup
Language (HTML) deoarece browser-ul web poate formata ¸ si afi¸ sa. Pagina HTML
include adesea link-uri c˘ atre alte pagini web ¸ si poate afi¸ sa orice num˘ ar de alte
avantaje, cum ar fi imagini ¸ si clipuri video. Utilizatorul face clic pe un link pentru
a face o alt˘ a cerere, iar procesul ˆ ıncepe din nou. Serverele web standard se ocup˘ a
destul de bine de cont ¸inutul static ¸ si de imagini, dar au nevoie de o mˆ an˘ a de
ajutor pentru a oferi utilizatorilor un r˘ aspuns personalizat, dinamic.
Cont inutul static de pe Internet vine direct din fi¸ siere text sau date, cum ar
fi fi¸ siere HTML sau JPEG. Aceste fi¸ siere pot fi modificate din cˆ and ˆ ın cˆ and, dar
acestea nu sunt modificate ˆ ın mod automat atunci cˆ and sunt solicitate de c˘ atre un
browser web. Cont inutul dinamic , pe de alt˘ a parte, este generat vioi, de obicei,
ca r˘ aspuns la o cerere individualizat˘ a ˆ ıntr-un browser.
Common Gateway Interface (CGI)
Primul standard utilizat pe scar˘ a larg˘ a pentru producerea de cont ¸inut dinamic
a fost Common Gateway Interface (CGI). CGI utilizeaz˘ a caracteristicile sistemu-
lui de operare standard, cum ar fi variabilele standard de de intrare ¸ si de ie¸ sire
pentru a crea o punte, sau gateway , ˆ ıntre serverul web ¸ si alte aplicat ¸ii de pe
ma¸ sina gazd˘ a. Celelalte aplicat ¸ii se pot uita la cererea trimis˘ a c˘ atre ei de serverul
web ¸ si pot crea un r˘ aspuns personalizat.
Cˆ and un server web prime¸ ste o cerere, care este destinat˘ a pentru un program
1.2. INTRODUCERE ^IN STRUTS WEB FRAMEWORK 21
CGI, ruleaz˘ a acest program ¸ si ofer˘ a programul cu informat ¸ii de la cererea de
intrare. Programul CGI ruleaz˘ a ¸ si trimite product ¸ia sa inapoi la server. Atunci
serverul web transmite r˘ aspunsul la browser.
CGI define¸ ste un set de convent ¸ii cu privire la informat ¸iile pe care le va trece
ca ¸ si variabile de mediu ¸ si modul ˆ ın care se a¸ steapt˘ a intr˘ arile ¸ si ie¸ sirile standard,
pentru a fi utilizate. Cum ar fi HTTP, CGI este flexibil ¸ si usor de implementat,
¸ si un numar mare de programe CGI au fost scrise.
Principalul dezavantaj al CGI-ului este c˘ a trebuie s˘ a ruleze o copie nou˘ a a
programului CGI pentru fiecare cerere. Acesta este un proces relativ costisitor,
care pot ˆ ıncarca site-uri de mare volum ˆ ın care mii de cereri sunt deservite pe
minut. Un alt dezavantaj este faptul c˘ a programele CGI tind s˘ a fie dependente
de platform˘ a. Un program CGI scris pentru un sistem de operare nu poate rula
pe un altul.
Java servlets
Platforma Java Servlet Sun se adreseaz˘ a direct celor dou˘ a dezavantaje princi-
pale ale programelor CGI. ˆIn primul rˆ and, servlet-urile ofer˘ a o performant ¸˘ a mai
bun˘ a ¸ si utilizarea resurselor de programe CGI convent ¸ionale. ˆIn al doilea rˆ and,
scrie o dat˘ a, natura run-anywhere de Java ˆ ınseamn˘ a c˘ a servlet-urile sunt porta-
bile ˆ ıntre sistemele de operare care au o ma¸ sin˘ a virtual˘ a Java(JVM – Java Virtual
Machine).
Un servlet arat˘ a ¸ si se simte ca un server web ˆ ın miniatur˘ a. El prime¸ ste o cerere
¸ si red˘ a un r˘ aspuns. Dar, spre deosebire de serverele web convent ¸ionale, interfat ¸a
de programare a aplicat ¸iilor servlet (API) este special conceput˘ a pentru a ajuta
dezvoltatorii Java s˘ a creeze aplicat ¸ii dinamice.
Servlet-ul, ˆ ın sine, este pur ¸ si simplu o clas˘ a Java care a fost compilat˘ a ˆ ın cod
binar, la fel ca orice alt obiect Java. Servlet-ul are acces la un API bogat de
servicii HTTP specifice, dar este ˆ ınc˘ a doar un alt obiect Java care ruleaz˘ a ˆ ıntr-o
aplicat ¸ie ¸ si poate influent ¸a toate celelalte beneficii Java.
Pentru a oferi acces la servlet serverelor web convent ¸ionale, servlet-urile sunt
conectate ˆ ın containere . Containerul servlet este ata¸ sat la serverul web. Fiecare
servlet poate declara de ce modele de URL ¸ si-ar dori s˘ a se ocupe.
Dar, spre deosebire de programele CGI, un nou servlet nu este creat pentru
fiecare cerere. Odat˘ a containerul instant ¸iaz˘ a servlet-ul, se va crea un nou fir
de execut ¸ie pentru fiecare cerere. Firele de execut ¸ie Java sunt mult mai put ¸in
costisitoare decˆ at procesele server utilizate de programe CGI.
Dezvoltatorii pe servlet pot utiliza metoda init() pentru a det ¸ine trimiteri
la resursele costisitoare, cum ar fi conexiuni de baze de date sau EJB Home
Interfaces, astfel ˆ ıncˆ at acestea pot fi partajate ˆ ıntre cereri.
Din moment ce servlet-urile sunt multithread, dezvoltatorii servlet trebuie s˘ a
aiba o grij˘ a deosebit˘ a pentru a fi siguri c˘ a servlet ¸ii lor sunt thread-safe.
22 CAPITOLUL 1. TEHNOLOGII FOLOSITE
JavaServer Pages
ˆIn timp ce Java servlets sunt un pas mare de la programele CGI, ele nu sunt
un leac universal. Pentru a genera r˘ aspunsul, dezvoltatorii sunt ˆ ınc˘ a blocat ¸i cu
folosirea declarat ¸iilor println pentru a face HTML. Cod care arat˘ a ca
out.println("<P>One line of HTML.</P>");
out.println("<P>Another line of HTML.</P>");
Exist˘ a biblioteci care ajut˘ a la generarea HTML, dar aplicat ¸iile devin tot mai
complexe, dezvoltatorii Java sfˆ ar¸ sind prin a fi aruncat ¸i ˆ ın rolul de designeri de
pagini HTML.
ˆIn acela¸ si timp, avˆ and ˆ ın vedere posibilitatea de a alege, majoritatea manage-
rilor de proiect prefer˘ a s˘ a ˆ ımpart˘ a echipa de dezvoltare ˆ ın grupuri specializate.
Le place ca designerii HTML s˘ a lucreze la prezentare, ˆ ın timp ce dezvoltatorii
Java lucreaz˘ a la logica de afaceri.
Pentru a rezolva aceast˘ a problem˘ a, Sun a apelat la ideea de a folosi pagini
de server pentru a combina scripting-ul ¸ si tehnologiile templating ˆ ıntr-o singur˘ a
component˘ a. Pentru a construi JSP-uri, dezvoltatorii ˆ ıncep prin crearea de pagini
HTMLˆ ın acela¸ si mod vechi, folosind aceea¸ si sintax˘ a veche HTML. Pentru a aduce
cont ¸inut dinamic ˆ ın pagin˘ a, dezvoltatorul poate pune, de asemenea, elemente
JSP scripting pe pagin˘ a. Elementele de scripting sunt tag-uri, care ˆ ıncapsuleaz˘ a
logica, care este recunoscut˘ a de c˘ atre JSP. De exemplu, pentru a afi¸ sa data ultimei
modific˘ ari pe pagin˘ a, dezvoltatorul ar plasa urm˘ atorul cod ˆ ın pagin˘ a:
<B>This page was accessed at <%= new Date() %></B>
Exist˘ a trei tipuri diferite de elemente de scriptare:
expresii
scriptlets
declarat ¸ii
Element Scop
Expresii Cod Java, prins ˆ ıntre <%= ¸ si %>, folosit pentru a evalua declarat ¸iile
limbajul Java ¸ si inserarea rezultatului ˆ ın ie¸ sirea servlet-ului
Scriptlest Cod Java, prins ˆ ıntre <%= ¸ si %>de multe ori folosite pentru a crea
cont ¸inut dinamic
Declarat ¸ii Cod Java, prins ˆ ıntre <%!¸ si%>, folosit pentru a adauga cod ˆ ın
corpul de clas˘ a servlet
1.2. INTRODUCERE ^IN STRUTS WEB FRAMEWORK 23
Pentru a fi vazut˘ a ca o pagin˘ a JSP, fi¸ sierul trebuie s˘ a fie salvat cu extensia
.jsp. Cˆ and un client cere pagina JSP, containerul traduce pagina ˆ ıntr-un fi¸ sier
cod surs˘ a pentru un servlet Java ¸ si compileaz˘ a sursa ˆ ıntr-o clasa Java, la fel cum
ar face dac˘ a ar scrie un servlet de la zero. La rulare, recipientul poate verifica,
de asemenea, de la data ultimei modific˘ ari a fi¸ sierului JSP ˆ ın fi¸ sierul clas˘ a. Dac˘ a
fi¸ sierul JSP s-a schimbat de cˆ and a fost compilat, containerul va retraduce ¸ si va
reconstrui pagina din nou. Cel mai important lucru de ret ¸inut este c˘ a o pagin˘ a
JSP este de fapt doar un servlet. Tot ceea ce se poate face cu un servlet, se poate
face cu un JSP.
JSP tags
Elementele de scripting sunt doar una dintre cele dou˘ a modalit˘ at ¸i de a ge-
nera cont ¸inut dinamic JSP. Scriptlet ¸ii sunt rapizi, u¸ sori ¸ si puternici, dar cer ca
dezvoltatorii s˘ a amestece cod Java cu HTML. O alternativ˘ a popular˘ a este de a
utiliza tag-uri JSP.
Tag-urile JSP sunt amestecate cu HTML ¸ si pot fi folosite ca ¸ si ˆ ın cazul ˆ ın care
acestea au fost tag-uri HTML obi¸ snuite. O singur˘ a etichet˘ a JSP poate reprezenta
zeci de declarat ¸ii Java, dar tot dezvoltatorul trebuie s˘ a ¸ stie cum introduce tag-ul.
Codul de programare este ascuns ˆ ıntr-un fi¸ sier de clas˘ a Java.
Pentru a utiliza acela¸ si cod pe o alt˘ a pagin˘ a, dezvoltatorul trebuie doar s˘ a
introduc˘ a din nou tag-ul. Tag-urile JSP ofer˘ a refolosirea mult mai bine decˆ at
scriptlet ¸ii ¸ si pot fi mai u¸ sor de folosit pentru dezvoltatorii de pagini, deoarece
acestea arat˘ a ca tag-urile HTML familiare.
Un num˘ ar de biblioteci precompilate de JSP tag-uri sunt disponibile, care
vor efectua funct ¸ionalit˘ at ¸i utile pentru dezvoltatori. Printre acestea este noua
bibliotec˘ a standard JSP tag (JSTL). Acest nou standard ofer˘ a o bogat˘ a bibliotec˘ a
de tag-uri JSP reutilizabile.
Struts funct ¸ioneaz˘ a bine cu bibliotecile JSTL ¸ si alte tag-uri accesibile publicu-
lui, precum ¸ si orice s-ar putea scrie singur.
JavaBeans
JavaBeans sunt clase Java care respect˘ a un set de modele de design care le
face mai u¸ sor de utilizat, cu instrumente de dezvoltare ¸ si alte componente.
Modelele de design JavaBean ofer˘ a acces la starea intern˘ a a bean-ului, prin
dou˘ a metode:
accessors – folosite pentru a citi starea unui JavaBean;
mutators – folosite pentru a schimba starea unui JavaBean.
Mutators sunt ˆ ıntotdeauna precedate de set, urmat de numele propriet˘ at ¸ii.
Primul caracter din numele propriet˘ at ¸ii trebuie s˘ a fie majuscul˘ a. Valoarea retur-
nat˘ a este ˆ ıntotdeauna void; modific˘ a doar valorile de proprietate, ele nu le pot
24 CAPITOLUL 1. TEHNOLOGII FOLOSITE
prelua. Mutator-ul, pentru o proprietate simpl˘ a, preia doar un singur parametru
ˆ ın semnatura sa, care poate fi de orice tip. Mutators sunt de multe ori poreclit ¸i
setters dup˘ a prefixul lor. Exemplu:
public void setAge(Double age)
Un model de design similar este utilizat pentru a crea semnatura metodei
accesor. Metodele accesor sunt ˆ ıntotdeauna precedate de get, urmat de numele
propriet˘ at ¸ii. Primul caracter din numele propriet˘ at ¸ii trebuie s˘ a fie majuscul˘ a. Va-
loarea returnat˘ a se va potrivi cu parametrul metodeiˆ ın mutator-ul corespunz˘ ator.
Nu este surprinz˘ ator, accessors sunt adesea numit ¸i getters . Exemplu:
public Double getAge()
Sun a introdus JavaBeans pentru a lucra cu componente GUI, dar ele sunt
acum folosite de fiecare aspect de dezvoltare Java, inclusiv aplicat ¸ii web. Cˆ and
inginerii Sun au dezvoltat clase de extensie a tag-ului JSP, le-au proiectat pentru
a lucra cu JavaBeans. Datele dinamice pentru o pagin˘ a pot fi trecute ca un Java-
Bean, ¸ si tag-ul JSP poate folosi apoi propriet˘ at ¸ile de bean pentru a personaliza
ie¸ sirea.
Model 2
Caietul de sarcini Model 2, descris ca o arhitectur˘ a care utilizeaz˘ a servlet-uri
¸ si pagini JSP ˆ ımpreun˘ a ˆ ın aceea¸ si aplicat ¸ie. Termenul de Model 2 a disp˘ arut de
la versiuni mai tˆ arzii, dar acesta r˘ amˆ ane ˆ ın uz popular printre dezvoltatori web
Java.
ˆIn conformitate cu Model 2, servlet se ocup˘ a de acces la date ¸ si fluxul de
navigat ¸ie, ˆ ın timp ce paginile JSP se ocup˘ a de prezentare. Model 2 le permite
dezvoltatorilor Java ¸ si HTML s˘ a lucreze fiecare pe cont propriu la o parte a
aplicat ¸iei.
Cadrul Struts se bazeaz˘ a pe arhitectura Model 2. Acesta ofer˘ a un servlet con-
troler pentru a gestiona fluxul de navigat ¸ie t ¸i clase speciale pentru a ajuta accesul
la date. O important˘ a bibliotec˘ a personalizat˘ a este la pachet cu framework-ul
care-l face pe Struts u¸ sor de utilizat, cu pagini JSP.
1.2.3 Struts, v azut de sus
Struts folose¸ ste arhitectura Model 2. ActionServlet din Struts controleaz˘ a
fluxul navigat ¸iei. O alt˘ a clas˘ a Struts, Action, este folosit˘ a pentru a accesa clasele
de business. Cˆ and ActionServlet-ul prime¸ ste o cerere de la container, folose¸ ste
URI (sau ”cale”/”path”) pentru a determina ce Action va manevra cererea. Un
Action poate valida intr˘ arile ¸ si accesa stratul de business pentru a primi informat ¸ii
de la baza de date sau de la alte servicii de date.
1.2. INTRODUCERE ^IN STRUTS WEB FRAMEWORK 25
Pentru a valida intr˘ arile sau a le folosi pentru a aduce la zi baza de date, Action
trebuie s˘ a ¸ stie care valori au fost supuse spre examinare. Cu atˆ at mai bine decˆ at
a fort ¸a Action-ul pentru a trimite aceste valori ˆ ın afara cererii, ActionServlet-ul
le leag˘ a ˆ ıntr-un JavaBean. Intr˘ arile de bean-uri sunt subclase a clasei Action-
Form din Struts. ActionServlet-ul poate determina ce ActionForm folose¸ ste prin
aruncarea unei priviri la calea cererii, ˆ ın acela¸ si fel cum Action-ul a fost selectat.
Un ActionForm extinde org.apache.struts.action.ActionForm .
Fiecare cerere HTTP trebuie s˘ a r˘ aspund˘ a cu un r˘ aspuns HTTP. De obicei,
un Action Struts nu expediaz˘ a ci ˆ ınainteaz˘ a cererea c˘ atre o alt˘ a resurs˘ a, cum ar
fi o pagina JSP. Struts ˆ ınzestreaz˘ a o clas˘ a ActionFroward care poate fi folosit˘ a
pentru a stoca calea paginii sub un nume logic. Cˆ and a fost completat˘ a logica de
afacere, Action-ul selecteaz˘ a ¸ si returneaz˘ a un ActionForward c˘ atre servlet. Apoi
servlet-ul folose¸ ste calea stocat˘ a ˆ ın obiectul ActonForward pentru a apela pagina
¸ si a completa r˘ aspunsul.
Struts leag˘ a aceste detalii ˆ ıntr-un obiect ActionMapping. Fiecare ActionMap-
ping este relatat pe o cale specific˘ a. Cand calea este cerut˘ a, servlet-ul reface
obiectul ActionMapping. Maparea spune servlet-ului care dintre Action, Action-
Forms ¸ si ActionForwards s˘ a foloseasc˘ a.
Toate aceste detalii, Action, ActionForms, ActionForwards, ActionMappings
¸ si cˆ ateva alte lucruri sunt declarate ˆ ın fi¸ sierul struts-config.xml. ActionServlet-
ul cite¸ ste acest fi¸ sier la ˆ ınceput ¸ si creaz˘ a configurat ¸ia bazei de date. ˆIn timpul
rul˘ arii, Struts refer˘ a obiectele create cu fi¸ sierul de configurat ¸ie, nu fi¸ sierul ˆ ın sine.
Figura (1.10) ilustreaz˘ a cum aceste componente se contopesc.
Figura 1.10: Struts, v˘ azut de sus
Crearea unei simple aplicat ii
Dezvoltatorii ¸ si multi dintre noi ˆ ınv˘ at ¸˘ am prin exemple. Voi alc˘ atui o alpicat ¸ie
web funct ¸ional˘ a simpl˘ a. Aceasta va memora username-uri ¸ si parole.
26 CAPITOLUL 1. TEHNOLOGII FOLOSITE
Struts – Concret
Prima aplicat ¸ie Struts va fi o simpl˘ a aplicat ¸ie de ˆ ınregistrare. Utilizatorului i
se va afi¸ sa un ecran de ˆ ınregistrare care va cont ¸ine trei cˆ ampuri: username, parol˘ a
¸ si confirmarea parolei. O ˆ ınregistrare cu succes necesit˘ a ca cele dou˘ a parole s˘ a fie
identice. Dac˘ a ˆ ınregistrarea este cu succes, controloul coboar˘ a c˘ atre o pagin˘ a care
spune succesful! . Dac˘ a nu sunt identice, atunci pagina va spune failure . Acest
exemplu simplu este proiectat pentru a demonstra urm˘ atoarele:
Crearea de form-uri HTML
Capturarea intr˘ arilor dintr-un form HTML
Procesarea intr˘ arilor
Schimbarea controlului bazat pe intr˘ ari dinamice
Pentru a completa aplicat ¸ia, va fi nevoie de a crea:
un ActionForm
un Action
fi¸ sierul struts-config.xml
trei pagini.
Crearea ActionForm-ului
Un ActionForm este un JavaBean care extinde org.apache.struts.Action
Form . Acest obiect capteaz˘ a intr˘ arile din cˆ ampuri ¸ si le trimite prin request. Cˆ and
un browser web submite un form, creaz˘ a parametri ˆ ın request pentru fiecare
cˆ amp al form-ului. ActionForm-ul are o proprietate corespondent˘ a pentru fiecare
cˆ amp din HTML form. ActionServlet-ul potrive¸ ste parametrii ˆ ın cerere cu cu
propriet˘ at ¸i de pe ActionForm. Cˆ and corespund, ActionServlet apeleaz˘ a metoda
setter din proprietate ¸ si ˆ ıi paseaz˘ a valoarea din request.
ˆIn exemplul prezentat, cˆ ampul username din HTML form va avea nevoie de o
metod˘ a setUsername(String) . La fel ¸ si pentru password1 ¸ si password2. Aceste
metode sunt responsabile de popularea variabilelor, instant ¸e ascunse ˆ ın interiorul
RegisterForm-ului JavaBean. Codul surs˘ a este ar˘ atat ˆ ın Notarea (1.1). Se creaz˘ a
o clas˘ a RegisterForm.java care cont ¸ine codul afi¸ sat ˆ ın Notarea (1.1).
1.2. INTRODUCERE ^IN STRUTS WEB FRAMEWORK 27
Notarea 1.1 :RegisterForm.java
package app ;
import org . apache . s t r u t s . a c t i o n . ;
p u b l i c c l a s s RegisterForm e x t e n d s ActionForm f
p r o t e c t e d S t r i n g username ;
p r o t e c t e d S t r i n g password1 ;
p r o t e c t e d S t r i n g password2 ;
p u b l i c S t r i n g getUsername ( ) fr e t u r n t h i s . username ; g;
p u b l i c S t r i n g getPassword1 ( ) fr e t u r n t h i s . password1 ; g;
p u b l i c S t r i n g getPassword2 ( ) fr e t u r n t h i s . password2 ; g;
p u b l i c v o i d setUsername ( S t r i n g username ) ft h i s .
username = username ; g;
p u b l i c v o i d setPassword1 ( S t r i n g password ) ft h i s .
password1 = password ; g;
p u b l i c v o i d setPassword2 ( S t r i n g password ) ft h i s .
password2 = password ; g;
g
Crearea RegisterAction-ului
Un Action este o clas˘ a Java care extinde org.apache.struts.Action . Acesta
populeaz˘ a ActionForm-ul apoi ˆ ıl paseaz˘ a c˘ atre Action. Un Action este, ˆ ın gene-
ral, responsabil de validarea intr˘ arilor, accesarea informat ¸iei de business ¸ si deter-
minarea c˘ arui ActionForward s˘ a returneze servlet-ul. Cre˘ am o clas˘ a RegisterAc-
tion.java care cont ¸ine urm˘ atorul cod:
Notarea 1.2 :RegisterAction.java
package app ;
import org . apache . s t r u t s . a c t i o n . ;
import j a v a x . s e r v l e t . http . ;
import j a v a . i o . ;
p u b l i c c l a s s R e g i s t e r A c t i o n e x t e n d s Action f
p u b l i c ActionForward perform ( ActionMapping mapping ,
ActionForm form , H t t p S e r v l e t R e q u e s t req ,
H t t p S e r v l e t R e s p o n s e r e s ) f
// 1
RegisterForm r f = ( RegisterForm ) form ;
S t r i n g username = r f . getUsername ( ) ;
S t r i n g password1 = r f . getPassword1 ( ) ;
S t r i n g password2 = r f . getPassword2 ( ) ;
// 2
28 CAPITOLUL 1. TEHNOLOGII FOLOSITE
i f ( password1 . e q u a l s ( password2 ) ) f
t r y f
// 3
U s e r D i r e c t o r y . g e t I n s t a n c e ( ) . s e t U s e r ( username ,
password1 ) ;
r e t u r n mapping . f i n d F o r w a r d (" s u c c e s s ") ;
g
catch ( U s e r D i r e c t o r y E x c e p t i o n e ) f
r e t u r n mapping . f i n d F o r w a r d (" f a i l u r e ") ;
g
g
// 4
r e t u r n mapping . f i n d F o r w a r d (" f a i l u r e ") ;
g
g
La 1 intrarea ActionForm-ului este pasat˘ a c˘ atre RegisterForm. Apoi putem ex-
trage username, password1 ¸ si password2. Dac˘ a cele dou˘ a parole corespund la
2, se adaug˘ a utilizatorul ˆ ın UserDirectory la 3 ¸ si se returneaz˘ a ActionForward-
ul asociat cu success . UserDirectory este o clas˘ a ajutatoare care ˆ ınregistreaz˘ a
username-urile ¸ si parolele ˆ ıntr-un fi¸ sier de propriet˘ at ¸i standard. Altfel, se re-
turneaz˘ a ActionForward-ul failure la 4. Cˆ and se creaz˘ a fi¸ sierul struts-config la
pasul urm˘ ator, se specific˘ a obiectele ActionForward care reprezint˘ a success sau
failure .
Crearea sierului de congurat ie
Acest fi¸ sier cont ¸ine detaliile de care ActionServlet-ul are nevoie pentru a ma-
nevra cererile f˘ acute din aplicat ¸ie. ˆIn primul rˆ and, adaug˘ a /register pentru
atributul path ˆ ın elementul <action> . ActionServlet-ul folose¸ ste dinainte URI-
ul prin containerul web pentru a selecta corect clasa Action. Acest URI este
potrivit cu atributul path dintr-un ActionMapping. ˆIn acest caz, calea dat˘ a de
cerere trebuie s˘ a corespund˘ a cu /register dup˘ a eliminarea vreunui sufix sau
prefix. Prefixul sau sufixul este, de obicei, /do/ sau.do.ˆIn exemplul de fat ¸˘ a,
acesta va fi .do. Cˆ and URI are o extensie .do, containerul ¸ stie s˘ a trimit˘ a ce-
rerea c˘ atre ActionServlet-ul nostru. Struts taie automat extensia, a¸ sa c˘ a nu e
nevoie s˘ a o includ aici. Urm˘ atorul pas este de a ad˘ auga: registerForm atribu-
tului name din elementul <action> . Acest element folose¸ ste atributul name pen-
tru a indic˘ a ce bean din ActionForm va fi creat de ActionServlet ¸ si populat de
cˆ ampurile submitted. Apoi, ad˘ aug˘ am: app.RegisterAction atributului type ˆ ın
elementul <action> . Acest atribut este folosit de ActionServlet pentru a iden-
tifica Action-ul folosit pentru procesarea cererii. ˆIn acest punct, ˆ ıntr-un element
<forward> , se adaug˘ a success ˆ ın atributul name ¸ si/success.html ˆ ın atributul
path .ˆIn final, se adaug˘ a failure atributului name ¸ si /failure.html atributu-
luipath ale altor tag-uri <forward> . Aceste elemente vor crea obiectele Action-
1.2. INTRODUCERE ^IN STRUTS WEB FRAMEWORK 29
Forward-ul pe care le voi folosi pentru a modifica fluxul de control al aplicat ¸iei.
Elementul <forward> define¸ ste asociat ¸iile ˆ ıntre denumirile logice folosite ˆ ın Reg-
isterAction.
Notarea 1.3 :struts-config.xml
<txml v e r s i o n ="1.0" encoding="ISO 8859 1" t>
<!DOCTYPE s t r u t s c o n f i g PUBLIC
"
