Salve come posso usufruire di una sessione passata da una pagina jsp per poi sfrurttarla in una query?
Salve come posso usufruire di una sessione passata da una pagina jsp per poi sfrurttarla in una query?
Le sessioni non si passano: una sessione può essere creata in un qualunque punto dell'applicazione e sarà automaticamente visibile in ogni parte dell'applicazione (servlet, listeners, pagine jsp). E' il Servlet Container che gestisce e mantiene le sessioni.
Generalmente, comunque, le sessioni vengono create all'interno di una Servlet (difficilmente si creano dentro le pagine JSP).
Le pagine JSP, eventualmente, sfruttano la sessione per reperire oggetti in essa contenuti per la visualizzazione finale all'utente.
Se stai pensando di eseguire una query (ad un DB, immagino) da una pagina JSP, sebbene tecnicamente sia fattibile, il mio suggerimento è quello di cambiare approccio. Le JSP dovrebbero essere usate solo per visualizzare i dati elaborati dalle Servlet. Query su DB, elaborazioni, calcoli e tutta questa roba di background dovrebbe essere eseguita sulle Servlet.
Ciao.![]()
Ultima modifica di LeleFT; 03-04-2015 a 17:06
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
lele vorrei chiederti una cosa in merito alla session. Ho creato una servlet ed ho aperto la session. se sbaglio mi inserisce tramite l'include un messaggio di errore, se inserisco dati corretti mi porta ad un'altra pagina sempre su servlet dicendomi benvenuto.... il mio problema è che non riesco a capire come devo fare per mentenere la sessione aperta se vado su un'altra pagina... devo utilizzare qualcosa nella nuova pagina? grazie.
La sessione, con tutti gli eventuali dati chiave->valore contenuti, sta sempre e solo sul server. Quello che client e server al massimo si scambiano è solo il ID della sessione. Questo può essere fatto in due modi: tramite cookie o tramite l'url. I cookie però sono disabilitabili su tutti i vari browser, quindi l'alternativa sicura è solo quella del url.
Se consideriamo solo lo sfruttamento dei cookie, non hai nulla di particolare da fare. Nella Servlet A farai:
HttpSession session = request.getSession();
ed otterrai un (nuovo, eventualmente) HttpSession. Se nella pagina A che l'utente visualizza a seguito della richiesta alla Servlet A, c'è un link che porta ad una pagina B, allora nella request ad una Servlet B, idem farai:
HttpSession session = request.getSession();
ed otterrai lo stesso HttpSession ottenuto dalla precedente richiesta. Nota che (e lo dice bene la documentazione), getSession() deve essere invocato prima che la response sia "committed", altrimenti ottieni IllegalStateException.
E se i cookie fossero disabilitati? Se vuoi che il tuo sito funzioni anche in questo caso, allora devi prendere degli accorgimenti, ovvero devi fare il encoding di tutti gli url che vengono emessi in output sulle pagine.
Se scrivi sulla response dalla Servlet, dovrai fare es.:
codice:PrintWriter out = response.getWriter(); out.print("<a href=\""); out.print(response.encodeURL("blabla/paginaB")); out.print("\">pagina B</a>");
Nelle JSP si può usare più comodamente il tag <c:url> di JSTL:
codice:<a href="<c:url value="blabla/paginaB"/>">pagina B</a>
Questo encoding accoda dietro il url il ID di sessione in una forma particolare che il servlet container/application server è poi in grado di riconoscere ad una successiva request con quel link.
Ultima modifica di andbin; 05-04-2015 a 11:05
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ciao Andrea grazie per la spiegazione. I taglib li devo capire bene... Li sto facendo in questo gg. Comunque ho risolto ieri sera . Funziona.... Ma va bene utilizzando il getattribute con i parametri? E corretta la procedura?
Il getAttribute serve per prendere il valore da uno dei vari scope:
request scope: getAttribute di (Http)ServletRequest
session scope: getAttribute di HttpSession
application scope: getAttribute di ServletContext
page scope (solo in JSP o nei custom tag): getAttribute di JspContext
I parametri sono quelli tipicamente nel url blabla.html?param1=xxx¶m2=yyy e non c'entrano nulla con gli attributi negli scope.![]()
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ok quindi ho sbagliato...