Aplicatii Integrate pentru Intreprinderi an universitar...

52
Laboratorul 07 Realizarea de aplicații web folosind Java Servlets Aplicaţii Integrate pentru Întreprinderi (AIPI) Semestrul de Toamnă 2014 Departamentul de Calculatoare

Transcript of Aplicatii Integrate pentru Intreprinderi an universitar...

Laboratorul 07Realizarea de aplicații web

folosind Java Servlets

Aplicaţii Integrate pentru Icircntreprinderi (AIPI)Semestrul de Toamnă 2014

Departamentul de Calculatoare

Conținut

Implementarea aplicaţiilor web folosind Java Enterprise Edition

Serverul HTTP Apache Tomcat 8x

Tehnologia Java Servlets ndash aspecte generaleo Ciclul de viaţă al unui Java Servlet

o Structura unui Java Servlet

Implementarea unor funcționalități complexe

Interfaţarea Java Servlets cu un sistem de gestiune pentru baze de date

Mecanisme pentru gestiunea stării icircn Java Servlets

Implementarea aplicaţiilor web icircn Java Enterprise Edition aplicații webo extensie dinamică a unui server (web de aplicații)

o transferă cerințele cu privire la resurse (programe instalate) serverului pe care sunt găzduite funcționalitatea oferită fiind accesibilă printr-un client universal (browser-ul)

o clasificare orientate pe prezentare ndash pagini Internet interactive descrise folosind limbaje de adnotare

(HTML XML) avacircnd conținut dinamic generat ca răspuns la cererile transmise de utilizator

bull ex Facelets Java Server Faces

orientate pe servicii ndash implementează funcționalitatea unui serviciu web

bull ex Java Servlets (date nontextuale gestiunea controlului altor tipuri de aplicații web)

orientate pe prezentare larr orientate pe servicii

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

aplicații webo componente Java Servlets

pagini Internet JSF (JavaServer Faces) JSP (Java Server Pages)

servicii web (JAX-WS JAX-RS)

+ servicii container (gestiune cereri concurență securitate gestiunea ciclului de viață)

o resurse statice (imagini foi de stil)

o clase ajutătoare

o biblioteci

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

Sursa The Java EE 7 Tutorial Release 7 for Java EE Platform August 2014

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

cererile HTTP ale clienților transmise de browser sunt transformate de serverul web icircntr-un obiect HttpServletRequest

cererea HttpServletRequest este transmisă unei componente web

pentru a genera conținut dinamic componenta web poate interacționao cu o clasă Java Beans

o cu o bază de date

răspunsul este convertit icircntr-un obiect HttpServletResponse

serverul web transformă obiectul HttpServletResponse icircntr-un răspuns HTTP care va putea fi vizualizat icircn browser

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

configurarea aplicațiilor webo aspecte ale comportamentului acestora icircn diferite situații

o sunt icircncărcate la instalarea (eng deploy) aplicației web icircn contextul containerului

omecanisme adnotări Java

fișiere XML (descriptorul de instalare al aplicației web)

bull trebuie să respecte schemele specificației Java Servlet

Serverul HTTP Apache Tomcat 8x server HTTPo container pentru Java Servletso arhitectură modulară

primește cereri și generează răspunsuri (documente HTML) din cadrulclaselor Java Servleto paginile JSP JSF ndash transformate automat la clasele Java Servlets asociate atunci cacircnd

sunt accesate

versiunea stabilă 8015o implementează specificațiile Java Servlets 31

JavaServer Pages 23

Expression Language 30

WebSocket 11

o aplicațiile web trebuie scrie folosind minim Java 7

Serverul HTTP Apache Tomcat 8xArhitectura

serviciu rarr unul sau mai multi conectori la motorul serverului care poate rula pe mai multe mașinio HTTP 11 comunicația client-server

protocolul HTTP (portul 8080)

o AJP 13 comunicația dintre serverul Tomcat și

serverul Apache HTTP

protocolul AJP (Apache JServ Protocol) ndashportul 8009

container lt motor lt gazdă lt context relațiile au multiplicitatea 1n

motor Catalina gazda localhost

Sursa httpwww3ntuedusghomeehchuaprogram

minghowtoTomcat_Morehtml

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (1)

bin ndash script-uri apelate la pornirea și oprirea serverului webo startup shutdown [bat|sh] ndash lansarea icircn execuție oprirea serverului

o setClasspath [bat|sh] ndash JAVA_HOME JRE_HOME

conf ndash fișiere de configurare aplicabile tuturor aplicațiilordin contextul serverului webo catalinapolicy

o catalinaproperties loggingproperties

o serverxml webxml contentxml tomcat-usersxml

o cacircte un director pentru fiecare motor conținacircnd subdirectoare pentrutoate gazdele

lib ndash biblioteci comune folosite de toate aplicațiileo servlet-apijar ndash Java Servlet

o jasperjar jasper-eljar ndash Java Server Pages EL

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (2)

logs ndash jurnale specificeomotorul Catalina

o gazdele pe care le gestionează

o aplicațiile manager host-manager

o jurnalul de acces

webapps ndash locația icircn care vor fi plasate aplicațiile fiind accesate de serverul web Apache Tomcat

work ndash director de lucru ce conține clasele Java Servlet corespunzătoare documentelor JSF JSPo organizarea se face pe motor gazde configurate icircn cadrul motorului aplicații

temp ndash diferite resurse temporare

Serverul HTTP Apache Tomcat 8xConfigurare (1) binsetClasspath[bat|sh] ndash variabilele de mediu JAVA_HOME JRE_HOME

oWindowsset JAVA_HOME=CProgram FilesJavajdk180_25

set JRE_HOME=CProgram FilesJavajdk180_25jre

o Linuxexport JAVA_HOME=usrlibjvmdefault-java

export JRE_HOME=usrlibjvmdefault-javajre

confserverxml

ltHost name=localhost appBase=webapps unpackWARs=true autoDeploy=truegt

o webapps ndash director de bază unde vor fi dezvoltate aplicațiile

o unpackWARs ndash dezarhivarea aplicațiilor dezvoltate ca war (Web Archive)

o autoDeploy ndash instalarea automată a aplicațiilor dupa plasarea acestora icircn directorul corespunzător

Serverul HTTP Apache Tomcat 8xConfigurare (2) configurarea utilizatorilor (conftomcat_usersxml)o implicit nu conține nici un fel de roluri utilizatori

o un utilizator nu trebuie să aibă drepturi corespunzătoare mai multor roluriltxml version=10 encoding=utf-8gt

lttomcat-usersgt

ltrole rolename=manager-gui gt

ltrole rolename=manager-status gt

ltrole rolename=manager-script gt

ltrole rolename=manager-jmx gt

ltrole rolename=admin-gui gt

ltrole rolename=admin-script gt

ltuser username=admin password=admin roles=manager-gui admin-gui manager-status manager-script admin-script manager-jmx gt

lttomcat-usersgt

Serverul HTTP Apache Tomcat 8xConfigurare (3) tipuri de utilizatorio manager-gui ndash interfața grafică cu utilizatorul httplocalhost8080managerhtml sau Manager App

o manager-status ndash informații despre starea serverului httplocalhost8080managerserver sau Server Status

o manager-script ndash interfața icircn mod text prin care pot fi transmise comenzi prinparametrii din URL (solicitat de unele medii integrat de dezvoltare) httplocalhost8080managertextcomandaparametri

o comanda list (afisare lista aplicații) deploy (dezvoltare aplicații)

o parametri ndash contextul aplicației pentru care se dă comanda

o manager-jmx ndash acces la interfața JMX httplocalhost8080managerjmxproxycomanda=parametri

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Conținut

Implementarea aplicaţiilor web folosind Java Enterprise Edition

Serverul HTTP Apache Tomcat 8x

Tehnologia Java Servlets ndash aspecte generaleo Ciclul de viaţă al unui Java Servlet

o Structura unui Java Servlet

Implementarea unor funcționalități complexe

Interfaţarea Java Servlets cu un sistem de gestiune pentru baze de date

Mecanisme pentru gestiunea stării icircn Java Servlets

Implementarea aplicaţiilor web icircn Java Enterprise Edition aplicații webo extensie dinamică a unui server (web de aplicații)

o transferă cerințele cu privire la resurse (programe instalate) serverului pe care sunt găzduite funcționalitatea oferită fiind accesibilă printr-un client universal (browser-ul)

o clasificare orientate pe prezentare ndash pagini Internet interactive descrise folosind limbaje de adnotare

(HTML XML) avacircnd conținut dinamic generat ca răspuns la cererile transmise de utilizator

bull ex Facelets Java Server Faces

orientate pe servicii ndash implementează funcționalitatea unui serviciu web

bull ex Java Servlets (date nontextuale gestiunea controlului altor tipuri de aplicații web)

orientate pe prezentare larr orientate pe servicii

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

aplicații webo componente Java Servlets

pagini Internet JSF (JavaServer Faces) JSP (Java Server Pages)

servicii web (JAX-WS JAX-RS)

+ servicii container (gestiune cereri concurență securitate gestiunea ciclului de viață)

o resurse statice (imagini foi de stil)

o clase ajutătoare

o biblioteci

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

Sursa The Java EE 7 Tutorial Release 7 for Java EE Platform August 2014

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

cererile HTTP ale clienților transmise de browser sunt transformate de serverul web icircntr-un obiect HttpServletRequest

cererea HttpServletRequest este transmisă unei componente web

pentru a genera conținut dinamic componenta web poate interacționao cu o clasă Java Beans

o cu o bază de date

răspunsul este convertit icircntr-un obiect HttpServletResponse

serverul web transformă obiectul HttpServletResponse icircntr-un răspuns HTTP care va putea fi vizualizat icircn browser

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

configurarea aplicațiilor webo aspecte ale comportamentului acestora icircn diferite situații

o sunt icircncărcate la instalarea (eng deploy) aplicației web icircn contextul containerului

omecanisme adnotări Java

fișiere XML (descriptorul de instalare al aplicației web)

bull trebuie să respecte schemele specificației Java Servlet

Serverul HTTP Apache Tomcat 8x server HTTPo container pentru Java Servletso arhitectură modulară

primește cereri și generează răspunsuri (documente HTML) din cadrulclaselor Java Servleto paginile JSP JSF ndash transformate automat la clasele Java Servlets asociate atunci cacircnd

sunt accesate

versiunea stabilă 8015o implementează specificațiile Java Servlets 31

JavaServer Pages 23

Expression Language 30

WebSocket 11

o aplicațiile web trebuie scrie folosind minim Java 7

Serverul HTTP Apache Tomcat 8xArhitectura

