Sunteți pe pagina 1din 12

Aplicaii Integrate pentru ntreprinderi

Laborator 9
29.11.2011

Realizarea de aplicaii web folosind Java Servlets


Scopul laboratorului l reprezint folosirea mecanismelor oferite de
tehnologia Java Servlets pentru dezvoltarea de aplicaii (cu coninut dinamic)
care s ofere utilizatorilor aceeai funcionalitate de care ar beneficia prin
folosirea unor aplicaii care s solicite resurse (programe instalate) pe maina
unde sunt rulate. Aceste cerine se vor transfera mainii pe care este gzduit
aplicaia, funcionalitatea fiind accesibil printr-un client universal browser-ul.
1. Ce este un Java Servlet ?
2. Integrarea Java Servlets cu Apache Tomcat
3. Care este ciclul de via al unui Java Servlet ?
4. Care este structura unui Java Servlet ?
5. Cum se asigur interaciunea cu baza de date ntr-un Java Servlet ?
6. Cum se realizeaz controlul sesiunilor ?
1. Ce este un Java Servlet ?
Tehnologia Java Servlets este un mecanism prin care pot fi dezvoltate
aplicaii web folosind limbajul de programare Java, reprezentnd o alternativ
pentru CGI1 (Common Gateway Interface).
Avantajele utilizrii Java Servlets includ [1]: eficiena (iniializarea se face
doar la ncrcarea unui servlet, cererile fiind tratate prin apelarea metodei
service), persistena (dup ce este ncrcat, obiectele unui servlet ce pot conine
informaii din baza de date sunt disponibile ct timp acesta este n execuie,
ceea ce asigur o performan ridicat comparativ cu ncrcarea din baza de date
a informaiilor fiecare dat), portabilitate (asigurat de limbajul de programare
Java, astfel nct platforma pe care ruleaz aplicaia poate fi schimbat fr
modificarea codului surs), robustee (acces la toate mecanismele oferite de
limbajul de programare Java cu o ierarhie de excepii pentru tratarea erorilor
i colectarea memoriei disponibile), extensibilitate (fiind dezvoltat ntr-un limbaj
orientat obiect, un servlet poate fi extins potrivit cerinelor aplicaiei) i
securitate (conform modelului de securitate specific Java).
Un servlet reprezint deci o clas implementat n limbajul de programare
Java, utilizat pentru a extinde capabilitile unui server care gzduiete
aplicaii accesate conform modelului cerere-rspuns. Cea mai frecvent ntlnit
funcionalitate n legtur cu un servlet este legat de aplicaiile web, cu toate c
acesta poate rspunde oricrui tip de cereri. Prin urmare tehnologia Java Servlet
definete clase servlet adaptate protocolului HTTP.
Pachetele javax.servlet i javax.servlet.http ofer interfee i clase
pentru scrierea de Java Servlets. Orice servlet trebuie s implementeze interfaa
Servlet care definete metodele ce caracterizeaz ciclul de via al unui astfel de
obiect. Interfaa HttpServlet ofer metode precum doGet i doPost pentru a trata
servicii specifice protocolului HTTP.

1Ca tehnologie, CGI era caracterizat prin dependena de platform i lips de scalabilitate,
eliminate prin Java Servlets.

1
Aplicaii Integrate pentru ntreprinderi Semestrul de Toamn 2011
Laborator 9

2. Integrarea Java Servlets cu Apache Tomcat

Pentru a dezvolta aplicaii web folosind Java Servlets este necesar un


server web cruia s i fie transmise cereri2 pentru pagini de Internet ce se doresc
a fi afiate. Un astfel de server web trebuie s poat interpreta codul Java,
genernd etichete HTML care s fie transmise mai departe spre client.
n cadrul laboratorului se va utiliza serverul Apache Tomcat3.
Pentru configurare este necesar specificarea variabilelor de mediu4
JAVA_HOME i JRE_HOME n cazul n care ele nu sunt definite deja (n fiierul batch
setclasspath.bat Windows respectiv setclasspath.sh Linux) dup care
lansarea n execuie se face prin fisierul batch startup.bat (Windows) respectiv
startup.sh (Linux).
n momentul n care serverul Apache Tomcat ruleaz, n momentul n care
adresa de internet http://localhost:8080 este specificat n browser, ar trebui
afiat urmtoarea pagin:

