CATEGORII DOCUMENTE |
Redirectionarea cererilor
În multe situatii, servlet-ul care primeste o cerere intreprinde actiuni diferite in functie de valorile parametrilor. Pentru fiecare actiune putem prevedea o resursa - un servlet, un JSP sau o pagina HTML - catre care servlet-ul redirectioneaza cererea.
Rezolvarea acestei situatii poate fi facuta apeland la interfata RequestDispatcher din pachetul javax.servlet si la metodele sale forward si include. Precizam ca resursa trebuie sa se afle tot pe server.
Primul pas consta in obtinerea unui obiect de tipul RequestDispatcher (a unui dispecer) prin:
RequestDispatcher dispecer =
getServletContext().getRequestDispatcher(url);
unde url este calea catre resursa; aceasta cale trebuie sa inceapa cu '/' si este relativa la directoarele gestionate de ContextManager.
Interfata RequestDispatcher pune la dispozitie metodele forward si include:
public void forward(ServletRequest req,ServletResponse resp)cu precizarea ca parametrii trebuie sa fie exact cei din antetul metodei service a servlet-ului.
În mod tipic, servlet-ul primeste cererea de la client, intreprinde o prelucrare preliminara, creaza un dispecer si prin intermediul acestuia invoca una dintre metodele de mai sus.
La invocarea metodei forward, resursa este cea care genereaza raspunsul catre client. Servlet-ul nu poate trimite nimic clientului, totul cazand in sarcina resursei.
Metoda include este asemanatoare metodei forward, cu urmatoarele doua exceptii:
- servlet-ul poate trimite continut browser-ului clientului inaintea redirectionarii;
- la terminarea actiunii resursei, controlul revine servlet-ului.
Mai mentionam ca cererea redirectionata este de acelasi tip (GET sau POST) ca si cererea primita de servlet. O cerere de tipul POST nu poate fi redirectionata catre un HTML; rezolvarea acestei situatii consta in a schimba extensia paginii HTML in .jsp (nu intram in amanunte).
La redirectionare se transmite toata informatia furnizata de client; resursa o poate regasi prin parametrul req de tipul HttpServletRequest.
Exemplu Vom prezenta un servlet al carui singur rol este de a redirectiona cererea catre servlet-ul Salut.java.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Forward extends HttpServlet
Acest servlet poate fi pornit de exemplu prin :
https://localhost:8080/User/servlet/Forward?nume=Ion&val=222
Pentru adaugarea de informatii suplimentare in HttpServletRequest, respectiv regasirea lor, pot fi folosite urmatoarele doua metode publice ale interfetei ServletRequest:
void setAttribute(String nume, Object Ob)
care
adauga in cerere parametrul nume cu valoarea
Object getAttribute(String nume)
care intoarce valoarea parametrului-cerere nume ca un obiect de tipul Object; in consecinta este necesara o conversie explicita la tipul real al parametrului;
void removeAttribute(String nume)
care are acelasi efect cu invocarea metodei setAttribute cu al doilea argument egal cu null; practic, realizeaza stergerea din cerere a parametrul nume.
Daca cererea este de tipul GET si dorim sa adaugam parametri, o alta modalitate este ca in url sa adaugam sufixul:
?param1=val1¶m2=val2&
Exemplu. Servlet-ul Include.java intoarce clientului un document HTML, adauga cererii doi parametri si o redirectioneaza de doua ori catre servlet-ul Include1.java, folosind metoda include. Acesta include in documentul HTML valorile celor doi parametri.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Include extends HttpServlet
}
import java.io.*;
import javax.servlet.*; import javax.servlet.http.*;
public class Include1 extends HttpServlet
}
Exemplele de mai sus sunt pur didactice. Asa cum am mentionat de la inceput, cadrul tipic este cel in care servlet-ul primeste o cerere si intreprinde actiuni diferite in functie de valorile parametrilor; pentru fiecare actiune este prevazuta o resursa catre care este redirectionata cererea.
Sa presupunem ca servlet-ul S care primeste cererea initiala primeste si un parametru i ce poate avea una dintre valorile 1, 2 sau 3, in functie de care cererea este redirectionata catre unul dintre servlet-urile S1, S2 sau S3 din acelasi director ca si S. Atunci in servlet-ul S se poate folosi urmatorul model:
public void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, IOException
private void redirectionare(String resursa,
HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, IOException
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1889
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved