Visualizzazione dei risultati da 1 a 7 su 7

Discussione: sessioni in jsp

  1. #1

    sessioni in jsp

    Salve come posso usufruire di una sessione passata da una pagina jsp per poi sfrurttarla in una query?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    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

  3. #3
    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.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da francesco51 Visualizza il messaggio
    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    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?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da francesco51 Visualizza il messaggio
    Ma va bene utilizzando il getattribute con i parametri?
    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&param2=yyy e non c'entrano nulla con gli attributi negli scope.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Ok quindi ho sbagliato... ��

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.