Pagina web afiat atunci cnd ruleaz serverul web Apache Tomcat

Oprirea serverului web Apache Tomcat se face prin shutdown.bat, respectiv


./shutdown.sh.

2 O cerere este transmis n momentul n care n browser este precizat o pagin disponibil la
adresa unde este instalat serverul web.
3 Versiunea 7.0.23 care suport specificaia 3.0 pentru tehnologia Java Servlet poate fi descrcat

de la urmtoarea adres de Internet: http://tomcat.apache.org/download-70.cgi. Versiunea pentru


maina virtual Java trebuie s fie minim 1.6.
4 n Windows, specificarea variabilelor de mediu se face astfel:

set JAVA_HOME= C:\Program Files\Java\jdk1.7.0\


set JRE_HOME=C:\Program Files\Java\jdk1.7.0\jre\
n timp ce pe Linux trebuie specificate comenzile:
export JAVA_HOME=/home/user/jdk1.7.0/
export JRE_HOME=/home/user/jdk1.7.0/jre/

2
Aplicaii Integrate pentru ntreprinderi Semestrul de Toamn 2011
Laborator 9

Reiniializarea serverului web este necesar de fiecare dat cnd folosim


tehnologia Java Servlets atunci cnd realizm modificri la nivelul paginilor web
deoarece clasele sunt configurate eng. deployed (mpreun cu dependenele)
de fiecare dat cnd Apache Tomcat este lansat n execuie.
Sunt parcurse toate directoarele din webapps (unde sunt aplicaiile web) i
fiecare aplicaie n parte este configurat n contextul serverului web care tocmai
a fost lansat n execuie.
Nov 28, 2011 9:00:00 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory Laborator09_LibrarieVirtuala
Orice aplicaie web dezvoltat folosind
serverul Apache Tomcat trebuie plasat n
directorul webapps.
n cazul unei aplicaii web dezvoltate cu
Java Servlets, trebuie s existe un director
WEB-INF care s conin fiierul de configurare
web.xml.
Acesta conine numele aplicaiei web
(servlet-name) precum i clasa care conine
servlet-ul implementnd practic serviciul web
corespunztor (servlet-class)5. O astfel de clas
trebuie plasat obligatoriu n directorul
classes6. n cazul cnd aplicaia web folosete
biblioteci apelate n cadrul lansrii n execuie
(cum e cazul la interaciunea cu o baz de date
prin intermediul unui driver), atunci acestea
trebuie plasate n directorul lib7.
Structura de directoare Aplicaia va fi disponibil la adresa
n serverul Apache Tomcat http://localhost:8080/<locatie>/ClasaServlet/.
<web-app>
<servlet>
<servlet-name>NumeServlet</servlet-name>
<servlet-class>ClasaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>NumeServlet</servlet-name>
<url-pattern>/ClasaServlet</url-pattern>
</servlet-mapping>
</web-app>
Structura fiierului web.xml
Pot fi specificate mai multe clase Java Servlet corespunztoare paginilor
care sunt proiectate.

5 Opional, poate fi specificat un parametru load-on-startup care, atunci cnd are valoare pozitiv
indic ordinea n care sunt ncrcate clasele respectiv, las la latitudinea container-ului care
conine servlet-ul s ncarce clasele atunci cnd este necesar, dac este dat o valoare negativ.
6 n exemplul de fa exist i un director sources n care se gsesc sursele claselor i care conine

fiiere batch deploy.bat respectiv deploy.sh care compileaz clasele, le mut n directorul classes
i reiniializeaz serverul web Apache Tomcat astfel nct modificrile realizate la nivelul claselor
s fie vizibile n cadrul aplicaiei.
7 Totui, n aceast situaie, ncrcarea driver-ului trebuie s se fac explicit (prin apelarea

metodei Class.forName(...)), ntruct serverul Apache Tomcat nu realizeaz acest operaie


atunci cnd aplicaia web este configurat.

3
Aplicaii Integrate pentru ntreprinderi Semestrul de Toamn 2011
Laborator 9

3. Care este ciclul de via al unui Java Servlet ?


Ciclul de via al unui Java Servlet este controlat de mediul n care
servlet-ul a fost configurat.
Atunci cnd o cerere este asociat unui servlet, container-ul care conine
servlet-ul realizeaz urmtoarele aciuni [2]:
1. dac nu exist o instan a servlet-ului
a. ncarc clasa servlet;
b. creaz o instan a clasei servlet;
c. iniializeaz instana clasei servlet prin apelarea metodei init;
2. apeleaz metoda service avnd ca parametri obiecte cerere i rspuns.
n condiiile n care este necesar tergerea servlet-ului, este apelat
metoda destroy a acestuia.

Ciclul de via pentru un Java Servlet [3]

Se pot defini obiecte care reacioneaz la evenimentele din ciclul de via


al unui Java Servlet (folosind adnotarea @WebListener):

Obiect Eveniment Interfa (ce trebuie) Implementat Obiect Eveniment


creare, javax.servlet.ServletContextListener ServletContextEvent
distrugere
aplicaie
operaii
web
asupra javax.servlet.ServletContextAttributeListener ServletContextAttributeEvent
atributelor
creare,
distrugere, javax.servlet.http.HttpSessionListener
HttpSessionEvent
activare, javax.servlet.http.HttpSessionActivationListener
sesiune dezactivare
operaii
asupra javax.servlet.http.HttpSessionAttributeListener HttpSessionBindingEvent
atributelor
procesarea javax.servlet.ServletRequestListener ServletRequestEvent
cererii
cerere operaii
asupra javax.servlet.ServletRequestAtrributeListener ServletRequestAttributEvent
atributelor

4
Aplicaii Integrate pentru ntreprinderi Semestrul de Toamn 2011
Laborator 9

Exemplu

Se dorete dezvoltarea unei aplicaii care s implementeze funcionalitatea


pentru o librrie virtual.
Aplicaia Librrie Virtual va fi accesat de un utilizator tip administrator
(care va gestiona8 prin intermediul aplicaiei informaiile din baza de date) i
de un utilizator tip client, care va plasa o comand9 dup ce a specificat un
anumit co de cumprturi dup consultarea catalogului de produse.

Structura conceptual a bazei de date

Au fost definite clase Java Servlet corespunztoare paginilor din aplicaie:


pagina de autentificare (LoginServlet) de unde, pe baza tipului de utilizator
identificat pot fi accesate pagina de administrare (AdministratorServlet)
respectiv pagina client (ClientServlet).

8 Operaiile realizate un utilizator de tip administrator sunt adugare, editare i tergere


informaii pentru oricare dintre tabelele din baza de date.
9 O comand este definit prin combinaia (id_comanda, pozitie), unde id_comanda reprezint

identificatorul comenzii (un numr de ordine) n timp ce pozitie specific un produs din cadrul
comenzii respective (comanda este format din unul sau mai multe produse).

5
Aplicaii Integrate pentru ntreprinderi Semestrul de Toamn 2011
Laborator 9

4. Care este structura unui Java Servlet ?


import javax.servlet.*;
import javax.servlet.http.*;
...

public class CatalogServlet extends HttpServlet


{
final public static long serialVersionUID = 10001000L;

...

public void init(ServletConfig config) throws ServletException


{
super.init(config);
}

public void doPost(HttpServletRequest request,


HttpServletResponse response)
throws ServletException, IOException
{
ArrayList<String> values = new ArrayList<String>();

...

Enumeration parameters = request.getParameterNames();

while(parameters.hasMoreElements())
{
String parameter = (String)parameters.nextElement();
if (parameter.contains("..."))
values.add(request.getParameter(parameter)));
...
}

response.setContentType("text/html");

PrintWriter pw = new PrintWriter(response.getWriter());

displayForm(pw);

pw.close();
}