serviciu rarr unul sau mai multi conectori la motorul serverului care poate rula pe mai multe mașinio HTTP 11 comunicația client-server

protocolul HTTP (portul 8080)

o AJP 13 comunicația dintre serverul Tomcat și

serverul Apache HTTP

protocolul AJP (Apache JServ Protocol) ndashportul 8009

container lt motor lt gazdă lt context relațiile au multiplicitatea 1n

motor Catalina gazda localhost

Sursa httpwww3ntuedusghomeehchuaprogram

minghowtoTomcat_Morehtml

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (1)

bin ndash script-uri apelate la pornirea și oprirea serverului webo startup shutdown [bat|sh] ndash lansarea icircn execuție oprirea serverului

o setClasspath [bat|sh] ndash JAVA_HOME JRE_HOME

conf ndash fișiere de configurare aplicabile tuturor aplicațiilordin contextul serverului webo catalinapolicy

o catalinaproperties loggingproperties

o serverxml webxml contentxml tomcat-usersxml

o cacircte un director pentru fiecare motor conținacircnd subdirectoare pentrutoate gazdele

lib ndash biblioteci comune folosite de toate aplicațiileo servlet-apijar ndash Java Servlet

o jasperjar jasper-eljar ndash Java Server Pages EL

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (2)

logs ndash jurnale specificeomotorul Catalina

o gazdele pe care le gestionează

o aplicațiile manager host-manager

o jurnalul de acces

webapps ndash locația icircn care vor fi plasate aplicațiile fiind accesate de serverul web Apache Tomcat

work ndash director de lucru ce conține clasele Java Servlet corespunzătoare documentelor JSF JSPo organizarea se face pe motor gazde configurate icircn cadrul motorului aplicații

temp ndash diferite resurse temporare

Serverul HTTP Apache Tomcat 8xConfigurare (1) binsetClasspath[bat|sh] ndash variabilele de mediu JAVA_HOME JRE_HOME

oWindowsset JAVA_HOME=CProgram FilesJavajdk180_25

set JRE_HOME=CProgram FilesJavajdk180_25jre

o Linuxexport JAVA_HOME=usrlibjvmdefault-java

export JRE_HOME=usrlibjvmdefault-javajre

confserverxml

ltHost name=localhost appBase=webapps unpackWARs=true autoDeploy=truegt

o webapps ndash director de bază unde vor fi dezvoltate aplicațiile

o unpackWARs ndash dezarhivarea aplicațiilor dezvoltate ca war (Web Archive)

o autoDeploy ndash instalarea automată a aplicațiilor dupa plasarea acestora icircn directorul corespunzător

Serverul HTTP Apache Tomcat 8xConfigurare (2) configurarea utilizatorilor (conftomcat_usersxml)o implicit nu conține nici un fel de roluri utilizatori

o un utilizator nu trebuie să aibă drepturi corespunzătoare mai multor roluriltxml version=10 encoding=utf-8gt

lttomcat-usersgt

ltrole rolename=manager-gui gt

ltrole rolename=manager-status gt

ltrole rolename=manager-script gt

ltrole rolename=manager-jmx gt

ltrole rolename=admin-gui gt

ltrole rolename=admin-script gt

ltuser username=admin password=admin roles=manager-gui admin-gui manager-status manager-script admin-script manager-jmx gt

lttomcat-usersgt

Serverul HTTP Apache Tomcat 8xConfigurare (3) tipuri de utilizatorio manager-gui ndash interfața grafică cu utilizatorul httplocalhost8080managerhtml sau Manager App

o manager-status ndash informații despre starea serverului httplocalhost8080managerserver sau Server Status

o manager-script ndash interfața icircn mod text prin care pot fi transmise comenzi prinparametrii din URL (solicitat de unele medii integrat de dezvoltare) httplocalhost8080managertextcomandaparametri

o comanda list (afisare lista aplicații) deploy (dezvoltare aplicații)

o parametri ndash contextul aplicației pentru care se dă comanda

o manager-jmx ndash acces la interfața JMX httplocalhost8080managerjmxproxycomanda=parametri

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Implementarea aplicaţiilor web icircn Java Enterprise Edition aplicații webo extensie dinamică a unui server (web de aplicații)

o transferă cerințele cu privire la resurse (programe instalate) serverului pe care sunt găzduite funcționalitatea oferită fiind accesibilă printr-un client universal (browser-ul)

o clasificare orientate pe prezentare ndash pagini Internet interactive descrise folosind limbaje de adnotare

(HTML XML) avacircnd conținut dinamic generat ca răspuns la cererile transmise de utilizator

bull ex Facelets Java Server Faces

orientate pe servicii ndash implementează funcționalitatea unui serviciu web

bull ex Java Servlets (date nontextuale gestiunea controlului altor tipuri de aplicații web)

orientate pe prezentare larr orientate pe servicii

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

aplicații webo componente Java Servlets

pagini Internet JSF (JavaServer Faces) JSP (Java Server Pages)

servicii web (JAX-WS JAX-RS)

+ servicii container (gestiune cereri concurență securitate gestiunea ciclului de viață)

o resurse statice (imagini foi de stil)

o clase ajutătoare

o biblioteci

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

Sursa The Java EE 7 Tutorial Release 7 for Java EE Platform August 2014

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

cererile HTTP ale clienților transmise de browser sunt transformate de serverul web icircntr-un obiect HttpServletRequest

cererea HttpServletRequest este transmisă unei componente web

pentru a genera conținut dinamic componenta web poate interacționao cu o clasă Java Beans

o cu o bază de date

răspunsul este convertit icircntr-un obiect HttpServletResponse

serverul web transformă obiectul HttpServletResponse icircntr-un răspuns HTTP care va putea fi vizualizat icircn browser

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

configurarea aplicațiilor webo aspecte ale comportamentului acestora icircn diferite situații

o sunt icircncărcate la instalarea (eng deploy) aplicației web icircn contextul containerului

omecanisme adnotări Java

fișiere XML (descriptorul de instalare al aplicației web)

bull trebuie să respecte schemele specificației Java Servlet

Serverul HTTP Apache Tomcat 8x server HTTPo container pentru Java Servletso arhitectură modulară

primește cereri și generează răspunsuri (documente HTML) din cadrulclaselor Java Servleto paginile JSP JSF ndash transformate automat la clasele Java Servlets asociate atunci cacircnd

sunt accesate

versiunea stabilă 8015o implementează specificațiile Java Servlets 31

JavaServer Pages 23

Expression Language 30

WebSocket 11

o aplicațiile web trebuie scrie folosind minim Java 7

Serverul HTTP Apache Tomcat 8xArhitectura

serviciu rarr unul sau mai multi conectori la motorul serverului care poate rula pe mai multe mașinio HTTP 11 comunicația client-server

protocolul HTTP (portul 8080)

o AJP 13 comunicația dintre serverul Tomcat și

serverul Apache HTTP

protocolul AJP (Apache JServ Protocol) ndashportul 8009

container lt motor lt gazdă lt context relațiile au multiplicitatea 1n

motor Catalina gazda localhost

Sursa httpwww3ntuedusghomeehchuaprogram

minghowtoTomcat_Morehtml

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (1)

bin ndash script-uri apelate la pornirea și oprirea serverului webo startup shutdown [bat|sh] ndash lansarea icircn execuție oprirea serverului

o setClasspath [bat|sh] ndash JAVA_HOME JRE_HOME

conf ndash fișiere de configurare aplicabile tuturor aplicațiilordin contextul serverului webo catalinapolicy

o catalinaproperties loggingproperties

o serverxml webxml contentxml tomcat-usersxml

o cacircte un director pentru fiecare motor conținacircnd subdirectoare pentrutoate gazdele

lib ndash biblioteci comune folosite de toate aplicațiileo servlet-apijar ndash Java Servlet

o jasperjar jasper-eljar ndash Java Server Pages EL

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (2)

logs ndash jurnale specificeomotorul Catalina

o gazdele pe care le gestionează

o aplicațiile manager host-manager

o jurnalul de acces

webapps ndash locația icircn care vor fi plasate aplicațiile fiind accesate de serverul web Apache Tomcat

work ndash director de lucru ce conține clasele Java Servlet corespunzătoare documentelor JSF JSPo organizarea se face pe motor gazde configurate icircn cadrul motorului aplicații

temp ndash diferite resurse temporare

Serverul HTTP Apache Tomcat 8xConfigurare (1) binsetClasspath[bat|sh] ndash variabilele de mediu JAVA_HOME JRE_HOME

oWindowsset JAVA_HOME=CProgram FilesJavajdk180_25

set JRE_HOME=CProgram FilesJavajdk180_25jre

o Linuxexport JAVA_HOME=usrlibjvmdefault-java

export JRE_HOME=usrlibjvmdefault-javajre

confserverxml

ltHost name=localhost appBase=webapps unpackWARs=true autoDeploy=truegt

o webapps ndash director de bază unde vor fi dezvoltate aplicațiile

o unpackWARs ndash dezarhivarea aplicațiilor dezvoltate ca war (Web Archive)

o autoDeploy ndash instalarea automată a aplicațiilor dupa plasarea acestora icircn directorul corespunzător

Serverul HTTP Apache Tomcat 8xConfigurare (2) configurarea utilizatorilor (conftomcat_usersxml)o implicit nu conține nici un fel de roluri utilizatori

o un utilizator nu trebuie să aibă drepturi corespunzătoare mai multor roluriltxml version=10 encoding=utf-8gt

lttomcat-usersgt

ltrole rolename=manager-gui gt

ltrole rolename=manager-status gt

ltrole rolename=manager-script gt

ltrole rolename=manager-jmx gt

ltrole rolename=admin-gui gt

ltrole rolename=admin-script gt

ltuser username=admin password=admin roles=manager-gui admin-gui manager-status manager-script admin-script manager-jmx gt

lttomcat-usersgt

Serverul HTTP Apache Tomcat 8xConfigurare (3) tipuri de utilizatorio manager-gui ndash interfața grafică cu utilizatorul httplocalhost8080managerhtml sau Manager App

o manager-status ndash informații despre starea serverului httplocalhost8080managerserver sau Server Status

o manager-script ndash interfața icircn mod text prin care pot fi transmise comenzi prinparametrii din URL (solicitat de unele medii integrat de dezvoltare) httplocalhost8080managertextcomandaparametri

o comanda list (afisare lista aplicații) deploy (dezvoltare aplicații)

o parametri ndash contextul aplicației pentru care se dă comanda

o manager-jmx ndash acces la interfața JMX httplocalhost8080managerjmxproxycomanda=parametri

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

aplicații webo componente Java Servlets

pagini Internet JSF (JavaServer Faces) JSP (Java Server Pages)

servicii web (JAX-WS JAX-RS)

+ servicii container (gestiune cereri concurență securitate gestiunea ciclului de viață)

o resurse statice (imagini foi de stil)

o clase ajutătoare

o biblioteci

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

Sursa The Java EE 7 Tutorial Release 7 for Java EE Platform August 2014

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

cererile HTTP ale clienților transmise de browser sunt transformate de serverul web icircntr-un obiect HttpServletRequest

cererea HttpServletRequest este transmisă unei componente web

pentru a genera conținut dinamic componenta web poate interacționao cu o clasă Java Beans

o cu o bază de date

răspunsul este convertit icircntr-un obiect HttpServletResponse

serverul web transformă obiectul HttpServletResponse icircntr-un răspuns HTTP care va putea fi vizualizat icircn browser

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

configurarea aplicațiilor webo aspecte ale comportamentului acestora icircn diferite situații

o sunt icircncărcate la instalarea (eng deploy) aplicației web icircn contextul containerului

omecanisme adnotări Java

fișiere XML (descriptorul de instalare al aplicației web)

bull trebuie să respecte schemele specificației Java Servlet

Serverul HTTP Apache Tomcat 8x server HTTPo container pentru Java Servletso arhitectură modulară

primește cereri și generează răspunsuri (documente HTML) din cadrulclaselor Java Servleto paginile JSP JSF ndash transformate automat la clasele Java Servlets asociate atunci cacircnd

sunt accesate

versiunea stabilă 8015o implementează specificațiile Java Servlets 31

JavaServer Pages 23

Expression Language 30

WebSocket 11

o aplicațiile web trebuie scrie folosind minim Java 7

Serverul HTTP Apache Tomcat 8xArhitectura

serviciu rarr unul sau mai multi conectori la motorul serverului care poate rula pe mai multe mașinio HTTP 11 comunicația client-server

protocolul HTTP (portul 8080)

o AJP 13 comunicația dintre serverul Tomcat și

serverul Apache HTTP

protocolul AJP (Apache JServ Protocol) ndashportul 8009

container lt motor lt gazdă lt context relațiile au multiplicitatea 1n

motor Catalina gazda localhost

Sursa httpwww3ntuedusghomeehchuaprogram

minghowtoTomcat_Morehtml

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (1)

bin ndash script-uri apelate la pornirea și oprirea serverului webo startup shutdown [bat|sh] ndash lansarea icircn execuție oprirea serverului

o setClasspath [bat|sh] ndash JAVA_HOME JRE_HOME

conf ndash fișiere de configurare aplicabile tuturor aplicațiilordin contextul serverului webo catalinapolicy

o catalinaproperties loggingproperties

o serverxml webxml contentxml tomcat-usersxml

o cacircte un director pentru fiecare motor conținacircnd subdirectoare pentrutoate gazdele

lib ndash biblioteci comune folosite de toate aplicațiileo servlet-apijar ndash Java Servlet

o jasperjar jasper-eljar ndash Java Server Pages EL

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (2)

logs ndash jurnale specificeomotorul Catalina

o gazdele pe care le gestionează

o aplicațiile manager host-manager

o jurnalul de acces

webapps ndash locația icircn care vor fi plasate aplicațiile fiind accesate de serverul web Apache Tomcat

work ndash director de lucru ce conține clasele Java Servlet corespunzătoare documentelor JSF JSPo organizarea se face pe motor gazde configurate icircn cadrul motorului aplicații

temp ndash diferite resurse temporare

Serverul HTTP Apache Tomcat 8xConfigurare (1) binsetClasspath[bat|sh] ndash variabilele de mediu JAVA_HOME JRE_HOME

oWindowsset JAVA_HOME=CProgram FilesJavajdk180_25

set JRE_HOME=CProgram FilesJavajdk180_25jre

o Linuxexport JAVA_HOME=usrlibjvmdefault-java

export JRE_HOME=usrlibjvmdefault-javajre

confserverxml

ltHost name=localhost appBase=webapps unpackWARs=true autoDeploy=truegt

o webapps ndash director de bază unde vor fi dezvoltate aplicațiile

o unpackWARs ndash dezarhivarea aplicațiilor dezvoltate ca war (Web Archive)

o autoDeploy ndash instalarea automată a aplicațiilor dupa plasarea acestora icircn directorul corespunzător

Serverul HTTP Apache Tomcat 8xConfigurare (2) configurarea utilizatorilor (conftomcat_usersxml)o implicit nu conține nici un fel de roluri utilizatori

o un utilizator nu trebuie să aibă drepturi corespunzătoare mai multor roluriltxml version=10 encoding=utf-8gt

lttomcat-usersgt

ltrole rolename=manager-gui gt

ltrole rolename=manager-status gt

ltrole rolename=manager-script gt

ltrole rolename=manager-jmx gt

ltrole rolename=admin-gui gt

ltrole rolename=admin-script gt

ltuser username=admin password=admin roles=manager-gui admin-gui manager-status manager-script admin-script manager-jmx gt

lttomcat-usersgt

Serverul HTTP Apache Tomcat 8xConfigurare (3) tipuri de utilizatorio manager-gui ndash interfața grafică cu utilizatorul httplocalhost8080managerhtml sau Manager App

o manager-status ndash informații despre starea serverului httplocalhost8080managerserver sau Server Status

o manager-script ndash interfața icircn mod text prin care pot fi transmise comenzi prinparametrii din URL (solicitat de unele medii integrat de dezvoltare) httplocalhost8080managertextcomandaparametri

o comanda list (afisare lista aplicații) deploy (dezvoltare aplicații)

o parametri ndash contextul aplicației pentru care se dă comanda

o manager-jmx ndash acces la interfața JMX httplocalhost8080managerjmxproxycomanda=parametri

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

Sursa The Java EE 7 Tutorial Release 7 for Java EE Platform August 2014

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

cererile HTTP ale clienților transmise de browser sunt transformate de serverul web icircntr-un obiect HttpServletRequest

cererea HttpServletRequest este transmisă unei componente web

pentru a genera conținut dinamic componenta web poate interacționao cu o clasă Java Beans

o cu o bază de date

răspunsul este convertit icircntr-un obiect HttpServletResponse

serverul web transformă obiectul HttpServletResponse icircntr-un răspuns HTTP care va putea fi vizualizat icircn browser

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

configurarea aplicațiilor webo aspecte ale comportamentului acestora icircn diferite situații

o sunt icircncărcate la instalarea (eng deploy) aplicației web icircn contextul containerului

omecanisme adnotări Java

fișiere XML (descriptorul de instalare al aplicației web)

bull trebuie să respecte schemele specificației Java Servlet

Serverul HTTP Apache Tomcat 8x server HTTPo container pentru Java Servletso arhitectură modulară

primește cereri și generează răspunsuri (documente HTML) din cadrulclaselor Java Servleto paginile JSP JSF ndash transformate automat la clasele Java Servlets asociate atunci cacircnd

sunt accesate

versiunea stabilă 8015o implementează specificațiile Java Servlets 31

JavaServer Pages 23

Expression Language 30

WebSocket 11

o aplicațiile web trebuie scrie folosind minim Java 7

Serverul HTTP Apache Tomcat 8xArhitectura

serviciu rarr unul sau mai multi conectori la motorul serverului care poate rula pe mai multe mașinio HTTP 11 comunicația client-server

protocolul HTTP (portul 8080)

o AJP 13 comunicația dintre serverul Tomcat și

serverul Apache HTTP

protocolul AJP (Apache JServ Protocol) ndashportul 8009

container lt motor lt gazdă lt context relațiile au multiplicitatea 1n

motor Catalina gazda localhost

Sursa httpwww3ntuedusghomeehchuaprogram

minghowtoTomcat_Morehtml

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (1)

bin ndash script-uri apelate la pornirea și oprirea serverului webo startup shutdown [bat|sh] ndash lansarea icircn execuție oprirea serverului

o setClasspath [bat|sh] ndash JAVA_HOME JRE_HOME

conf ndash fișiere de configurare aplicabile tuturor aplicațiilordin contextul serverului webo catalinapolicy

o catalinaproperties loggingproperties

o serverxml webxml contentxml tomcat-usersxml

o cacircte un director pentru fiecare motor conținacircnd subdirectoare pentrutoate gazdele

lib ndash biblioteci comune folosite de toate aplicațiileo servlet-apijar ndash Java Servlet

o jasperjar jasper-eljar ndash Java Server Pages EL

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (2)

logs ndash jurnale specificeomotorul Catalina

o gazdele pe care le gestionează

o aplicațiile manager host-manager

o jurnalul de acces

webapps ndash locația icircn care vor fi plasate aplicațiile fiind accesate de serverul web Apache Tomcat

work ndash director de lucru ce conține clasele Java Servlet corespunzătoare documentelor JSF JSPo organizarea se face pe motor gazde configurate icircn cadrul motorului aplicații

temp ndash diferite resurse temporare

Serverul HTTP Apache Tomcat 8xConfigurare (1) binsetClasspath[bat|sh] ndash variabilele de mediu JAVA_HOME JRE_HOME

oWindowsset JAVA_HOME=CProgram FilesJavajdk180_25

set JRE_HOME=CProgram FilesJavajdk180_25jre

o Linuxexport JAVA_HOME=usrlibjvmdefault-java

export JRE_HOME=usrlibjvmdefault-javajre

confserverxml

ltHost name=localhost appBase=webapps unpackWARs=true autoDeploy=truegt

o webapps ndash director de bază unde vor fi dezvoltate aplicațiile

o unpackWARs ndash dezarhivarea aplicațiilor dezvoltate ca war (Web Archive)

o autoDeploy ndash instalarea automată a aplicațiilor dupa plasarea acestora icircn directorul corespunzător

Serverul HTTP Apache Tomcat 8xConfigurare (2) configurarea utilizatorilor (conftomcat_usersxml)o implicit nu conține nici un fel de roluri utilizatori

o un utilizator nu trebuie să aibă drepturi corespunzătoare mai multor roluriltxml version=10 encoding=utf-8gt

lttomcat-usersgt

ltrole rolename=manager-gui gt

ltrole rolename=manager-status gt

ltrole rolename=manager-script gt

ltrole rolename=manager-jmx gt

ltrole rolename=admin-gui gt

ltrole rolename=admin-script gt

ltuser username=admin password=admin roles=manager-gui admin-gui manager-status manager-script admin-script manager-jmx gt

lttomcat-usersgt

