Platfrmă de e learning și curriculă e cntent pentru învățământul superir tehnic Instrumente pentru Dezvltarea Prgramelr 22. Instrumente avansate Web: Servlets & JSP.
Servlet Definitia Oracle pentru Servlet: A servlet is a Java prgramming language class that is used t extend the capabilities f servers that hst applicatins accessed by means f a request-respnse prgramming mdel. Pachetele cele mai utilizate in lucrul cu servleti sunt javax.servlet si javax.servlet.http. Tti servletii trebuie sa implementeze interfata Servlet, care defineste metde specifice ciclului de viata pentru un servlet. Ciclul de viata a unui servlet este cntrlat de cntainerul in care serverul a fst depliat. Cand cerere este mapata unui servlet, cntainerul face urmatrii pasi; daca instanta de servlet nu exista, cntainerul : incarca clasa servlet creeaza instanta de clasa servlet initialiaza servlet-ul apeland metda init. invca metda service, care primeste drept argumente biecte de tip requst si respnse. Clabrarea intre cmpnentele Web se face prin biecte care sunt mentinute ca atribute ale patru biecte de tip scpe. HTTP este un prtcl stateless. Sesiunea este reprezentata de un biect de tip HttpSessin.La sesiune se pt ascia atribute bject-valued prin nume. Astfel de atribute sunt accesibile din rice cmpnenta web care apartine aceluiasi cntext si care se cupa de un request care face parte din aceeasi sesiune. Mai multi servleti dintr- aplicatie pt flsi date (atribute) din patru biecte cmune, numite Scpe Objects : Web Cntext : accesibil tuturr cmpnentelr dintr-un cntext (aplicatie) Sessin: accesibil cmpnentelr dintr- sesiune client Request: accesibil cmpnentelr care trateazã cerere Page: accesibil paginii JSP care a creat biectul Serviciile ferite de un servlet sunt implementate in metda service a unui GenericServlet, in metdele dmethd (Get, Delete,Optins, Pst, Put r trace) pentru HttpServlet sau intr- metda specifica definita intr- clasa ce implementreaza interfata servlet. Aceste metde extrag infrmatii din biectul cerere, acceseazã resurse externe si cmpleteazã rãspunsul cu infrmatiile btinute din resurse externe (cum ar fi baze de date). Parametrii unei cereri apar în sirul de cereri (Query String), separat de calea la cmpnenta prin? Pattern-ul general pentru metda serviciu este de a extrage infrmatii de la biectul Request primit ca parametru, acces la resurse externe, api ppularea biectului Respnse cu infrmatii. Metda crecta de cmpletare a raspunsului este ca prima data sa se btina un utput stream pentru raspuns, se cmpleteaza headerele raspunsului,api in final se scrie crpul raspunsului la utput stream. Headerele raspunsului vr trebui setate ttdeauna inainte ca raspunsul sa fie cmis. Orice alta tentativa de a a seta sau adauga headere data ce raspunsul a fst cmis va fi ignrata de cntainerul Web. Un biect de tip Request cntine date pasate intre client si servlet, implementand interfata Servlet request. Astfel, se pt accessa parametri si atribute setate pe Request.
Obiectele de tip Respnse implementeaza interfata ServletRespnse. Pentru a trimite date, se flseste un PrintWriter btinut apeland metda getwrite a biectului Respnse. Pentru a pune si infrmatii binare, se flseste ServletOutputStream. Indicarea tipului de cntinut returnat de raspuns se face prin metda setcntenttype(string). Un biect de tip Filter pate mdifica atat headerul, cat si cntinutul unui Obiect de tip Request sau Respnse. De biecei, filtrele sunt atasate unui tip de resursa Web. API-ul specific pentru lucrul cu filtre se gaseste in pachetul javax.servlet, clasele Filter, FilterChain si FilterCnfig. O cmpnenta Web pate invca alta resursa in timp ce se executa, prin includerea cntinutului altei resurse sau prin frwardarea cererii catre alta resursa. Diferenta intre frward si sendredirect: Frward Cntrlul este transferat in intregime pe server Utilizatrul nu vede adresa paginii JSP destinatie SendRedirect Cntrlul este transferat trimitand clientului un status cd 302 si header de raspuns Lcatin. Utilizatrul vede adresa paginii JSP destinatie si pate memra astfel incat sa acceseze independent. Se btine un biect de tip RequestDispatcher. Pentru a include resursa se apeleaza metda include(request, respnse) a biectului RequestDispatcher. Pentru a transfera cntrlul catre alta cmpnenta Web se flseste metda frward specifica unui RequestDispatcher. Cand cntainerul de servleti determina ca un servlet ar trebui inlaturat, cntainerul apeleaza metda destry din interfata Servlet. Aplicatii WEB urmaresc in general implementarea design pattern-ului MVC. Astfel, servletii sunt cei care se cupa de partea de cntrl, business-lgic, iar paginile JSP se cupa de partea de vizualizare, view, din aplicatie. Integrarea unei aplicatii WEB in pattern ul MVC - Definirea de bean-uri pentru a reprezenta datele - Flsirea servlet-ilr in prelucrarea request-urilr - Ppularea bean-urilr - Stcarea bean-urilr in request,sessin sau servlet cntext - Frwardarea bean-urilr la JSP - Extragerea datelr de afisare din bean-uri in JSP Exemplu de servlet: imprt java.i.*; imprt javax.servlet.*; imprt javax.servlet.http.*; public class HellServlet extends HttpServlet { public vid dget(httpservletrequest request, HttpServletRespnse respnse) thrws
} ServletExceptin, IOExceptin { respnse.setcntenttype("text/html"); PrintWriter ut = respnse.getwriter(); ut.println ( <html> ); ut.println ( <bdy> ); ut.println ( <h1>hell Wrld! </h1> ); ut.println ( </bdy> ); ut.println ( </html> ); JavaServer Pages Technlgy JavaServer Pages ( JSP) faciliteaza creearea facila de cntinut web atat static cat si dinamic. Ideea paginilr JSP este de a extinde paginile HTML cu fragmente de cd Java incluse între taguri delimitate de <% si %>. Paginile JSP sunt transfrmate (cmpilate) autmat în servleti de cãtre un mtr JSP (JSP Engine). Ciclul de viata a unui JSP si multe din capabilitati sunt inspirate din tehnlgia flsita la servleti. Cntinutul static se scrie de bicei sub frma unui dcument HTML. Elemente imprtante din JSP flsite in generarea cntinutului dinamic: - directive - flsite pentru a translata si executa paginile JSP - elemente de scriptinf - limbajul EL (expressin langiage). - jsp:[set get] Prperty in crelare cu bean0uri - jsp:[include frward] - jsp:plugin pentru a activa un applet - custm tags Limbajul Unificat este un tl puternic flsit in JSp-uri pentru manipularea datelr din cmpnente de tip Bean. Un link util despre Unified expressin Language este http://dwnlad.racle.cm/javaee/5/tutrial/dc/bnahq.html. Obiectele specifice flsite in cadrul expresiilr din JSP sunt: - pagecntext: 1. servletcntext 2. sessin 3. request
4. respnse param -paramvalues -header -headervalues -ckie -initparam -pagescpe -requestscpe -sesssinscpe -applicatin Scpe Sintaxa pentru a flsi cmpnenta JavaBean: <jsp:usebean id= nume class= fully-qualified-classname scpe = scpe > Sintaxa pentru setarea unei prprietati pentru cmpnenta JavaBean; <jsp:setprperty name = JavaBeanNume prperty = numeprp value= valare > Sintaxa pentru a btine prprietate dintr-un bean: <jsp:getprperty name = JavaBeanNume prperty = numeprp > Sintaxa pentru declararea librariei de taguri: <% taglib prefix= tt [tagdir= /WEb-INF/tags/dir uri = URI] Flsire custm tags: <prefix:tags attrel = value.. attrn = value > Pentru a reuliza cntinutul JSP intr- pagina JSP se pate flsi directiva include sau elementul jsp:include. Directiva este flsita in mmentul translarii paginii JSP intr- clasa servlet, iar elementul este prcesat in mmentul in care pagina JSP este executata. Un JSP pate transfera cntrlul catre alta pagina flsind elementul jsp:frward. Apendarea unr parametri la pagina JSp se face flsind elementul jsp:param. Un tutrial interseant de jsp se gaseste aici http://www.jsptut.cm/. Exemple de servlets gasiti la http://elf.cs.pub.r/idp/_media/labratare/servletjsp.zip.