Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
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ă