Serverul HTTP Apache Tomcat 8xConfigurare (3) tipuri de utilizatorio manager-gui ndash interfața grafică cu utilizatorul httplocalhost8080managerhtml sau Manager App

o manager-status ndash informații despre starea serverului httplocalhost8080managerserver sau Server Status

o manager-script ndash interfața icircn mod text prin care pot fi transmise comenzi prinparametrii din URL (solicitat de unele medii integrat de dezvoltare) httplocalhost8080managertextcomandaparametri

o comanda list (afisare lista aplicații) deploy (dezvoltare aplicații)

o parametri ndash contextul aplicației pentru care se dă comanda

o manager-jmx ndash acces la interfața JMX httplocalhost8080managerjmxproxycomanda=parametri

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

cererile HTTP ale clienților transmise de browser sunt transformate de serverul web icircntr-un obiect HttpServletRequest

cererea HttpServletRequest este transmisă unei componente web

pentru a genera conținut dinamic componenta web poate interacționao cu o clasă Java Beans

o cu o bază de date

răspunsul este convertit icircntr-un obiect HttpServletResponse

serverul web transformă obiectul HttpServletResponse icircntr-un răspuns HTTP care va putea fi vizualizat icircn browser

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

configurarea aplicațiilor webo aspecte ale comportamentului acestora icircn diferite situații

o sunt icircncărcate la instalarea (eng deploy) aplicației web icircn contextul containerului

omecanisme adnotări Java

fișiere XML (descriptorul de instalare al aplicației web)

bull trebuie să respecte schemele specificației Java Servlet

Serverul HTTP Apache Tomcat 8x server HTTPo container pentru Java Servletso arhitectură modulară

primește cereri și generează răspunsuri (documente HTML) din cadrulclaselor Java Servleto paginile JSP JSF ndash transformate automat la clasele Java Servlets asociate atunci cacircnd

sunt accesate

versiunea stabilă 8015o implementează specificațiile Java Servlets 31

JavaServer Pages 23

Expression Language 30

WebSocket 11

o aplicațiile web trebuie scrie folosind minim Java 7

Serverul HTTP Apache Tomcat 8xArhitectura

serviciu rarr unul sau mai multi conectori la motorul serverului care poate rula pe mai multe mașinio HTTP 11 comunicația client-server

protocolul HTTP (portul 8080)

o AJP 13 comunicația dintre serverul Tomcat și

serverul Apache HTTP

protocolul AJP (Apache JServ Protocol) ndashportul 8009

container lt motor lt gazdă lt context relațiile au multiplicitatea 1n

motor Catalina gazda localhost

Sursa httpwww3ntuedusghomeehchuaprogram

minghowtoTomcat_Morehtml

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (1)

bin ndash script-uri apelate la pornirea și oprirea serverului webo startup shutdown [bat|sh] ndash lansarea icircn execuție oprirea serverului

o setClasspath [bat|sh] ndash JAVA_HOME JRE_HOME

conf ndash fișiere de configurare aplicabile tuturor aplicațiilordin contextul serverului webo catalinapolicy

o catalinaproperties loggingproperties

o serverxml webxml contentxml tomcat-usersxml

o cacircte un director pentru fiecare motor conținacircnd subdirectoare pentrutoate gazdele

lib ndash biblioteci comune folosite de toate aplicațiileo servlet-apijar ndash Java Servlet

o jasperjar jasper-eljar ndash Java Server Pages EL

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (2)

logs ndash jurnale specificeomotorul Catalina

o gazdele pe care le gestionează

o aplicațiile manager host-manager

o jurnalul de acces

webapps ndash locația icircn care vor fi plasate aplicațiile fiind accesate de serverul web Apache Tomcat

work ndash director de lucru ce conține clasele Java Servlet corespunzătoare documentelor JSF JSPo organizarea se face pe motor gazde configurate icircn cadrul motorului aplicații

temp ndash diferite resurse temporare

Serverul HTTP Apache Tomcat 8xConfigurare (1) binsetClasspath[bat|sh] ndash variabilele de mediu JAVA_HOME JRE_HOME

oWindowsset JAVA_HOME=CProgram FilesJavajdk180_25

set JRE_HOME=CProgram FilesJavajdk180_25jre

o Linuxexport JAVA_HOME=usrlibjvmdefault-java

export JRE_HOME=usrlibjvmdefault-javajre

confserverxml

ltHost name=localhost appBase=webapps unpackWARs=true autoDeploy=truegt

o webapps ndash director de bază unde vor fi dezvoltate aplicațiile

o unpackWARs ndash dezarhivarea aplicațiilor dezvoltate ca war (Web Archive)

o autoDeploy ndash instalarea automată a aplicațiilor dupa plasarea acestora icircn directorul corespunzător

Serverul HTTP Apache Tomcat 8xConfigurare (2) configurarea utilizatorilor (conftomcat_usersxml)o implicit nu conține nici un fel de roluri utilizatori

o un utilizator nu trebuie să aibă drepturi corespunzătoare mai multor roluriltxml version=10 encoding=utf-8gt

lttomcat-usersgt

ltrole rolename=manager-gui gt

ltrole rolename=manager-status gt

ltrole rolename=manager-script gt

ltrole rolename=manager-jmx gt

ltrole rolename=admin-gui gt

ltrole rolename=admin-script gt

ltuser username=admin password=admin roles=manager-gui admin-gui manager-status manager-script admin-script manager-jmx gt

lttomcat-usersgt

Serverul HTTP Apache Tomcat 8xConfigurare (3) tipuri de utilizatorio manager-gui ndash interfața grafică cu utilizatorul httplocalhost8080managerhtml sau Manager App

o manager-status ndash informații despre starea serverului httplocalhost8080managerserver sau Server Status

o manager-script ndash interfața icircn mod text prin care pot fi transmise comenzi prinparametrii din URL (solicitat de unele medii integrat de dezvoltare) httplocalhost8080managertextcomandaparametri

o comanda list (afisare lista aplicații) deploy (dezvoltare aplicații)

o parametri ndash contextul aplicației pentru care se dă comanda

o manager-jmx ndash acces la interfața JMX httplocalhost8080managerjmxproxycomanda=parametri

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Implementarea aplicaţiilor web icircn Java Enterprise Edition (contrsquod)

configurarea aplicațiilor webo aspecte ale comportamentului acestora icircn diferite situații

o sunt icircncărcate la instalarea (eng deploy) aplicației web icircn contextul containerului

omecanisme adnotări Java

fișiere XML (descriptorul de instalare al aplicației web)

bull trebuie să respecte schemele specificației Java Servlet

Serverul HTTP Apache Tomcat 8x server HTTPo container pentru Java Servletso arhitectură modulară

primește cereri și generează răspunsuri (documente HTML) din cadrulclaselor Java Servleto paginile JSP JSF ndash transformate automat la clasele Java Servlets asociate atunci cacircnd

sunt accesate

versiunea stabilă 8015o implementează specificațiile Java Servlets 31

JavaServer Pages 23

Expression Language 30

WebSocket 11

o aplicațiile web trebuie scrie folosind minim Java 7

Serverul HTTP Apache Tomcat 8xArhitectura

serviciu rarr unul sau mai multi conectori la motorul serverului care poate rula pe mai multe mașinio HTTP 11 comunicația client-server

protocolul HTTP (portul 8080)

o AJP 13 comunicația dintre serverul Tomcat și

serverul Apache HTTP

protocolul AJP (Apache JServ Protocol) ndashportul 8009

container lt motor lt gazdă lt context relațiile au multiplicitatea 1n

motor Catalina gazda localhost

Sursa httpwww3ntuedusghomeehchuaprogram

minghowtoTomcat_Morehtml

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (1)

bin ndash script-uri apelate la pornirea și oprirea serverului webo startup shutdown [bat|sh] ndash lansarea icircn execuție oprirea serverului

o setClasspath [bat|sh] ndash JAVA_HOME JRE_HOME

conf ndash fișiere de configurare aplicabile tuturor aplicațiilordin contextul serverului webo catalinapolicy

o catalinaproperties loggingproperties

o serverxml webxml contentxml tomcat-usersxml

o cacircte un director pentru fiecare motor conținacircnd subdirectoare pentrutoate gazdele

lib ndash biblioteci comune folosite de toate aplicațiileo servlet-apijar ndash Java Servlet

o jasperjar jasper-eljar ndash Java Server Pages EL

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (2)

logs ndash jurnale specificeomotorul Catalina

o gazdele pe care le gestionează

o aplicațiile manager host-manager

o jurnalul de acces

webapps ndash locația icircn care vor fi plasate aplicațiile fiind accesate de serverul web Apache Tomcat

work ndash director de lucru ce conține clasele Java Servlet corespunzătoare documentelor JSF JSPo organizarea se face pe motor gazde configurate icircn cadrul motorului aplicații

temp ndash diferite resurse temporare

Serverul HTTP Apache Tomcat 8xConfigurare (1) binsetClasspath[bat|sh] ndash variabilele de mediu JAVA_HOME JRE_HOME

oWindowsset JAVA_HOME=CProgram FilesJavajdk180_25

set JRE_HOME=CProgram FilesJavajdk180_25jre

o Linuxexport JAVA_HOME=usrlibjvmdefault-java

export JRE_HOME=usrlibjvmdefault-javajre

confserverxml

ltHost name=localhost appBase=webapps unpackWARs=true autoDeploy=truegt

o webapps ndash director de bază unde vor fi dezvoltate aplicațiile

o unpackWARs ndash dezarhivarea aplicațiilor dezvoltate ca war (Web Archive)

o autoDeploy ndash instalarea automată a aplicațiilor dupa plasarea acestora icircn directorul corespunzător

Serverul HTTP Apache Tomcat 8xConfigurare (2) configurarea utilizatorilor (conftomcat_usersxml)o implicit nu conține nici un fel de roluri utilizatori

o un utilizator nu trebuie să aibă drepturi corespunzătoare mai multor roluriltxml version=10 encoding=utf-8gt

lttomcat-usersgt

ltrole rolename=manager-gui gt

ltrole rolename=manager-status gt

ltrole rolename=manager-script gt

ltrole rolename=manager-jmx gt

ltrole rolename=admin-gui gt

ltrole rolename=admin-script gt

ltuser username=admin password=admin roles=manager-gui admin-gui manager-status manager-script admin-script manager-jmx gt

lttomcat-usersgt

Serverul HTTP Apache Tomcat 8xConfigurare (3) tipuri de utilizatorio manager-gui ndash interfața grafică cu utilizatorul httplocalhost8080managerhtml sau Manager App

o manager-status ndash informații despre starea serverului httplocalhost8080managerserver sau Server Status

