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

    [JSP] Cosa si intende per scope di tipo "request"?

    Salve ragazzi,

    parlando dello scope riferito alle pagine JSP, ho letto che ne esistono 4, ma a me non è chiaro quello "request".

    Riepilogando:

    L'attributo scope può avere i seguenti valori:

    • request : l'attributo sarà valido per tutta la durata della request. Quando la request sarà stata processata da tutte le pagine JSP, l'oggetto sarà deverenziato [???]
    • page : l'attributo sarà disponibile solo per la pagina corrente
    • session : l'attributo sarà disponibile per tutta la durata della sessione dell'utente, in pratica finché il client non chiude il browser.
    • application : l'attributo è disponibile per tutta la durata dell'applicazione, in pratica finché il server non chiude Tomcat.


    page, session e application li ho spiegati a parole mie e penso di averli capiti, mentre request ho copiato pari pari la definizione da Wikipedia ma non capisco. Qualcuno può spiegarmi in pratica cosa succede, magari anche con un esempio...perché ho letto anche da altre parti ma son tutte definizioni "accademiche" e alla fine sento che mi sfugge il concetto

    Grazie,
    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] Cosa si intende per scope di tipo "request"?

    Originariamente inviato da matthew80
    parlando dello scope riferito alle pagine JSP, ho letto che ne esistono 4, ma a me non è chiaro quello "request".
    Il client fa una "request" al server. A livello di Servlet/JSP hai un oggetto ServletRequest (HttpServletRequest). Mettere un oggetto nello scope "request" vuol dire fare un setAttribute() sull'oggetto ServletRequest.

    Questo "scope" esiste e "vive" finché non è terminata la response. A seguito di una request dal client, potrebbe venire chiamata una Servlet, che magari fa un forward ad un'altra Servlet che magari a sua volta fa un forward ad una pagina JSP. In tutti questi passaggi la "request" è sempre la stessa.

    P.S. c'è un libro gratuito in PDF su Servlet/JSP di Marty Hall disponibile qui. È molto chiaro su queste cose ... più di quanto possa esserlo io.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    In altre parole:

    Se ho un form in una pagina HTML (che equivale al client) tipo

    Codice PHP:
    ...
    <
    form name="Login" action="index.jsp">
         
    Nome: <input name="name" type="text" />

                     <
    input id="submit" type="submit" value="Enter" />
    </
    form>
    ... 
    e ci scrivo Pippo, quel Pippo equivale alla mia richiesta (request) e la JSP può riceverla per mezzo dell'oggetto implicito request di tipo ServletRequest, cioè:

    Codice PHP:
    ...
    Welcome <%=request.getParameter("name")%>
    ... 
    La JSP index.jsp può poi "sballottare" questa richiesta ad uno o più JSP e/o Servlet usando appunto lo scope "request" e questa request rimane viva (e quindi visibile) finché non smette di essere sballottare da una parte all'altra. Insomma quando questa richiesta non serve più, perché si spera sia subentrata una risposta a questa richiesta, allora la richiesta "muore" e quindi non è più visibile.

    Ho capito bene?

    PS: Cmq sicuramente mi manca qualcosa e ho mal capito anche perché non ho compreso se questa richiesta viene inviata attraverso il requestDispatcher o attraverso azioni riferite ai JavaBean..visto che questo concetto di scope il mio libro lo ha introdotto con le azioni. Forse solo dopo aver smanettato col codice queste cose mi saranno meno astratto...perché a pelle sento che come argomento non è così complicato
    :berto:
    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
    Codice PHP:
    ...
    Welcome <%=request.getParameter("name")%>
    ... 
    È fuori dubbio che getParameter di ServletRequest ti permette di ottenere i parametri passati al server tramite una richiesta GET/POST. Ma non centra con lo "scope".

    Quando si parla di scope "page", "request", "session" o "application", si parla della possibilità di poter memorizzare degli oggetti (in genere sono oggetti relativi a dei "Bean" ma può essere qualunque altro tipo di oggetto) in uno degli oggetti di tipo PageContext, HttpServletRequest, HttpSession ecc... usando il metodo setAttribute() (e getAttribute() per leggerli).

    Es. voglio memorizzare un valore long nello scope "request", in modo che tutte le eventuali servlet/JSP coinvolte nella request (es. tramite forward) possano usarlo.

    request.setAttribute ("un_long", new Long (123));

    (ho messo il nome "un_long" ma la documentazione dice che bisognerebbe seguire le stesse convenzioni per i nomi di package).

    Questo "scope" è poi nient'altro che una hash-table che mappa stringhe->oggetti e di queste tabelle ce ne sono 4 appunto nei 4 oggetti PageContext ecc...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.