Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Clasa HttpServlet
Atunci cand se scrie un servlet care va fi invocat printr-o cerere Http, se va extinde aproape intotdeauna clasa HttpServlet. Aceasta clasa implementeaza multe detalii folositoare de preluare a cererilor Http, si are multe clase utilitare pentru primirea de cereri HTTP si pentru trimiterea raspunsurilor HTTP formatate corespunzator.
Clasa HttpServlet este o subclasa a clasei GenericServlet, si ca are toate facilitatile clasei respective.
1. Definirea metodelor HTTP
Cererea clientului HTTP poate fi de doua feluri : cerere simpla sau completa.
In general, programul trebuie sa utilizeze cereri complete, in afara cazului in care se lucreaza cu HTTP, versiunea 0.9. Singura metoda care utilizeaza cererea simpla este GET, utilizata pentru a regasi o resursa. Sintaxa este : GET URI <CR/LF>
In schimb, o cerere completa incepe cu o linie de cerere, <CR/LF>, apoi informatia codificata sub forma unui antet (optional), <CR/LF> si corpul entitatii (optional). Linia de cerere are sintaxa :
Metoda Cerere-URI versiune-HTTP <CR/LF>
Diferenta intre o cerere simpla si una completa este prezenta campului versiune HTTP si posibilitatea de a specifica mai multe cereri HTTP (nu numai GET, ci si HEAD, POST, ).
Metoda GET cere serverului Web sa regaseasca informatia identificata de URI. Serverul obtine resursa ceruta de client utilizand adresa resursei. Metoda GET devine GET conditional daca mesajul cerere trimis de client include un camp antet If-Modified-Since. O metoda GET conditional cere ca serverul sa transfere resursa specificata numai daca a fost modificata de la data specificata in campul If-Modified-Since. In cazul in care clientul a transferat deja obiectul si a ascuns entitatea GET conditional reduce gradul de utilizare al retelei pentru ca nu mai este nevoie de un transfer inutil.
Metoda HEAD este similara lui GET, cu exceptia faptului ca serverul nu returneaza un corp de entitate in raspuns. Aplicatiile utilizeaza HEAD pentru a obtine informatii (in special de antet) despre resursa identificata de URI, fara a transfera corpul entitatii. Informatia de antet (metainformatie) trebuie sa fie aceeasi cu informatia trimisa de server ca raspuns la o cerere cu metoda GET. Aplicatiile utilizeaza metoda HEAD pentru a testa validitatea, accesibilitatea si modificarile legaturilor hipertext.
Metoda POST cere serverului Web sa utilizeze obiectul din cerere ca resursa identificata de URI in linia de cerere. Deci clientul spune serverului Web "aceasta este noua sursa pe care o utilizati cu URI-ul pe care vi l-am furnizat". In majoritatea cazurilor, POST creaza sau inlocuieste o resursa asociata cu URI-ul trimis cu metoda POST. Totusi, un POST completat cu succes nu cere ca entitatea sa fie resursa pe serverul de origine (serverul care receptioneaza cererea completa) sau sa fie accesibila pentru o viitoare referinta. Deci, e posibil ca actiunea realizata de metoda HTTP POST sa nu furnizeze o resursa identificabila prin URI. In acest caz, serverul va returna un cod de stare 200 (OK) sau 204 (fara continut), depinzand de includerea (sau nu) in raspuns a unui obiect care sa descrie rezultatul.
Daca un client creaza o resursa pe un server de origine, clientul trebuie sa creeze un cod de stare 201 care contine un obiect (text, HTML, ) care descrie starea cererii.
Toate cererile HTTP POST necesita un camp Content Length valid. Un server HTTP trebuie sa corespunda cu un cod de stare 400 (cerere eronata) daca nu poate determina lungimea continutului mesajului cerere.
Alte metode HTTP : CHECKIN, CHECKOUT, DELETE, LINK, PUT, SEARCH, SHOWMETHOD, SPACEJUMP, TEXTSEARCH si UNLINK. Acestea sunt mai putin utilizate si nu toate serverele permit aceste metode.
2. Constructori
Clasa are urmatorul constructor:
protected HttpServlet() Acest constructor ar trebui apelat de o subclasa; implementarea curenta nu face nimic.
3. Metode
Servleturile care extind clasa HttpServlet trebuie sa suprascrie metoda service() pentru a servi cererea. In schimb, clasa HttpServlet are cateva metode de nivel inalt pentru cereri HTTP; doGet() and doPost() pentru operatiile de baza HTTP/1.0, si doPut(), doDelete(), doTrace(), and doOptions() pentru operatiile specifice HTTP/1.1. Aceste metode folosesc structuri de date specifice HTTP, HttpServletRequest si HttpServletResponse pentru a interoga cererea si a returna raspunsul.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException) Aceasta metoda ar trebui suprascrisa pentru acele servleturi care vor prelua cereri Http GET. Aceste cereri nu contin date in InputStream-ul cererii; orice informatie speciala va fi inclusa in parametrii cererii. Implementarea implicita a acestei metode intoarce o eroare de cerere.
Atunci cand se defineste un protocol servlet, metoda GET ar trebui folosita numai pentru cereri sigure. In particular, protocoalele specifica ca o cerere get poate fi repetata in siguranta fara efecte secundare nedorite. Cu alte cuvinte, o cerere GET trebuie sa fie idempotenta; nu ar trebui sa schimbe starea servletului.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException Aceasta metoda trebuie suprascrisa pentru a prelua cereri HTTP POST. Subclasele care implementeaza aceasta metoda trebuie sa citeasca date din InputStream-ul cererii, sa seteze header-ii de raspuns, si sa scrie datele de raspuns. Implementarea implicita a acestei metode intoarce o eroare la cerere.
Atunci cand se defineste un protocol servlet, metoda post este potrivita pentru a fi folosita in actiuni care vor influenta starea servletului.
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException Aceasta metoda este apelata pentru operatia PUT, asa cum este definita ea in HTTP 1.1. Aceasta operatie este similara cu trimiterea unui fisier prin FTP.
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException IOException Aceasta metoda este apelata pentru a defini operatia DELETE, asa cum este definita in HTTP 1.1. Daca clientul are drepturi de acces potrivite, atunci implementarea acestei metode ar trebui sa inlature cererea URL de pe server. Implementarea acestei metode intoarce o eroare a cererii.
protected void doTrace(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException Aceasta metoda implementeaza operatia Trace, asa cum este ea definita in HTTP 1.1. Operatia trace intoarce o pagina inapoi catre client in care sunt listate toti parametrii trimisi in cerere. Aceasta metoda, de obicei nu este suprascrisa.
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException IOException Aceasta metoda implementeaza operatia Options, asa cum este definita in HTTP 1.1. Aceasta intoarce o lista de optiuni suportate de servlet. Un servlet suporta o operatie HTTP daca suprascrie metoda de preluare (ex. doGet, doPost).
protected long getLastModified(HttpServletRequest request,) Aceasta metoda trebuie sa intoarca timpul (in milisecunde trecute de la: 1 ianuarie,1970, 00:00:00 GMT) in care obiectul cerut a fost ultima data modificat. Cand un client cere un document, el poate avea deja o versiune locala cache. Prin interogarea timpului in care s-a facut modificarea, se poate determina daca versiunea locala cache mai este valida, sau daca ar trebui un download pentru o copie innoita.
Suprascrierea acestei metode permit ca obiectele cerute sa fie accesate prin intermediul acestor cereri conditionale, ca si pentru a fi puse in cache. Implicit, aceasta metod intoarce -1, indicand ca timpul ultimei modificari este necunoscut, si in acest caz, documentul nu ar trebui pus in cache.
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException Aceasta metoda este o metoda service() generalizata, care proceseaza cereri HTT. Este apelata automat de implementarea implicita HttpServlet a metodei Servlet service(); imparte cererea automat si se ocupa de cererile standard HTTP, apeland doGet(), doPost(), getLastModified(), si mai multe, in functie de cererea clientului. Aceasta metoda trebuie suprascrisa daca se doreste sa se suporte tipuri nonstandard de cereri HTTP. Implementare acestei superclase trebuie apelata pentru toate cererile normale.
Copyright © 2024 - Toate drepturile rezervate