o manager-script ndash interfața icircn mod text prin care pot fi transmise comenzi prinparametrii din URL (solicitat de unele medii integrat de dezvoltare) httplocalhost8080managertextcomandaparametri

o comanda list (afisare lista aplicații) deploy (dezvoltare aplicații)

o parametri ndash contextul aplicației pentru care se dă comanda

o manager-jmx ndash acces la interfața JMX httplocalhost8080managerjmxproxycomanda=parametri

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8x server HTTPo container pentru Java Servletso arhitectură modulară

primește cereri și generează răspunsuri (documente HTML) din cadrulclaselor Java Servleto paginile JSP JSF ndash transformate automat la clasele Java Servlets asociate atunci cacircnd

sunt accesate

versiunea stabilă 8015o implementează specificațiile Java Servlets 31

JavaServer Pages 23

Expression Language 30

WebSocket 11

o aplicațiile web trebuie scrie folosind minim Java 7

Serverul HTTP Apache Tomcat 8xArhitectura

serviciu rarr unul sau mai multi conectori la motorul serverului care poate rula pe mai multe mașinio HTTP 11 comunicația client-server

protocolul HTTP (portul 8080)

o AJP 13 comunicația dintre serverul Tomcat și

serverul Apache HTTP

protocolul AJP (Apache JServ Protocol) ndashportul 8009

container lt motor lt gazdă lt context relațiile au multiplicitatea 1n

motor Catalina gazda localhost

Sursa httpwww3ntuedusghomeehchuaprogram

minghowtoTomcat_Morehtml

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (1)

bin ndash script-uri apelate la pornirea și oprirea serverului webo startup shutdown [bat|sh] ndash lansarea icircn execuție oprirea serverului

o setClasspath [bat|sh] ndash JAVA_HOME JRE_HOME

conf ndash fișiere de configurare aplicabile tuturor aplicațiilordin contextul serverului webo catalinapolicy

o catalinaproperties loggingproperties

o serverxml webxml contentxml tomcat-usersxml

o cacircte un director pentru fiecare motor conținacircnd subdirectoare pentrutoate gazdele

lib ndash biblioteci comune folosite de toate aplicațiileo servlet-apijar ndash Java Servlet

o jasperjar jasper-eljar ndash Java Server Pages EL

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (2)

logs ndash jurnale specificeomotorul Catalina

o gazdele pe care le gestionează

o aplicațiile manager host-manager

o jurnalul de acces

webapps ndash locația icircn care vor fi plasate aplicațiile fiind accesate de serverul web Apache Tomcat

work ndash director de lucru ce conține clasele Java Servlet corespunzătoare documentelor JSF JSPo organizarea se face pe motor gazde configurate icircn cadrul motorului aplicații

temp ndash diferite resurse temporare

Serverul HTTP Apache Tomcat 8xConfigurare (1) binsetClasspath[bat|sh] ndash variabilele de mediu JAVA_HOME JRE_HOME

oWindowsset JAVA_HOME=CProgram FilesJavajdk180_25

set JRE_HOME=CProgram FilesJavajdk180_25jre

o Linuxexport JAVA_HOME=usrlibjvmdefault-java

export JRE_HOME=usrlibjvmdefault-javajre

confserverxml

ltHost name=localhost appBase=webapps unpackWARs=true autoDeploy=truegt

o webapps ndash director de bază unde vor fi dezvoltate aplicațiile

o unpackWARs ndash dezarhivarea aplicațiilor dezvoltate ca war (Web Archive)

o autoDeploy ndash instalarea automată a aplicațiilor dupa plasarea acestora icircn directorul corespunzător

Serverul HTTP Apache Tomcat 8xConfigurare (2) configurarea utilizatorilor (conftomcat_usersxml)o implicit nu conține nici un fel de roluri utilizatori

o un utilizator nu trebuie să aibă drepturi corespunzătoare mai multor roluriltxml version=10 encoding=utf-8gt

lttomcat-usersgt

ltrole rolename=manager-gui gt

ltrole rolename=manager-status gt

ltrole rolename=manager-script gt

ltrole rolename=manager-jmx gt

ltrole rolename=admin-gui gt

ltrole rolename=admin-script gt

ltuser username=admin password=admin roles=manager-gui admin-gui manager-status manager-script admin-script manager-jmx gt

lttomcat-usersgt

Serverul HTTP Apache Tomcat 8xConfigurare (3) tipuri de utilizatorio manager-gui ndash interfața grafică cu utilizatorul httplocalhost8080managerhtml sau Manager App

o manager-status ndash informații despre starea serverului httplocalhost8080managerserver sau Server Status

o manager-script ndash interfața icircn mod text prin care pot fi transmise comenzi prinparametrii din URL (solicitat de unele medii integrat de dezvoltare) httplocalhost8080managertextcomandaparametri

o comanda list (afisare lista aplicații) deploy (dezvoltare aplicații)

o parametri ndash contextul aplicației pentru care se dă comanda

o manager-jmx ndash acces la interfața JMX httplocalhost8080managerjmxproxycomanda=parametri

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xArhitectura

serviciu rarr unul sau mai multi conectori la motorul serverului care poate rula pe mai multe mașinio HTTP 11 comunicația client-server

protocolul HTTP (portul 8080)

o AJP 13 comunicația dintre serverul Tomcat și

serverul Apache HTTP

protocolul AJP (Apache JServ Protocol) ndashportul 8009

container lt motor lt gazdă lt context relațiile au multiplicitatea 1n

motor Catalina gazda localhost

Sursa httpwww3ntuedusghomeehchuaprogram

minghowtoTomcat_Morehtml

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (1)

bin ndash script-uri apelate la pornirea și oprirea serverului webo startup shutdown [bat|sh] ndash lansarea icircn execuție oprirea serverului

o setClasspath [bat|sh] ndash JAVA_HOME JRE_HOME

conf ndash fișiere de configurare aplicabile tuturor aplicațiilordin contextul serverului webo catalinapolicy

o catalinaproperties loggingproperties

o serverxml webxml contentxml tomcat-usersxml

o cacircte un director pentru fiecare motor conținacircnd subdirectoare pentrutoate gazdele

lib ndash biblioteci comune folosite de toate aplicațiileo servlet-apijar ndash Java Servlet

o jasperjar jasper-eljar ndash Java Server Pages EL

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (2)

logs ndash jurnale specificeomotorul Catalina

o gazdele pe care le gestionează

o aplicațiile manager host-manager

o jurnalul de acces

webapps ndash locația icircn care vor fi plasate aplicațiile fiind accesate de serverul web Apache Tomcat

work ndash director de lucru ce conține clasele Java Servlet corespunzătoare documentelor JSF JSPo organizarea se face pe motor gazde configurate icircn cadrul motorului aplicații

temp ndash diferite resurse temporare

Serverul HTTP Apache Tomcat 8xConfigurare (1) binsetClasspath[bat|sh] ndash variabilele de mediu JAVA_HOME JRE_HOME

oWindowsset JAVA_HOME=CProgram FilesJavajdk180_25

set JRE_HOME=CProgram FilesJavajdk180_25jre

o Linuxexport JAVA_HOME=usrlibjvmdefault-java

export JRE_HOME=usrlibjvmdefault-javajre

confserverxml

ltHost name=localhost appBase=webapps unpackWARs=true autoDeploy=truegt

o webapps ndash director de bază unde vor fi dezvoltate aplicațiile

o unpackWARs ndash dezarhivarea aplicațiilor dezvoltate ca war (Web Archive)

o autoDeploy ndash instalarea automată a aplicațiilor dupa plasarea acestora icircn directorul corespunzător

Serverul HTTP Apache Tomcat 8xConfigurare (2) configurarea utilizatorilor (conftomcat_usersxml)o implicit nu conține nici un fel de roluri utilizatori

o un utilizator nu trebuie să aibă drepturi corespunzătoare mai multor roluriltxml version=10 encoding=utf-8gt

lttomcat-usersgt

ltrole rolename=manager-gui gt

ltrole rolename=manager-status gt

ltrole rolename=manager-script gt

ltrole rolename=manager-jmx gt

ltrole rolename=admin-gui gt

ltrole rolename=admin-script gt

ltuser username=admin password=admin roles=manager-gui admin-gui manager-status manager-script admin-script manager-jmx gt

lttomcat-usersgt

Serverul HTTP Apache Tomcat 8xConfigurare (3) tipuri de utilizatorio manager-gui ndash interfața grafică cu utilizatorul httplocalhost8080managerhtml sau Manager App

o manager-status ndash informații despre starea serverului httplocalhost8080managerserver sau Server Status

o manager-script ndash interfața icircn mod text prin care pot fi transmise comenzi prinparametrii din URL (solicitat de unele medii integrat de dezvoltare) httplocalhost8080managertextcomandaparametri

o comanda list (afisare lista aplicații) deploy (dezvoltare aplicații)

o parametri ndash contextul aplicației pentru care se dă comanda

o manager-jmx ndash acces la interfața JMX httplocalhost8080managerjmxproxycomanda=parametri

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (1)

bin ndash script-uri apelate la pornirea și oprirea serverului webo startup shutdown [bat|sh] ndash lansarea icircn execuție oprirea serverului

o setClasspath [bat|sh] ndash JAVA_HOME JRE_HOME

conf ndash fișiere de configurare aplicabile tuturor aplicațiilordin contextul serverului webo catalinapolicy

o catalinaproperties loggingproperties

o serverxml webxml contentxml tomcat-usersxml

o cacircte un director pentru fiecare motor conținacircnd subdirectoare pentrutoate gazdele

lib ndash biblioteci comune folosite de toate aplicațiileo servlet-apijar ndash Java Servlet

o jasperjar jasper-eljar ndash Java Server Pages EL

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (2)

logs ndash jurnale specificeomotorul Catalina

o gazdele pe care le gestionează

o aplicațiile manager host-manager

o jurnalul de acces

webapps ndash locația icircn care vor fi plasate aplicațiile fiind accesate de serverul web Apache Tomcat

work ndash director de lucru ce conține clasele Java Servlet corespunzătoare documentelor JSF JSPo organizarea se face pe motor gazde configurate icircn cadrul motorului aplicații

temp ndash diferite resurse temporare

Serverul HTTP Apache Tomcat 8xConfigurare (1) binsetClasspath[bat|sh] ndash variabilele de mediu JAVA_HOME JRE_HOME

oWindowsset JAVA_HOME=CProgram FilesJavajdk180_25

set JRE_HOME=CProgram FilesJavajdk180_25jre

o Linuxexport JAVA_HOME=usrlibjvmdefault-java

