Se si desidera utilizzare la riscrittura di URL per mantenere lo stato di sessione, non includere i collegamenti a parti dell'applicazione Web nei file HTML semplici. Questa restrizione è necessaria perché la codifica di URL non può essere utilizzata in file HTML semplici. Per conservare lo stato mediante la riscrittura degli URL, ciascuna pagina richiesta dall'utente durante la sessione deve essere corredata da un codice facilmente comprensibile per l'interprete Java. Se si dispone di file HTML semplici nell'applicazione Web e parti del sito a cui l'utente può accedere durante la sessione, convertirli in file JSP. Ciò influirà sullo scrittore dell'applicazione perché, a differenza dell'aggiornamento delle sessioni mediante cookie, l'aggiornamento delle sessioni mediante riscrittura degli URL richiede che ciascuna maschera JSP nell'applicazione deve utilizzare la codifica URL per ciascun attributo HREF sulle tag <A>. La sessione sarà persa se una o più maschere JSP in un'applicazione non richiama i metodi di codifica encodeURL(String url) o RedirectURL(String url).
Con il metodo di riscrittura URL, tutti i collegamenti restituiti al browser o reindirizzati sono accodati ad un ID sessione. Ad esempio, questo collegamento in una pagina Web:
<a href="store/catalog">
viene riscritto come
<a href="store/catalog;$jsessionid$DA32242SSGE2">
Quando l'utente seleziona questo collegamento, il modulo riscritto dell'URL viene inviato al server come parte della richiesta del client. Servlet Engine riconosce ;$jsessionid$DA32242SSGE2 come ID sessione e lo salva per ottenere l'oggetto HttpSession adatto per questo utente.
L'esempio seguente mostra come inserire il codice Java in un file JSP:
<%
response.encodeURL ("/store/catalog");
%>
Per riscrivere gli URL che si sta restituendo al browser, richiamare il metodo encodeURL() nella maschera JSP prima di inviare l'URL al flusso di output. Ad esempio, se una maschera JSP che non utilizza la riscrittura dell'URL contiene:
out.println("<a href=\"/store/catalog\">catalog</a>")"
sostituirlo con:
out.println("<a href=\"");
out.println(response.encodeURL ("/store/catalog"));
out.println("\">catalog</a>");
Per riscrivere gli URL che si sta reindirizzando, richiamare il metodo encodeRedirctURL(). Ad esempio, se la maschera JSP contiene:
response.sendRedirect (response.encodeRedirectURL ("http://myhost/store/catalog"));
I metodi encodeURL() e encodeRedirectURL() fanno parte dell'oggetto HttpServletResponse. In entrambi i casi, queste chiamate verificano se la riscrittura dell'URL è configurata per codificare l'URL. Se questa non è configurata, restituisce l'URL originale.
Per scrivere moduli da inviare, richiamare il metodo response.encodeURL("Logon"); sul tag ACTION della maschera del modulo. Ad esempio,
String strLoginPost = response.encodeURL("Logon");
<FORM NAME="Logon" METHOD="post" ACTION= <%= strLoginPost %> >
...
</FORM>
La pagina della voce, di norma la home page, non può contenere frame. Se si desidera utilizzare riquadri nel negozio, è necessario avere una pagina senza riquadro con un collegamento al negozio che agisce come pagina di accesso del negozio. Tuttavia, se il negozio utilizza riquadri ed un cliente tenta di accedere a tali pagine senza passare prima attraverso la pagina di accesso, potrebbe perdere le sessioni. I clienti possono anche perdere le sessioni se utilizzano il pulsante Indietro (soltanto con i riquadri) per ritornare alla pagina di accesso ed aggiornarla. L'aggiornamento della pagina di accesso fornisce un nuovo ID sessione. Se necessario, un collegamento riporta alla pagina di accesso come alternativa al pulsante Indietro per evitare di perdere questo tipo di sessione.
![]() |