Documente Academic
Documente Profesional
Documente Cultură
FACULTATEA DE ŞTIINTE
SPECIALIZAREA INFORMATICĂ
1
Dezvoltarea de aplicatii web folosind
limbajul de programare Java.
Framework- ul Struts.
Ce este Struts?
Platforma J2EE
2
dezvoltatorii si arhitectii sa lucreze cu fiecare dintre aceste API-uri. In
consecinta intreaga comunitate de programatori Java ar fi fost
fragmentata in grupuri izolate si acest fapt ar fi facut aproape
inposibila dezvolarea de aplicatii enterprise serioase in limbajul Java.
3
- JSP urile se pot crea simplu, creand un fisier text care
contine etichete de markup JSP (JSP markup tags).
- Filtrele se pot crea implementand interfata
javax.servlet.Filter.
JSP – uri
JSP urile sunt servleti deghizati! Asadar daca JSP urile sunt
servleti, de ce mai avem nevoie de ele?
4
simplu decat sa invete Java si Orientare pe Obiect. JSP pune la
dipozitie cateva tag-uri standard iar programatorii Java pot crea altele
specializate.
5
Sa consideram o pagina HTML care contine un hyperlink catre un
JSP. Cand utilizatorul da click pe hyperlink, JSP ul va fi invocat direct.
Acest lucru este ilustrat in figura 1.1. Containerul Servlet parseaza
JSP-ul si executa Servletul Java rezultat. JSP-ul contine in interiorul
lui cod si taguri pentru a accesa JavaBean-uri reprezentand partea
de model a unei aplicatii. JavaBean-urile din model contin atribute
care stocheaza valorile parametrilor HTTP din query string. Aditional
JSP-ul mai contine cod pentru conectarea la middle tier sau direct la
baza de date utilizand JDBC, pentru a prelua datele aditionale
necesare pentru a afisa pagina. Folosind datele stocate in JavaBean-
uri si alte clase ajutatoare, JSP-ul este apoi generat ca o pagina
HTML, si trimis utilizatorului ca raspuns.
6
Arhitectura denumita Modelul 2 – MVC
MVC este acronimul pentru Model View Controller. MVC isi are
originea in limbajul de programare SmallTalk si a reushit sa ocupe un
rol important in comunitatea Java. Modelul 2 JSP este de fapt un
MVC aplicat aplicatiilor web si in consecinta cele doua denumiri pot fi
folosite alternativ in lumea web. Figura 1.2 ilustreaza arhitectura
Modelului 2 (MVC).
Principala diferenta dintre Modelul 1 si Modelul 2 este aceea ca
in Modelul 2, un controlerul trateaza cererile utilizatorilor in loc de alt
JSP. Controlerul este implementat ca un servlet.
Cand un utilizator va face o cerere catre aplicatie se vor
executa urmatorii pasi:
1. Servletul Controller (controler) rezolva cererea
utilizatorului (acest lucru inseamna ca hyperlinkul din
pagina JSP trebuie sa trimita la controler)
2. Controlerul instantiaza apoi JavaBean-urile potrivite
bazandu- se pe parametri din request (si aditional
bazandu-se pe atributele aflate in sesiune)
3. JavaBean-urile comunica mai departe cu middle tier
sau direct cu baza de date pentru a pregati datele
cerute.
4. Controlerul seteaza JavaBean-ul pentru rezultat in unul
dintre contextele – request, session, application
7
5. Controlerul retrimite cererea catre urmatorul view (JSP)
bazandu-se pe URL-ul cererii
6. View – ul va utiliza JavaBean-ul rezultat in pasul 4
pentru a afisa datele.
De remarcat este faptul ca nu exista nici un fel de logica de
prezentare in JSP. Singura functie a JSP-ului in Modelul 2 este aceea
de a afisa datele din JavaBean-ul aflat intr-unul din scopurile
enumerate mai sus.
8
inregistrarea intr-un log (logare) a intrarii si iesirii unui utilizator din
aplicatie pentru fiecare cerere sau poate se doreste centralizarea
operatiunilor de delegare a cererilor catre alte pagini. Avand mai multi
servleti controler exista posibilitatea repetarii codului pentru aceste
operatiuni in toti servletii controler. Un singur controler pentru toata
aplicatia web va ofera posibilitatea de a centraliza toate aceste
operatiuni intr un singur loc, astfel codul fiind mult mai clar si mai usor
de intretinut.
Aplicatiile web bazate pe modelul 2 sunt usor de intretinut si
extins, din moment ce view-urile nu au legatura unele cu celelalte si
nu exista logica de prezentare in view. Modelul 2 ofera posibilitatea
definirii clare a rolurilor si responsabilitatilor in proiecte mari,
permitand o mai buna coordonare intre membrii unei echipe.
9
MVC cu controler configurabil
10
requestului. Aceste informatii sunt stocate in fisierul de proprietati ca
perechi cheie – valoare (key-value). Servletul controler incarca fisierul
de proprietati la pornire petru a gasi Request Handler-ul potrivit
pentru URL – ul fiecarei cereri.
Servletul controler foloseste Java Reflection pentru a instantia
Request Handlerul. In orice caz trebuie sa existe ceva comun intre
request handler-e pentru ca servletul sa poata instantia in mod
generic toate handler-ele. Parte comuna este ca toate Request
Handler-ele implementeaza aceiasi interfata pe care o vom numi
Handler Inteface. In cea mai simpla forma aceasta interfata are o
metoda denumita execute(). Controlerul servlet instantiaza
Request Handler-ul in metoda doGet() si ii invoca metoda
execute() utilizand Java Reflection. Metoda execute() invoca
niste metode business logic si apoi selecteaza urmatorul view care ii
va fi afisat utilizatorului. Controlerul servlet inainteaza apoi cererea
catre JSP ul selectat. Toate acestea se intampla in metoda doGet()
a controlerului, iar ciclul de viata al acestei metode ramane
intotdeauna neschimbat. Ce se schimba este metoda execute() a
Request Handlerului.
Modelul de arhitectura pe care este bazat frameworkul Struts
este asemanator cu cel prezentat mai sus. In loc de un fisier de
proprietati, ca in cazul de mai sus, Struts foloseste ca fiser de
configurare un fiser XML in care mai stocheaza si alte informatii utile.
11
cererii HTTP si metode get si set pentru aceste atribute. Pentru
fiecare cerere HTTP care va fi rezolvata utilizand frameworkul Struts
trebuie creata cate o clasa ActionForm extinzand clasa
org.apache.struts.action.ActionForm. De exemplu pentru o
cerere HTTP de forma: clasa MyForm care extinde
org.apache.struts.action.ActionForm va contine doua
atribute – firstName si lastName precum si metode get si set
pentru aceste campuri.
Pentru o mai buna intelegere a ActionForm-urilor putem spune
ca acestea sunt niste obiecte de transfer dinspre partea de view spre
partea de controler (View Data Transfer Object). Acestea sunt niste
obiecte care pastreaza datele din pagina HTML si le transfera in alte
clasa MyForm:
public MyForm() {
firstName = “”;
lastName = “”;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String s) {
this.firstName = s;
}
public String getLastName() {
return lastName;
}
public void setLastName(String s) {
this.lastName = s;
}
}
clase ale aplicatiei.
12
In terminologia Struts, Handler-ul se numeste Action si poate fi
creat extinzand clasa Action din pachetul
org.apache.struts.action.
Clasa Action este o clasa abstracta si defineste o singura
metoda denumita execute(). Acesta metoda trebuie suprascrisa in
actiunile create si se foloseste pentru ivocarea metodelor business
logic. Metoda execute() returneaza numele view-ului (JSP) care
urmeaza sa fie afisat utilizatorului. ActionServlet–ul inainteaza
cererea la view-ul selectat.
13
Instalarea serverului de aplicatii Tomcat si a fremeworkului
Struts
14
Componentele frameworkului Struts
Componente din categoria controler
ActionServlet-ul si clasele cu care colaboreaza reprezinta cea mai
importanta parte a framework-ului. Aceste clase sunt :
RequestProcessor, ActionForm, Action, ActionMapping
and ActionForward.
15
Ciclul de viata al unei cereri HTTP (request) in Struts
ActionServlet
Componenta centrala a framework-ului Struts este ActionServlet-
ul.Aceasta este o clasa care extinde javax.servlet.HttpServlet si
executa urmatoarele operatiuni:
1. La pornire, in metoda init(), citeste fiserul de configurare
Struts si il incarca in memorie
2. In metodele doGet() si doPost() intercepteaza cererile
HTTP si le trateaza corespunzator.
Numele fiserului de configurare Struts nu este batut in cuie. Este
doar o conventie ca acest fiser sa se numeasca struts-config.xml si
sa se afle direct in directorul WEB-INF al aplicatiei web. Acest fisier
se poate denumi oricum si poate fi pus in oricare subdirector din
WEB-INF, deoarece numele acestui fiser poate fi configurat in fiserul
web.xml.
Intrarea din fiserul web.xml care foloseste la configurarea
ActionServlet-ului si al fiserului de configurare Struts este
urmatoarea:
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/config/myconfig.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
In intrarea de mai sus fiserul de configurare Struts se gaseste
in directorul WEB-INF/config si se numeste myconfig.xml.
ActionServlet-ul va lua numele fiserului de configurare Struts ca un
parametru de initializare. La pornire, in metoda init()
ActionServlet-ul citeste fiserul de configurare Struts si creaza in
memorie obiecte de configurare potrivite (structuri de date).
Ca orice servlet ActionServlet-ul invoca metoda init() cand
primeste prima cerere HTTP. Operatia de incarcare a fisierului de
configurare Struts in obiecte de configurare dureaza mai mult. Daca
16
obiectele de configurare Struts ar fi create la prima cerere HTTP,
aceasta operatiune ar afecta performanta aplicatiei intarziind
raspunsul pentru primul utilizator. O alternativa ar fi specificarea
parametrului load-on-startup din web.xml, ca in exemplul de mai sus.
Specificand parametrul load-on-startup cu valoarea 1, se instiinteaza
containerul servlet ca trebuie sa cheme metoda init() pentru acest
servlet la pornirea lui.
A doua insarcinare pe care o are ActionServletul este aceea de
a intercepta cererile HTTP bazandu-se pe un pattern URL, si de a le
rezolva.
Pattern-ul URL poate fi ori o cale ori un sufix. Aceasta este
specificate utilizand atributul servlet-mapping in web.xml. Un exemplu
de declarare a unui servlet-mapping este urmatorul:
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
17