Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JSP] Dubbio sullo scope "request"

    Salve,

    ho qualche dubbio sullo scope nelle JSP, in particolare per quel che riguarda la request.
    Ecco cosa ho capito:

    Facciamo l'esempio di un JavaBean. Abbiamo 4 tipi di visibilità:

    1. PAGE : quello più limitato. Il bean è visibile solo all'interno della stessa pagina, cioè posso fare riferimento all'id del JavaBean solo all'interno della stessa JSP
    2. REQUEST : (quello su cui ho dei dubbi) Il JavaBean è visibile finchè è attiva la request, ovvero finchè la richiesta, dopo essere stata gestita, non viene inoltrata con la respose. Quindi non appena metto un istruzione di response non posso più fare riferimento al JavaBean. L'invio della response al client può anche avvenire in un' altra Servlet/JSP
    3. SESSION: Il JavaBean è visibile per tutta la durata della sessione, cioè finchè non chiudo il browser
    4. APPLICATION: Il JavaBean è visibile finchè è attiva l'applicazione, cioè finchè non la stoppo su Tomcat o chiudo lo stesso Tomcat o va in crash, ecc.

    E' giusto? In particolar modo ho capito bene la REQUEST? Non voglio una definizione da manuale (perchè già le ho lette). Vorrei capire, in pratica, quand'è che non posso più far riferimento all'ID di un JavaBean con visibilità "request". Da quello che ho capito finchè non mando la "response" al client.

    Grazie dell'attenzione,
    Matteo.
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JSP] Dubbio sullo scope "request"

    Originariamente inviato da matthew80
    Da quello che ho capito finchè non mando la "response" al client.
    La "request" (HttpServletRequest) termina di esistere quando la pagina JSP termina o la servlet termina il suo lavoro.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Sarò ciuco ma mi manca qualcosa:
    In una semplice JSP come questa:
    Codice PHP:
    <html>
    <
    head>
        <
    title>UseBean.jsp</title>
    </
    head>
    <
    body>
        <
    jsp:useBean id="myBean" scope="request" class="myPackage.MyBean">
            <
    jsp:setProperty name="myBean" property="name"/>
        </
    jsp:useBean>
        
        

    <
    jsp:getProperty name="myBean" property="name"/>

    </
    body>
    </
    html
    myBean "muore" non appena viene generata la pagina di output? E se, come dici tu, la request termina quando termina la pagina JSP non vedo la differenza con lo scope "page", che è appunto visibile solo all'interno della stessa pagina. Ma la differenza ci sta sicuramente...
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da matthew80
    myBean "muore" non appena viene generata la pagina di output?
    Per una semplice pagina JSP così, sì. Ma in generale quando l'application server termina di gestire la richiesta.

    Originariamente inviato da matthew80
    E se, come dici tu, la request termina quando termina la pagina JSP non vedo la differenza con lo scope "page", che è appunto visibile solo all'interno della stessa pagina. Ma la differenza ci sta sicuramente...
    A seguito della richiesta dal client, viene invocata una servlet, la quale poi fa un forward ad un'altra servlet, la quale infine fa un forward ad una pagina JSP. La "request" (HttpServletRequest) è la stessa identica e "vive" in tutto questo passaggio.
    Per "page", no!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Quindi, in altre parole, l'iter potrebbe essere questo:

    Il client (form HTML) fa una richiesta al server (servlet). La servlet gestisce questa richiesta, poi decidere di "passarla" ad una JSP per gestirla ulteriormente, e lo stesso fa quest'ultima JSP che la passa ad un altra JSP. Solo quando finalmente la richiesta è stata completamente gestita, cioè quando per esempio ho calcolato la media tra due numeri immessi nel form, la request "muore".
    Detto così ho capito anche se devo ammettere che mi sembra ancora un pò teorica come cosa. Ti spiego, per vedere la visibilità di una variabile in un metodo basta che controllo le parentesi graffe. Qui non ho capito di preciso che devo controllare

    PS: Quand'è che per lo più si usa lo scope "request" nelle Web Application?
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da matthew80
    La servlet gestisce questa richiesta, poi decidere di "passarla" ad una JSP per gestirla ulteriormente
    Questo modo di servire la richiesta, cioè Servlet--->Jsp lo si usa generalmente per mettere in atto il pattern MVC. La servlet fa da "controller", riceve la richiesta, controlla i dati in input, invoca altre entità per accedere ad esempio ad un DB e poi imposta dei dati tipicamente nella "session" o nella "request" ma non genera alcun output!! La JSP fa la parte della "view" e si occupa solamente di prendere i dati dalla request/session e generare il codice HTML (o altro tipo).

    Originariamente inviato da matthew80
    Ti spiego, per vedere la visibilità di una variabile in un metodo basta che controllo le parentesi graffe. Qui non ho capito di preciso che devo controllare
    Non centrano, per questi "scope", le parentesi graffe!! (a parte per "page" che è poi il 'this' nella pagina JSP) Gli oggetti messi in questi scope (request/session/context) sono memorizzati in apposite "mappe".

    codice:
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    
        request.setAttribute("nomeBean", tuoOggettoBean);
    
    }
    Quindi non si tratta di una questione "strutturale" del codice ma di quanto "vive" l'oggetto che contiene i dati di quello scope. Quando fai un forward, passi i reference di request e response ... e quelli continuano a vivere! Quindi anche l'oggetto referenziato da tuoOggettoBean.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Ok andbin sei stato chiaro e ti ringrazio. ...e con la teoria siamo apposto!
    All'inizio, però, per orientarmi volevo degli esempi tipo su quanto usare i vari scope.

    Per esempio lo scope "session" lo uso per quelle informazioni, come nome utente e password, che voglio tenere memorizzate finchè l'utente non chiude il browser. Oppure, nn so, i dati del carello della spesa.
    Lo scope "application" lo uso per quei dati che voglio siano sempre "vivi", durante tutta la vita del sito, ad esempio...non so!
    Lo scope "page" per dati proprio temporanei, come variabili locali.
    Qual'è invece un tipico esempio di uso dello scope? anche se ho capito a che serve e come funziona non mi viene in mente :berto:
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

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.