export JRE_HOME=usrlibjvmdefault-javajre

confserverxml

ltHost name=localhost appBase=webapps unpackWARs=true autoDeploy=truegt

o webapps ndash director de bază unde vor fi dezvoltate aplicațiile

o unpackWARs ndash dezarhivarea aplicațiilor dezvoltate ca war (Web Archive)

o autoDeploy ndash instalarea automată a aplicațiilor dupa plasarea acestora icircn directorul corespunzător

Serverul HTTP Apache Tomcat 8xConfigurare (2) configurarea utilizatorilor (conftomcat_usersxml)o implicit nu conține nici un fel de roluri utilizatori

o un utilizator nu trebuie să aibă drepturi corespunzătoare mai multor roluriltxml version=10 encoding=utf-8gt

lttomcat-usersgt

ltrole rolename=manager-gui gt

ltrole rolename=manager-status gt

ltrole rolename=manager-script gt

ltrole rolename=manager-jmx gt

ltrole rolename=admin-gui gt

ltrole rolename=admin-script gt

ltuser username=admin password=admin roles=manager-gui admin-gui manager-status manager-script admin-script manager-jmx gt

lttomcat-usersgt

Serverul HTTP Apache Tomcat 8xConfigurare (3) tipuri de utilizatorio manager-gui ndash interfața grafică cu utilizatorul httplocalhost8080managerhtml sau Manager App

o manager-status ndash informații despre starea serverului httplocalhost8080managerserver sau Server Status

o manager-script ndash interfața icircn mod text prin care pot fi transmise comenzi prinparametrii din URL (solicitat de unele medii integrat de dezvoltare) httplocalhost8080managertextcomandaparametri

o comanda list (afisare lista aplicații) deploy (dezvoltare aplicații)

o parametri ndash contextul aplicației pentru care se dă comanda

o manager-jmx ndash acces la interfața JMX httplocalhost8080managerjmxproxycomanda=parametri

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xStructura ierarhiei de directoare (2)

logs ndash jurnale specificeomotorul Catalina

o gazdele pe care le gestionează

o aplicațiile manager host-manager

o jurnalul de acces

webapps ndash locația icircn care vor fi plasate aplicațiile fiind accesate de serverul web Apache Tomcat

work ndash director de lucru ce conține clasele Java Servlet corespunzătoare documentelor JSF JSPo organizarea se face pe motor gazde configurate icircn cadrul motorului aplicații

temp ndash diferite resurse temporare

Serverul HTTP Apache Tomcat 8xConfigurare (1) binsetClasspath[bat|sh] ndash variabilele de mediu JAVA_HOME JRE_HOME

oWindowsset JAVA_HOME=CProgram FilesJavajdk180_25

set JRE_HOME=CProgram FilesJavajdk180_25jre

o Linuxexport JAVA_HOME=usrlibjvmdefault-java

export JRE_HOME=usrlibjvmdefault-javajre

confserverxml

ltHost name=localhost appBase=webapps unpackWARs=true autoDeploy=truegt

o webapps ndash director de bază unde vor fi dezvoltate aplicațiile

o unpackWARs ndash dezarhivarea aplicațiilor dezvoltate ca war (Web Archive)

o autoDeploy ndash instalarea automată a aplicațiilor dupa plasarea acestora icircn directorul corespunzător

Serverul HTTP Apache Tomcat 8xConfigurare (2) configurarea utilizatorilor (conftomcat_usersxml)o implicit nu conține nici un fel de roluri utilizatori

o un utilizator nu trebuie să aibă drepturi corespunzătoare mai multor roluriltxml version=10 encoding=utf-8gt

lttomcat-usersgt

ltrole rolename=manager-gui gt

ltrole rolename=manager-status gt

ltrole rolename=manager-script gt

ltrole rolename=manager-jmx gt

ltrole rolename=admin-gui gt

ltrole rolename=admin-script gt

ltuser username=admin password=admin roles=manager-gui admin-gui manager-status manager-script admin-script manager-jmx gt

lttomcat-usersgt

Serverul HTTP Apache Tomcat 8xConfigurare (3) tipuri de utilizatorio manager-gui ndash interfața grafică cu utilizatorul httplocalhost8080managerhtml sau Manager App

o manager-status ndash informații despre starea serverului httplocalhost8080managerserver sau Server Status

o manager-script ndash interfața icircn mod text prin care pot fi transmise comenzi prinparametrii din URL (solicitat de unele medii integrat de dezvoltare) httplocalhost8080managertextcomandaparametri

o comanda list (afisare lista aplicații) deploy (dezvoltare aplicații)

o parametri ndash contextul aplicației pentru care se dă comanda

o manager-jmx ndash acces la interfața JMX httplocalhost8080managerjmxproxycomanda=parametri

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xConfigurare (1) binsetClasspath[bat|sh] ndash variabilele de mediu JAVA_HOME JRE_HOME

oWindowsset JAVA_HOME=CProgram FilesJavajdk180_25

set JRE_HOME=CProgram FilesJavajdk180_25jre

o Linuxexport JAVA_HOME=usrlibjvmdefault-java

export JRE_HOME=usrlibjvmdefault-javajre

confserverxml

ltHost name=localhost appBase=webapps unpackWARs=true autoDeploy=truegt

o webapps ndash director de bază unde vor fi dezvoltate aplicațiile

o unpackWARs ndash dezarhivarea aplicațiilor dezvoltate ca war (Web Archive)

o autoDeploy ndash instalarea automată a aplicațiilor dupa plasarea acestora icircn directorul corespunzător

Serverul HTTP Apache Tomcat 8xConfigurare (2) configurarea utilizatorilor (conftomcat_usersxml)o implicit nu conține nici un fel de roluri utilizatori

o un utilizator nu trebuie să aibă drepturi corespunzătoare mai multor roluriltxml version=10 encoding=utf-8gt

lttomcat-usersgt

ltrole rolename=manager-gui gt

ltrole rolename=manager-status gt

ltrole rolename=manager-script gt

ltrole rolename=manager-jmx gt

ltrole rolename=admin-gui gt

ltrole rolename=admin-script gt

ltuser username=admin password=admin roles=manager-gui admin-gui manager-status manager-script admin-script manager-jmx gt

lttomcat-usersgt

Serverul HTTP Apache Tomcat 8xConfigurare (3) tipuri de utilizatorio manager-gui ndash interfața grafică cu utilizatorul httplocalhost8080managerhtml sau Manager App

o manager-status ndash informații despre starea serverului httplocalhost8080managerserver sau Server Status

o manager-script ndash interfața icircn mod text prin care pot fi transmise comenzi prinparametrii din URL (solicitat de unele medii integrat de dezvoltare) httplocalhost8080managertextcomandaparametri

o comanda list (afisare lista aplicații) deploy (dezvoltare aplicații)

o parametri ndash contextul aplicației pentru care se dă comanda

o manager-jmx ndash acces la interfața JMX httplocalhost8080managerjmxproxycomanda=parametri

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xConfigurare (2) configurarea utilizatorilor (conftomcat_usersxml)o implicit nu conține nici un fel de roluri utilizatori

o un utilizator nu trebuie să aibă drepturi corespunzătoare mai multor roluriltxml version=10 encoding=utf-8gt

lttomcat-usersgt

ltrole rolename=manager-gui gt

ltrole rolename=manager-status gt

ltrole rolename=manager-script gt

ltrole rolename=manager-jmx gt

ltrole rolename=admin-gui gt

ltrole rolename=admin-script gt

ltuser username=admin password=admin roles=manager-gui admin-gui manager-status manager-script admin-script manager-jmx gt

lttomcat-usersgt

Serverul HTTP Apache Tomcat 8xConfigurare (3) tipuri de utilizatorio manager-gui ndash interfața grafică cu utilizatorul httplocalhost8080managerhtml sau Manager App

o manager-status ndash informații despre starea serverului httplocalhost8080managerserver sau Server Status

o manager-script ndash interfața icircn mod text prin care pot fi transmise comenzi prinparametrii din URL (solicitat de unele medii integrat de dezvoltare) httplocalhost8080managertextcomandaparametri

o comanda list (afisare lista aplicații) deploy (dezvoltare aplicații)

o parametri ndash contextul aplicației pentru care se dă comanda

o manager-jmx ndash acces la interfața JMX httplocalhost8080managerjmxproxycomanda=parametri

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xConfigurare (3) tipuri de utilizatorio manager-gui ndash interfața grafică cu utilizatorul httplocalhost8080managerhtml sau Manager App

o manager-status ndash informații despre starea serverului httplocalhost8080managerserver sau Server Status

o manager-script ndash interfața icircn mod text prin care pot fi transmise comenzi prinparametrii din URL (solicitat de unele medii integrat de dezvoltare) httplocalhost8080managertextcomandaparametri

o comanda list (afisare lista aplicații) deploy (dezvoltare aplicații)

o parametri ndash contextul aplicației pentru care se dă comanda

o manager-jmx ndash acces la interfața JMX httplocalhost8080managerjmxproxycomanda=parametri

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xFuncționalitate

Server Status ndash informații despre starea serverului

Manager Appo informații cu privire la aplicațiile care au fost configurate icircn contextul serverului

web (locație versiune stare curentă numărul de sesiuni deschise)

o operații pornire oprire reicircncărcare configurare

o configurare perioada de timp după care sesiunile nu mai sunt active

Host Manager ndash modulul de gestiune a gazdei

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xDezvoltarea unei aplicații web

webapps ndash locația contextul de accesare a aplicației

o META-INF ndash informații legate de server (contextxml)

o WEB-INF ndash informații legate de aplicație care nu vor fi accesibileclienților fișierul de configurare webxml

bull servlet asociere nume servlet (servlet-name) șiclasa servlet (servlet-class) load-on-startup ndash ordinea la icircncărcare

bull servlet-mapping ndash contextul de unde poate fi accesat servletul(url-pattern)

bull welcome-file-list ndash pagina Internet icircncărcată la pornirea aplicației web (welcome-file)

sursele aplicației (src sources) ndash nu există o denumire standard

clasele aplicației ndash obținute icircn urma compilării surselor (classes)

bibliotecile folosite de aplicație (lib)

bull icircncărcate manual cu ClassforName()

o alte resurse disponibile clienților (foi de stil imagini scripturi)

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xFișierul webxml

ltweb-appgt

ltservletgt

ltdescriptiongtltdescriptiongt

ltdisplay-namegtServletNameltdisplay-namegt

ltservlet-namegtServletNameltservlet-namegt

ltservlet-classgtServletClassltservlet-classgt

ltservletgt

