L08 - Servlet Part3
L08 - Servlet Part3
• IMPORTANTE: Servlet context viene condiviso tra tutti gli utenti, le richieste e
le Servlet facenti parte della stessa Web application
Parametri di inizializzazione del contesto
• Parametri di inizializzazione del contesto definiti all’interno di elementi
di tipo context-param in web.xml
• Es:
Cookie[] cookies = null;
cookies = request.getCookies();
Cookie cookie = cookies[i] //i-esimo Cookie
cookie.setMaxAge(0);
response.addCookie(cookie);
Uso della sessione
• La sessione Web è un’entità gestita dal Web Container
• È condivisa fra tutte le richieste provenienti dallo stesso client:
consente di mantenere, quindi, informazioni di stato (di sessione)
• Può contenere dati di varia natura ed è identificata in modo
univoco da un session ID
• Viene usata dai componenti di una Web application per
mantenere lo stato del client durante le molteplici interazioni
dell’utente con la Web application
URL-Rewriting
• Idea
• Client appends some extra data on the end of each URL that
identifies the session
• Server associates that identifier with data it has stored about
that session
• Es: http://host/path/file.html;jsessionid=1234
• Advantage
• Works even if cookies are disabled or unsupported
• Disadvantages
• Must encode all URLs that refer to your own site
• All pages must be dynamically generated
• Fails for bookmarks and links from other sites
Hidden form fields
• Idea:
<input type=”hidden” name="session” value="...">
• Advantage
• Works even if cookies are disabled or unsupported
• Disadvantages
• Lots of tedious processing
• All pages must be the result of form submissions
Accesso alla sessione
• L’accesso avviene mediante l’interfaccia HttpSession
• Per ottenere un riferimento ad un oggetto di tipo HttpSession si usa il
metodo getSession() dell’interfaccia HttpServletRequest
public HttpSession getSession(boolean createNew);
• Valori di createNew:
• true: ritorna la sessione esistente o, se non esiste, ne crea una nuova
• false: ritorna, se possibile, la sessione esistente, altrimenti ritorna null
…
Attenzione: scope DIFFERENZIATI (scoped objects)
• Gli oggetti di tipo ServletContext, HttpSession, HttpServletRequest
forniscono metodi per immagazzinare e ritrovare oggetti nei loro
rispettivi ambiti (scope)
• Lo scope è definito dal tempo di vita (lifespan) e dall’accessibilità da
parte delle Servlet
Funzionalità degli scoped object
• Gli oggetti scoped forniscono i seguenti metodi per
immagazzinare e ritrovare oggetti nei rispettivi ambiti
(scope):
• void setAttribute(String name, Object o);
• Object getAttribute(String name);
• void removeAttribute(String name);
• Enumeration getAttributeNames();
Ridirezione del browser
• È possibile inviare al browser una risposta che lo forza ad
accedere ad un’altra pagina/risorsa (ridirezione)
• Possiamo ottenere agendo sull’oggetto response invocando il
metodo
• public void sendRedirect(String url);
• Scenario: When the Servlet show the client a JSP with the results,
and if you don't want the user to be able to refresh and re-submit
the form, then use a sendRedirect
• Es:
String name=request.getParameter("name");
response.sendRedirect("https://www.google.co.in/#q="+name)
;
Includere una risorsa (include)
• Per includere una risorsa si ricorre a un oggetto di tipo
RequestDispatcher che può essere richiesto al contesto indicando la
risorsa da includere
• Si invoca quindi il metodo include passando come parametri
request e response che vengono così condivisi con la risorsa inclusa
• Se necessario, l’URL originale può essere salvato come un
attributo di request
può essere anche una pagina JSP
Inoltro (forward)
• Si usa in situazioni in cui una Servlet si occupa di parte dell’elaborazione
della richiesta e delega a qualcun altro la gestione della risposta
• Attenzione:in questo caso la risposta è di competenza esclusiva della risorsa che
riceve l’inoltro
• Se nella prima Servlet è stato fatto un accesso a ServletOutputStream o
PrintWriter si ottiene una IllegalStateException
• Scenario (forward): When the current Servlet is done its job, and hasn't done anything with the
response, you Forward the request and response to another Servlet (or JSP) to finish any work
and to display results
• Example: A Servlet retrieves information from a database and stores it in the request object. It then
forwards the request to a JSP to display the data. User presses refresh, and the control goes to the
Servlet, which again retrieves the data from the database and puts it in the request, forwards to the JSP,
and the JSP sees the data
Include e forward