public void doGet(HttpServletRequest request,


HttpServletResponse response)
throws ServletException, IOException
{
...
}

public void destroy()


{
...
}
}

ntruct un servlet se gsete pe un server care poate fi accesat de ctre


mai muli clieni simultan, trebuie asigurat sincronizarea resurselor partajate
(variabile ale claselor, fiiere, conexiuni la baza de date sau la reea).

6
Aplicaii Integrate pentru ntreprinderi Semestrul de Toamn 2011
Laborator 9

HttpServlet este o clas abstract prin care pot fi creai servlei HTTP care
s funcioneze n contextul unei aplicaii web.
public abstract class HttpServlet
extends GenericServlet implements java.io.Serializable
Orice clas derivat din HttpServlet trebuie s implementeze cel puin
una dintre metodele:
doGet, dac servlet-ul trateaz cereri HTTP GET;
doPost, dac servlet-ul trateaz cereri HTTP POST;
doPut, dac servlet-ul trateaz cereri HTTP PUT;
doDelete, dac servlet-ul trateaz cereri HTTP DELETE;
init i destroy10, pentru a gestiona resursele alocate n timpul n care
servlet-ul este n execuie;
getServletInfo, folosit de servlet pentru a oferi informaii despre el;
Nu este necesar implementarea metodei service (apelat atunci cnd
exist o instan a clasei Servlet), deoarece este definit n clasa abstract
HttpServlet, implementarea apelnd mai departe metoda responsabil de tipul
de cerere HTTP11.
Un servlet se gsete de regul pe un server capabil s ruleze mai multe
fire de execuie, astfel nct n condiiile unor cereri simultane, trebuie
sincronizat accesul la resurse partajate, cum ar fi date din memorie (variabile tip
instan sau clase) sau obiecte externe (fiiere, conexiuni la baze de date sau
conexiuni n reea).

Tratarea cererilor de ctre un servlet generic / servlet HTTP [3]


Cteva dintre metodele mai folosite ale clasei HttpServletRequest sunt:
getContentType()12, getCookies(), getHeaderNames(), getHeaders(), getSession()
getInputStream()12, getMethod(), getParameter()12, getParameterNames()12.
Metodele cele mai folosite din clasa HttpServletResponse sunt motenite
din clasa ServletResponse: flushBuffer(), get/setBufferSize(),
get/setContentType() getOutputStream(), setCharacterEncoding(), dar i proprii:
addCookie(), get/setHeader(), get/setStatus().

10 n general, n metodele init i destroy sunt alocate i dezalocate resurse partajate cum ar fi
conexiunea la baza de date sau accesul la fiiere.
11 De asemenea, nu este necesar implementarea metodelor doOptions i doTrace.
12 Aceste metode sunt motenite din clasa ServletRequest.

7
Aplicaii Integrate pentru ntreprinderi Semestrul de Toamn 2011
Laborator 9

Pentru a se defini un servlet n cadrul unei aplicaii web poate fi folosit