ltservlet-mappinggt

ltservlet-namegtServletNameltservlet-namegt

lturl-patterngtServletClasslturl-patterngt

ltservlet-mappinggt

ltwelcome-file-listgt

ltwelcome-filegtServletNameltwelcome-filegt

ltwelcome-file-listgt

ltweb-appgt

servlet-ul va fi accesibil la httplocalhost8080ltapplication_directorygtServletClasso application_directory ndash subdirectorul din webapps de unde este accesată aplicația

o ServletClass ndash servlet-ul corespunzător

Java Servlet harr pagini Internet (mai multe icircntr-o aplicație web)

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xGestiunea serverului pornire ndash binstartup[bat|sh]

oprire ndash binshutdown[bat|sh]

dezvoltarea (eng deployment) aplicațiilor webo odată cu lansarea icircn execuție a serverului web

o sunt parcurse toate subdirectoarele din webapps astfel icircncacirct fiecare instanță a unei aplicații web este icircncărcată

Nov 24 2014 120000 AM orgapachecatalinastartupHostConfig deployDirectory

INFO Deploying web application directory BookStore

o Java Servlets ndash necesară icircn cazul modificării claselor corespunzătoare unor pagini Internet

o JavaServer Pages ndash transformarea paginilor Internet icircn clasele Java Servlets corespunzătoare (+ compilarea acestora) realizată automat la solicitarea venită din cadrul browser-ului

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Window rarr Preferences rarr Server rarr Runtime Environments)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (2)

2) tip al mediului de execuție Apache Tomcat v80

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (3)

3) configurareo denumire servero locația icircn care este instalato mediul de execuție Java cu care va rula

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash Eclipse Luna (4)

rezultat secțiunea Window rarr Preferences rarr Server rarr Runtime Environments

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (1)

1) specificarea unei referințe către serverul HTTP Apache Tomcat 8x (Services rarr Servers rarr click-dreapta rarr Add Server)

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (2)

2) tip al serverului Apache Tomcat or TomEE

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (3)

3) configurareo locația icircn care este instalato date de autentificare (nume utilizator parola) pentru publicarea aplicației web rolul manager manager-script posibilitatea de creare a utilizatorului icircn cazul icircn care nu există

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Serverul HTTP Apache Tomcat 8xInterfațarea cu medii integrate de dezvoltare ndash NetBeans 801 (4)

rezultat secțiunea Services rarr Serverso starea pornit oprit

o aplicațiile web dezvoltate icircn contextul său

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Tehnologia Java Servlets ndashaspecte generale permite dezvoltarea de aplicații web dinamice

alternativă la CGI (Common Gateway Interface) eliminacircndo dependentă de platformă

o scalabilitate redusă

caracteristicio eficiență ndash initializarea se face o singură data icircn metoda init()

o persistența ndash obiectele unui servlet există atacircta timp cacirct acesta se aflăicircn execuție

o portabilitate

o robustețe ndash acces la toate facilitățile oferite de limbajul de programareJava (ierarhie excepții garbage collection)

o extensibilitate ndash extinderea unui servlet se face potrivit modeluluide programare orientat obiect

o securitate ndash modelul de securitate Java

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Tehnologia Java Servlets ndashaspecte generale (contrsquod) clasă Java ce extinde capabilitățile unui server webo implementeaza interfata Servlet

o tipuri GenericServlet ndash service()

HttpServlet ndash doMethod() (Method=PostGetPutTraceOptionsDelete)

o pachete javaxservlet

javaxservlethttp

aplicații conform modelului cerere-răspuns

adaptată protocolului HTTP

se poate mapa oricărui tip de protocol

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Ciclul de viațăal unui Java Servlet controlat de containerul icircn care a fost configurat servlet-ul

operații la realizarea unei cereri asociate unui servleto dacă nu există o instanță a servlet-ului a) icircncărcarea clasei servlet

b) crearea unei instanțe a clasei servlet

c) inițializarea instanței clasei servlet prin apelarea metodei init()

o apelarea metodei service() care are ca parametrii obiectelecerere și răspuns

o atunci cacircnd servlet-ul nu mai este necesar se apelează metoda destroy()

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Ciclul de viațăal unui Java Servlet (contrsquod)

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Ciclul de viațăal unui Java Servlet (contrsquod)

Obiect Eveniment Interfaţă (ce trebuie) Implementată Obiect Eveniment

context

web

creare

distrugerejavaxservletServletContextListener ServletContextEvent

operaţii asupra

atributelor (CRUD)javaxservletServletContextAttributeListener ServletContextAttributeEvent

sesiune

creare invalidare

activare

pasivizare

expirare

javaxservlethttpHttpSessionListener

javaxservlethttpHttpSessionActivationListenerHttpSessionEvent

operaţii asupra

atributelor

(CRUD)

javaxservlethttpHttpSessionAttributeListener HttpSessionBindingEvent

cerere

cererea pentru un

obiect servlet este

procesată de

componentele

web

javaxservletServletRequestListener ServletRequestEvent

operaţii asupra

atributelor (CRUD)javaxservletServletRequestAtrributeListener ServletRequestAttributeEvent

clase ascultător pentru monitorizarea evenimentelor corespunzătoare ciclului de viață al unui obiect Java Servleto adnotate cu icircnsemnarea WebServleto primesc ca argumente parametrii ce conțin informații despre obiectul respectiv

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Structura unui Java Servlet clasă derivată din javaxservlethttpHttpServlet

adnotată cu icircnsemnarea WebServlet

o specifică cel puțin un URL

o cacircmpurile value (1 atribut) urlPatterns (mai multe atribute)

suprascrie metodeleo init(ServletConfig)

operații realizare o singură data utile doar obiectului servlet din contextul căruia este apelat

bull icircncărcarea de informații persistente (date de configurare)

bull Inițializarea resurselor

invocată ulterior icircncărcării instanțierii servlet-ului anterior acceptării invocărilor de la clienți

dacă nu este realizată cu succes este generată o excepție UnavailableException

alternativă la atributul initParams al adnotării WebServlet

bull conține icircnsemnarea WebInitParams

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Structura unui Java Servlet(contrsquod) suprascrie metodeleo service(ServletRequest ServletResponse)

implementează funcționalitatea servlet-ului

definită icircn clasa GenericServlet

clasa HttpServlet deleagă funcționalitatea ei icircn funcție de tipul de cerere primită

bull HTTP GET rarr doGet()

bull HTTP POST rarr doPost()

bull HTTP PUT rarr doPut()

bull HTTP DELETE rarr doDelete()

bull doOptions() doTrace() ndash mai puțin utilizate

tratarea cererii

bull getParameterNames() ndash numele parametrului

bull getParameter(String) ndash valoarea parametrului

formularea răspunsului getWriter() rarr PrintWriter

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Structura unui Java Servlet(contrsquod) suprascrie metodeleo destroy()

apelată atunci cacircnd servlet-ul este icircnchis

toate resursele folosite de servlet trebuie eliberate

se asigură persistența prin reținerea informațiilor necesare din baza de date

toate metodele serviciu asociate unui servlet trebuie terminate icircnainte de distrugerea sa

toate firele de execuție ce deservesc clienți trebuie să fie terminate

bull contorizarea numărului de fire de execuție active

bull așteptarea terminării lor prin invocarea metodei Threadsleep()

o getServletInfo() ndash oferă informații despre servlet

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Gestiunea cererilorprin Java Servlets implementează interfața ServletRequesto accesarea parametrilor transmiși de clienți prin intermediul unor formulare

o obținerea valorilor unor obiecte folosite la comunicarea dintre un container al servlet-ului și servlet icircntre mai multi servleți

o Informații despre protocolul prin care este transmisă cererea și desprelocație

HttpServletRequest

o URL-ul cererii http[adresa][port][cale][interogare]

bull cale = cale contextuală + calea către servlet + alte informații

bull getContextPath() getServletPath() getPathInfo()

o antetele HTTP

o interogarea formată din perechi (nume valoare) pentru parametrii transmiși

ometode getContentType() getCookies() getHeaderNames() getHeaders() getSession() getInputStream() getMethod() getParameterNames() getParameter()

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Gestiunea răspunsurilorprin Java Servlets implementează interfața ServletResponseo conține datele transmise de la servlet către client

o obținerea unui flux prin care se poate realiza comunicarea cu clientul

o specificarea tipului de conținut setContentType(texthtml)

o alocarea unei zone de memorie setBufferSize(int) datele nu sunt transmise imediat către client ci după completarea zonei de memorie

stabilirea unor coduri de stare antete

HttpServletResponse

o construirea documentului care va fi transmis de la server către client icircntr-un obiect PrintWriter

o conține antete HTTP coduri de stare indisponibilitatea resursei redirectare

obiecte ce vor reține informații specifice aplicației (cookies)

ometode moștenite din ServletResponse flushBuffer() getsetBufferSize() getsetContentType() getOutputStream() setCharacterEncoding()

proprii addCookie() getsetHeader() getsetStatus()

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Structura unui Java ServletExemplu

WebServlet(SampleServlet)

public class SampleServlet extends HttpServlet

final public static long serialVersionUID = 1024L

Override

public void init(ServletConfig config) throws ServletException

superinit(config)

Override

public void destroy()

Override

public void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

ArrayListltStringgt values = new ArrayListltgt()

Enumeration parameters = requestgetParameterNames()

while(parametershasMoreElements())

String parameter = (String)parametersnextElement()

if (parametercontains())

valuesadd(requestgetParameter(parameter)))

responsesetContentType(texthtml)

PrintWriter printWriter = new PrintWriter(responsegetWriter())

displayForm(printWriter)

printWriterclose()

Override

public void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Implementarea unor funcționalități complexeFiltre funcționalitățio analiza unei cereri și acționarea icircn conformitate cu aceasta

o blocarea unei cereri și a răspunsului corespunzător pentru a fi prelucratemai departe

omodificarea antetelor conținutului obiectelor cerere răspunsconstruind o versiune particularizată a acestora

o interacțiunea cu resurse externe

pot fi atașate mai multor resurse web de care nu sunt dependente

utilizate la autentificare jurnalizare conversie de imagini compresiea datelor criptare parsarea fluxtului de date transformări XML

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Implementarea unor funcționalități complexeFiltre (contrsquod) lanț de filtre = listă ce conține 0 1 sau mai multe filtre executateicircntr-o anumită ordine

javaxservlet definește claseleo Filter

o FilterChain

o FilterConfig

implementează interfața javaxservletFilter

adnotat cu icircnsemnarea WebFilter

o specifică un URL icircn value sau urlPatterns

o informațiile cu privire la inițializare sunt conținute icircn initParams

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Implementarea unor funcționalități complexeFiltre (contrsquod) funcționalitatea este implementată icircn metoda doFilter()o analizează antetele cereriio particularizează obiectele cerere și răspuns modificacircnd antetele sau conținutul poate adăuga un atribut la cerere introduce informații la răspuns

pentru a suprascrie metodele cererii răspunsului obiectele vor fi icircmpachetate icircn obiecte derivate din [Http]ServletRequestWrapper [Http]ServletResponseWrapper

o invocă următorul filtru din lanțul de filtre (prin apelul metodei doFilter() a acestuia)

o analizează antetele răspunsuluio poate bloca comunicația mai departeo poate genera o excepție pentru a indica producerea unei erori

asocieri icircntre filtre și resurse web (prin nume URL)o determină modul și ordinea icircn care sunt aplicateo jurnalizare masca (se aplică tuturor evenimentelor referitoare la comunicația

dintre client și server)o tipuri de asocieri 1 filtru rarr mai multe resurse web

1 resursă web rarr mai multe filtre

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Implementarea unor funcționalități complexeInvocarea altor resurse web se obține un obiect RequestDispatcher folosindu-se metoda

getRequestDispatcher() ce primește ca parametru URL-ul resursei ce va fi invocatăo aplicată pe obiectul cerere ndash cale relativă

o aplicată pe contextul web ndash cale absolută

o dacă resursa nu este disponibilă sau serverul nu implementează un obiect RequestDispatcher

pentru tipul respectiv de resursă metoda intoarce null

se realizeazăo direct incluzacircnd conținutul altei resurse

bull header footer informatii de copyright meniuri

bull se folosește metoda include() (se execută componenta web ndash primind ca parametru cererea afișacircndu-se rezultatul)

transmițacircnd mai departe cererea către o altă resursă

bull se folosește metoda forward()

bull URL-ul cererii se modifică la cel al paginii acesta realizacircnd prelucrarea ei și primind responsabilitatea răspunsului

bull nu este permisă daca au fost folosite obiecte ServletOutputStream sau PrintWriter icircn servlet (se generează

IllegalStateException)

o indirect ndash icircncorporacircnd un URL către o alta resursă web icircn răspunsul transmis către client

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Implementarea unor funcționalități complexeInvocarea altor resurse web (contrsquod)

RequestDispatcher requestDispatcher = null

switch(getUserRole(userNameuserPassword))

case ConstantsUSER_ADMINISTRATOR

requestDispatcher = getServletContext()getRequestDispatcher(AdministratorServlet)

break

case ConstantsUSER_CLIENT

requestDispatcher = getServletContext()getRequestDispatcher(ClientServlet)

break

if (requestDispatcher=null)

requestDispatcherforward(requestresponse)

accesarea contexului web ndash getServletContext() rarr ServletContext

o parametrii de inițializare

o resurse asociate cu contextul web

o atribute avacircnd asociate tipuri de obiecte

o capabilități legate de jurnalizare

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Implementarea unor funcționalități complexeIcircncărcarea de fișiere (contrsquod) adnotarea javaxannotationMultipartConfig

o indică faptul că servletul pentru care este declarată poate prelucra cererifolosind tipul MIME multipartform-date

o componentele javaxservlethttpPart pot fi obținute folosind metodele CollectionltPartgt getParts() ndash pentru fișiere avacircnd tipuri diferite Part getPart(String) ndash o parte identificată printr-un nume analiza fiecărei părți nume dimensiune tip de conținut procesarea antetelor transmise

icircmpreună cu partea respectivă salvarea pe disc ștergerea ei

o atribute location ndash calea absolută către un director din sistemul de fișiere pentru a stoca

fișiere temporare icircn timp ce părțile fișierului sunt procesate sau cacircnd dimensiunea fișieruluidepășeste fileSizeThreshold valoarea implicită = ldquordquo

fileSizeThreshold ndash dimensiunea fișierului (exprimată icircn octeți) după care acesta va fi stocattemporar pe disc implicit = 0

maxFileSize ndash dimensiunea maximă pentru icircncărcarea de fișiere exprimată icircn octeți implicit = nelimitat

maxRequestSize ndash dimensiunea maximă pentru o cerere multipartform-date exprimatăicircn octeți implicit = nelimitat

pot fi specificate in webxml icircn secțiunea ltmultipart-configgt

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Implementarea unor funcționalități complexeProcesare asincronă necesară icircn cazul icircn care unele fire de execuție sunt blocate așteptacircndanumite resurse avacircnd un impact negativ asupra scalabilității aplicațiilor

presupune crearea unui fir de execuție pentru fiecare operație blocantă

WebServlet(asyncSupported=true) ndash servletul are capacitateade a realiza procesare asincronă

requeststartAsync() rarr javaxservletAsyncContext ndash cererea va fi transferată unui context asincrono răspunsul nu va fi transmis clientului la ieșirea din metoda service()

o răspunsul trebuie generat icircn contextul asincron după terminareaoperației blocante sau gestionat de alt servlet

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

clasa AsyncContexto void start(Runnable run) ndash este creat un nou fir de execuție unde

va fi procesată operația blocantă codul ce tratează prelucrarea trebuie sa fie specificat icircn clasa ce implementează interfața Runnable

o ServletRequest getRequest() ndash icircntoarce cererea folosită pentrua initializa contextul asincron (pentru a obține parametrii cereriiicircn contextul asincron)

o ServletResponse getResponse() ndash icircntoarce răspunsul folosit pentrua inițializa contextul asincron (pentru a construi răspunsul cu rezultateleoperației blocante)

o void complete() ndash termină operația asincronă și transmite răspunsulasociat contextului asincron

o void dispatch(String path) ndash transmite obiectele cerere răspuns cătrecalea indicată (spre a delega altui servlet responsabilitatea cu privire la ele după terminarea operației)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

WebServlet(urlPatterns=asyncServlet asyncSupported=true)public class AsyncServlet extends HttpServlet

Overridepublic void service(HttpServletRequest request HttpServletResponse response)

responsesetContentType(texthtml)final AsyncContext asyncContext = requeststartAsync()asyncContextstart(new Runnable()

public void run() HttpServletRequest request = asyncContextgetRequest()String value = requestgetParameter(attribute)HttpServletResponse response = asyncContextgetResponse()responsegetWriter()println(blockingOperation(value))asyncContextcomplete()

)

Implementarea unor funcționalități complexeProcesare asincronă (contrsquod)

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Implementarea unor funcționalități complexeOperații de intrareieșire asincrone necesare atunci cacircnd operațiile de intrare ieșire sunt mai rapide pe server decacirct pe client

asociate de regulă cu procesarea asincronă pentru eliminarea timpilor morțidin firele de execuție

se folosesc clase ascultător care detectează momentul icircn care operațiile pot fi realizate non-blocant

javaxservletServletInputStream rarr void setReadListener(ReadListener rl) ndashasociază fluxului de intrare un obiect ascultător care conține metode pentru a citidate asincrono metode onDataAvailable() onAllDataRead() onError(Throwable)o isReady() ndash datele pot fi citite non-blocanto isFinished() ndash toate datele au fost citite

javaxservletServletOutputStream rarr void setWriteListener(WriteListener wl) ndash asociază fluxului de ieșire un obiect ascultător care conține metode pentru a scriedate asincrono metode onWritePossible() onError(Throwable)o isReady() ndash datele pot fi scrise non-blocant

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Interfațarea Java Servlets cu un sistem de gestiunepentru baze de date folosind metodele puse la dispoziție de API-ul Java DataBase Connectivity

driver-ul de conectare la baza de date trebuie icircncărcat explicit icircnaintede a realiza accesul propriu-zis la informațiio ClassforName(commysqljdbcDriver)

o se apelează icircn mod automat DriverManagerregisterDriver() care primește ca argument instanța creată inclusă icircn lista de ldquodrivererdquo pentru obținerea de conexiuni

pot fi reutilizate metodele de acces la baza de date folosite icircn cazulaplicațiilor desktop

clientul are acces la informațiile din baza de date fără a avea nevoiede nici un utilitar suplimentar acestea găsindu-se pe server

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Mecanisme pentrugestiunea stăriifolosind Java Servlets

necesare datorită faptului ca HTTP este un protocol fără stare(spre diferență de FTP)o cererile și răspunsurile sunt tranzacții izolate

o trebuie corelate accesările care provin de la același utilizator

soluțiio cacircmpurile ascunse ltINPUT type=hidden gt - conținute icircn formularele din paginile HTML

pot fi identificate cu ușurință

o rescrierea URL-urilor adăugarea informațiilor la URL-urile paginilor transmise utilizatorilor

se folosește icircmpreună cu protocolul HTTP GET

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio cookies perechi (cheie valoare) create pe server și transmise ca instrucțiuni clientului icircn antetul

mesajului HTTP

javaxservlethttpCookie

bull constructor cu 2 parametri de tip String (cheie valoare)

bull metode setgetNameValue()

bull includerea icircn răspuns responseaddCookie(Cookie)

bull preluarea din cerere requestgetCookies() rarr Cookie[]

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) soluțiio sesiuni ndash identificarea conexiunii dintre client și server prin crearea

unui obiect specific acesteia javaxservlethttpHttpSession

requestgetSession() rarr HttpSession

atribute (avacircnd ca valori diferite obiecte) pot fi asociate sesiunii prin nume

bull obținerea atributelor getAttributeNames() getAttribute(String) ndash pe obiectulrequest

bull stabilirea atributelor setAttribute(StringObject) removeAttribute(String) ndashpe obiectul response

javaxservlethttpHttpSessionBindingListenerInterface ndash asocierea disocierea unuiobiect cu o sesiune

javaxservlethttpHttpSessionActivationListener ndash monitorizarea activării pasivizariisesiunii

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată

Mecanisme pentrugestiunea stăriifolosind Java Servlets (contrsquod) implementate prin cookie-uri rescrierea URL-urilor

o identificatorul conexiunii dintre server și client este reținut pe client (cookie) sau inclus icircn URL-ul transmis clientului

o encodeURL(URL) ndash pe obiectul răspuns rescrie URL-ul dacă clientul nu accepta cookie-uri

lasă URL-ul neschimbat dacă clientul acceptă cookie-uri

expirarea sesiuniio setgetMaxInactiveInterval()

o perioada după care sesiunea nu mai este necesară resursele folositede aceasta putacircnd fi eliberate

o timpul de expirare este reinițializat prin accesarea metodelor serviciu

o invalidate() ndash apelată cacircnd interacțiunea cu un client este icircncheiată