adnotarea @WebServlet13 ce poate conine metadate referitoare la locaia de unde
este disponibil componenta respectiv (se folosesc atributele urlPatterns/value14
toate celelalte atribute fiind opionale). O clas servlet trebuie s extind clasa
javax.servlet.http.HttpServlet.
Metoda init() este apelat (de ctre container-ul care conine servlet-ul)
dup ncrcarea i crearea unei instane a clasei Servlet i nainte de a procesa
cereri i rspunsuri prin care este realizat comunicaia cu un client. Aici,
serverul va realiza operaii care trebuie executate doar o dat (configurri,
iniializri ale unor resurse15). n cazul n care procesul de iniializare nu poate fi
completat, se va arunca o excepie de tipul UnavailableException.
Funcionalitatea pus la dispoziie de ctre un servlet este implementat
n metoda service16 a clasei GenericServlet, prin apelarea metodelor
corespunztoare doMethod() (unde Method poate avea aa cum am vzut mai sus
valorile Get, Post, Put, Delete, Options sau Trace) ale unui obiect HttpServlet
sau prin metode specifice protocolului definite de o clas care implementeaz
interfaa Servlet. O metod serviciu va primi informaiile din cerere (obiect tip
HttpServletRequest) apelnd getParameterNames()/getParameter() i va transmite
informaiile n rspuns (obiect tip HttpServletResponse) folosind un obiect
PrinterWriter asociat acestuia (obinut prin metoda getWriter()).
O cerere conine datele transmise de la client ctre servlet i trebuie s
implementeze interfaa ServletRequest, unde sunt definite metode pentru
accesarea de: parametri (pentru comunicarea de informaii ntre clieni / servlei)
atribute instane ale unor obiecte (folosite la comunicarea dintre un container
al unui servlet i servlet sau pentru comunicarea ntre mai muli servlei) i
informaii despre protocolul prin care este transmis cererea sau despre locaie17.
Obiectul HttpServletRequest transmis prin cerere conine URL-ul cererii18,
antetele HTTP i interogarea format din perechi de parametri i valori.
Un rspuns conine datele transmise de la servlet ctre client i trebuie s
implementeze interfaa ServletResponse, unde sunt definite metode pentru
obinerea unui flux prin care se poate realiza comunicarea cu clientul19,
indicndu-se tipul de coninut (prin metoda setContentType, al crei parametru
este text/html), dac se aloca o zon de memorie (metoda setBufferSize() ofer
un timp nainte de stabilirea unor coduri de stare) i informaii despre locaie.

13 Aceast adnotare este definit n pachetul javax.servlet.annotation.*.


14 Atributul value este folosit n cazul n care nu mai sunt definite i alte atribute ale adnotrii,
iar n caz contrar se folosete atributul urlPatterns.
15 Se poate folosi atributul initParams al adnotrii @WebServlet ce conine o adnotare @WebInitParam.
16 Denumirea de metod serviciu este folosit pentru orice metod dintr-o clas servlet care ofer

o funcionalitate pentru un client.


17 Exist posibilitatea de a analiza datele folosind un obiect BufferedReader creat dintr-un obiect

ServletInputStream ntors de metoda getInputStream.


18 URL-ul cererii are forma http://[adresa]:[port]/[cale]?[interogare] i conine: calea contextual

(contexul aplicaiei web n care ruleaz servlet-ul), calea ctre servlet (care indic componenta
care proceseaz cererea) precum i alte informaii. Acestea pot fi obinute apelnd metodele:
getContextPath, getServletPath i getPathInfo.
19 Pentru transmiterea de date de tip caracter se folosete un obiect PrinterWriter ntors de

metoda getWriter, n timp ce pentru transmiterea de date binare se folosete un obiect


ServletOutputStream ntors de metoda getOutputStream.

8
Aplicaii Integrate pentru ntreprinderi Semestrul de Toamn 2011
Laborator 9

Obiectul HttpServletResponse are cmpuri care reprezint antete HTTP ce conin


coduri de stare, pentru a indica motivele pentru care o cerere nu poate fi
satisfcut sau faptul c s-a realizat redirecionarea ctre alt resurs ca i
pentru transmiterea unor obiecte ce vor reine informaii specifice aplicaiei
(eventual, legate de sesiune).
Un container ce conine un servlet poate determina distrugerea acestuia
(n cazul n care se realizeaz colectarea memoriei disponibile sau atunci cnd
acesta se nchide), apelndu-se metoda destroy din interfaa Servlet. Aici toate
resursele utilizate de ctre servlet trebuie eliberate, asigurndu-se i persistena
prin reinerea informaiilor necesare n baza de date. Toate metodele serviciu
corespunztoare unui servlet trebuie s fie terminate atunci cnd container-ul
urmeaz s l distrug. Astfel, metoda destroy este apelat doar dup ce toate
metodele serviciu s-au terminat sau dup expirarea unei anumite perioade
stabilit de server. Trebuie ca toate firele de execuie pe care sunt realizate
operaii de ctre server s se termine atunci cnd este apelat metoda destroy20.
5. Cum se asigur interaciunea cu baza de date ntr-un Java Servlet ?
Ca n orice aplicaie Java, accesul la baza de date se face folosind metodele
puse la dispoziie prin API-ul JDBC (pachetul java.sql.*), biblioteca ce conine
driver-ul de conectare fiind plasat n directorul lib din structura aplicaiei.
import java.sql.*;
import java.util.*;
import java.io.*;

public class DataBaseConnection


{
private String DataBase =
"jdbc:mysql://localhost/librarie_virtuala?...";
private Connection connection;

public void openConnection()


{
try
{
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(DataBase);
}
catch (Exception e) { e.printStackTrace(); }
}

public void closeConnection()


{
try
{
connection.close();
}
catch (Exception e) { e.printStackTrace(); }
}

20 O soluie ar fi contorizarea numrului de fire de execuie care ruleaz i invocarea


Thread.sleep() ct timp acestea nu s-au terminat.

9
Aplicaii Integrate pentru ntreprinderi Semestrul de Toamn 2011
Laborator 9

public String select(String table, String where, String order)


{
String result = "<table border=\"1\">";

ArrayList<String> columns = new ArrayList<String>();


StringTokenizer values =
new StringTokenizer (getColumns(table),",");

while (values.hasMoreTokens())
columns.add(values.nextToken());

String query = "SELECT "+getColumns(table)+


" FROM "+table+
((where!=null && !where.equals(""))?(" WHERE "+where):"")+
((order!=null && !order.equals(""))?(" ORDER BY "+order):"");

result += "<tr>";

for (String column: columns)


result += "<td>"+column+"</td>";

result += "</tr>";

try
{
Statement statement =
connection.createStatement
(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet source = statement.executeQuery(query);

while (source.next())
{
result += "<tr>";
for (String column: columns)
result += "<td>"+source.getString(column)+"</td>";
result += "</tr>";
}
}
catch (Exception e) { e.printStackTrace(); }

result += "</table>";

return result;
}
...
}

6. Cum se realizeaz controlul sesiunilor ?


Protocolul HTTP21 este un protocol fr stri fiind caracterizat prin cereri
i rspunsuri ca tranzacii izolate.
Problema apare n momentul cnd trebuie s se coreleze mai multe
accesri (care provin de la acelai utilizator).
Soluiile presupun utilizarea de cmpuri ascunse, rescrierea URL-urilor
pentru a include parametrii suplimentari, utilizarea de cookie-uri sau folosirea
unor instrumente de urmrire a sesiunii.

21Spre diferen de protocolul FTP care este un protocol cu stri (clientul se conecteaz la server,
realizeaz operaiile pe baza conexiunii dup care se realizeaz deconectarea).

10
Aplicaii Integrate pentru ntreprinderi Semestrul de Toamn 2011
Laborator 9

Cmpurile ascunse pot fi coninute n formularele din paginile HTML


(elemente de tip <INPUT type=hidden ...>), dar au dezavantajul c pot fi
identificate cu uurin.
Rescrierea URL-urilor presupune adugarea unei (aceleiai) informaii la
URL-urile paginilor care sunt transmise utilizatorului, informaia fiind primit
automat de server pentru cererile din pagina respectiv.
Ambele soluii presupun generarea dinamic a paginilor ca i coninerea
unui formular.
Cookie-urile sunt fiiere care conin perechi de tipul <cheie, valoare>,
fiind create de server i transmise ca instruciuni n antetul mesajului HTTP
transmis ca rspuns.
n pachetul javax.servlet.http este definit clasa Cookie:
public class Cookie
extends java.lang.Object
implements java.lang.Cloneable, java.io.Serializable

avnd un constructor care primete dou iruri de caractere reprezentnd cheia,


respectiv valoarea.
Pentru un obiect de tip Cookie se poate stabili numele i valoarea (metodele
set/get Name i Value), timpul de expirare, domeniul sau calea, acesta putnd fi
inclus ntr-un obiect de tip HttpServletResponse:
response.addCookie(cookie);

Cookie-urile pot fi obinute prin metoda getCookies() implementat n


clasa HttpServletRequest.
Cookie[] cookies = request.getCookies();

n pachetul javax.servlet.http este definit i interfaa HttpSession, care


creaz un singur obiect pentru o sesiune, putnd stabili anumite valori pentru
identificarea conexiunii dintre client i server, legtura fiind realizat prin cookie
(dac sunt acceptate de client) sau rescrierea URL-urilor.
HttpSession session = request.getSession(true);

Metoda getSession()22 ntoarce sesiunea asociat unei cereri, sau dac nu


exist o sesiune asociat cererii, aceasta este creat, dac se specific astfel.
Obinerea atributelor este realizat prin metodele getAttributeNames(),
respectiv getAttribute(String), iar stabilirea lor prin metoda
setAttribute(String,Object). Totodat, un atribut poate fi eliminat prin metoda
removeAttribute(String).
ntruct un client HTTP nu poate specifica momentul n care sesiunea nu
mai este necesar, este asociat un timp de expirare (prin metodele set/get
MaxInactiveInterval), astfel nct resursele utilizate de sesiune s poat fi
refolosite. O sesiune nu va expira n cazul n care este accesat periodic
(frecvena fiind mai mare dect timpul de expirare) prin metodele serviciu care
iniializeaz (din nou) perioada n care sesiunea poate fi utilizat. Totodat,
atunci cnd interaciunea cu un client HTTP este ncheiat, se poate folosi
metoda invalidate pentru a distruge sesiunea elibernd resursele folosite.

22 Metoda getSession poate fi apelat i fr parametri: getSession() = getSession(true).

11
Aplicaii Integrate pentru ntreprinderi Semestrul de Toamn 2011
Laborator 9

Activitate de Laborator

[0p] 1. S se instaleze baza de date prin rularea script-ului (specific)


Laborator09_LibrarieVirtuala.sql.
[0p] 2. S se specifice variabilele de mediu JAVA_HOME i JAVA_JRE n script-urile
setClasspath[.bat|.sh] (din directorul bin al serverului Apache Tomcat).
[0p] 3. S se copieze aplicaia Laborator09_LibrarieVirtuala n directorul
webapps al serverului Apache Tomcat.
[0p] 4. S se completeze n clasa DataBaseConnection utilizatorul i parola pentru
accesarea bazei de date.
[0p] 5. S se dezvolte aplicaia prin rularea script-ului deploy[.bat|.sh] din
directorul scripts.
[0p] 6. S se testeze aplicaia prin accesarea adresei
http://localhost:8080/Laborator09_LibrarieVirtuala/LoginServlet.
n script-ul Laborator09_LibrarieVirtuala.sql exist exemple de utilizatori care pot fi
folosite pentru accesarea paginilor de administrator, respectiv de client.
[4p] 7. n clasa ClientServlet, metoda doPost, s se determine coninutul coului
de cumprturi, innd cont de situaia n care pentru un produs care exist deja
n coul de cumprturi se poate actualiza cantitatea.
n situaia n care solicitarea pentru un produs depete stocul existent, aceasta nu va fi
luat n considerare.
[1p] 8. n clasa ClientServlet, metoda displayForm, s se afieze coninutul
coului de cumprturi.
[1p] 9. S se adauge un buton prin care se poate specifica o comand (o comand
conine produsele selectate n coul de cumprturi).
[4p] 10. n clasa ClientServlet, metoda doPost, s se implementeze operaia
pentru transmiterea unei comenzi:
se nregistreaz comanda n baza de date;
stocurile sunt actualizate corespunztor;
coul de cumprturi este golit.

Bibliografie
[1] James Goodwill, Developing Java Servlets Web Applications with servlets
and JSP, 2nd Edition, SAMS, 2001
[2] Eric Jendrock, Ian Evans, Devika Gollapudi, Kim Haase, Chinmayee Srivathsa,
The Java EE 6 Tutorial, Basic Concepts, 4th Edition, Addison Wesley, 2011
[3] Java Servlets School of Electronic Engineering, Dublin City University,
http://wiki.eeng.dcu.ie/ee448/g2/850-EE.html

12

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