Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    324

    J2EE - gestione del redirect verso una pagina jsp

    Ciao a tutti,

    ho un po di domande particolari da porre. Le domande in questione trattano precisamente la redirect da parte di una servlet verso una jsp....

    La prima domanda è:

    Perchè quando faccio:

    codice:
    response.sendRedirect("../index.jsp")
    per farsi che il redirect vada a buon fine devo inserire il path "../index.jsp" invece con

    codice:
    getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
    inserisco il path solo con "/index.jsp"?

    Seconda domanda è:

    quando faccio request.setAttribute("nomeOggetto", oggetto);

    devo usare

    codice:
    getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
    al posto di
    codice:
    response.sendRedirect("../index.jsp")
    ?

    Grazie anticipatamente

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

    Re: J2EE - gestione del redirect verso una pagina jsp

    Originariamente inviato da manublack
    Perchè quando faccio:

    codice:
    response.sendRedirect("../index.jsp")
    per farsi che il redirect vada a buon fine devo inserire il path "../index.jsp" invece con

    codice:
    getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
    inserisco il path solo con "/index.jsp"?
    Innanzitutto un "redirect" lo fa il client, in pratica è il browser (o altra app che sta accedendo al server) che fa una una nuova request con l'URL fornito dalla response.

    sendRedirect accetta un URL "relativo". Vedi documentazione: sendRedirect

    Un "forward" è interno al server, il client non "sa" nulla, non fa una nuova request (e nel browser non può cambiare l'URL nella barra).

    Originariamente inviato da manublack
    Seconda domanda è:

    quando faccio request.setAttribute("nomeOggetto", oggetto);

    devo usare

    codice:
    getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
    al posto di
    codice:
    response.sendRedirect("../index.jsp")
    ?
    Se imposti un attributo nel request-scope si presuppone che lo fai perché serve successivamente o nella stessa servlet (caso strano ma possibile) o in una JSP. Ma se vuoi che serva, alla JSP ci devi arrivare tramite forward.
    Perché ripeto: il redirect fa eseguire al client una nuova request.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    324

    Re: Re: J2EE - gestione del redirect verso una pagina jsp

    Originariamente inviato da andbin
    Innanzitutto un "redirect" lo fa il client, in pratica è il browser (o altra app che sta accedendo al server) che fa una una nuova request con l'URL fornito dalla response.

    sendRedirect accetta un URL "relativo". Vedi documentazione: sendRedirect

    Un "forward" è interno al server, il client non "sa" nulla, non fa una nuova request (e nel browser non può cambiare l'URL nella barra).

    Se imposti un attributo nel request-scope si presuppone che lo fai perché serve successivamente o nella stessa servlet (caso strano ma possibile) o in una JSP. Ma se vuoi che serva, alla JSP ci devi arrivare tramite forward.
    Perché ripeto: il redirect fa eseguire al client una nuova request.
    Scusami andbin ma non ho capito la prima parte del post, invece relativa la seconda parte se ho capito bene, è necessario usare il forward altrimenti non vedo nella jsp di destinazione giusto?

    Grazie anticipatamente

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

    Re: Re: Re: J2EE - gestione del redirect verso una pagina jsp

    Originariamente inviato da manublack
    Scusami andbin ma non ho capito la prima parte del post, invece relativa la seconda parte se ho capito bene, è necessario usare il forward altrimenti non vedo nella jsp di destinazione giusto?
    Quando fai un redirect (sendRedirect) nella response c'è semplicemente un header particolare (chiamato "Location") e uno status code particolare che dice al client: "senti client, connettiti a quest'altro URL".
    Se, prima del redirect, avevi inserito qualunque attributo nel request-scope, cioè nel (Http)ServletRequest, sparisce, nel senso che questa request/response è terminata e il client farà una nuova request e quindi sul server verrà creata una nuova coppia (Http)ServletRequest/(Http)ServletResponse per servire la nuova richiesta.

    Con il forward è diverso, è interno al server. È semplicemente un "passare la palla" (quella stessa request/response) ad un'altra risorsa che potrebbe essere un'altra servlet o una JSP.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319
    Cerco di spiegarlo in modo "grafico".

    Questo è ciò che accade con un forward:
    codice:
    Client                Server                pagina JSP
      +------ request ------>
                            |
                            + ------ forward ------>
                                                   |
      <--------------- response -------------------+
    Il client non sa nulla di quello che fa il server... il server, invece, gestisce una ed una sola request, una ed una sola response.

    Questo, invece, è ciò che accade con una redirect:
    codice:
    Client                Server                pagina JSP
      +------ request ------>
                            |
      <----- response ------+
      |
      +----------------- nuova request ------------>
                                                   |
      <------------ nuova response ----------------+
    Il server gestisce la prima request e risponde subito al client. Il client, quindi, fa una seconda request ed il server (che gestisce la pagine JSP) risponde con una seconda response.

    Tra la prima richiesta e la seconda, i valori memorizzati nella prima request (o response) sono ovviamente persi dopo la prima response.

    Spero di aver semplificato a sufficienza.

    Ciao.
    "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

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da LeleFT
    Spero di aver semplificato a sufficienza.
    Ottimo LeleFT! Se la mia spiegazione poteva risultare ancora non chiara .... i tuoi grafici non possono essere equivocati.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    324

    Questo, invece, è ciò che accade con una redirect:
    codice:
    Client                Server                pagina JSP
      +------ request ------>
                            |
      <----- response ------+
      |
      +----------------- nuova request ------------>
                                                   |
      <------------ nuova response ----------------+
    Il server gestisce la prima request e risponde subito al client. Il client, quindi, fa una seconda request ed il server (che gestisce la pagine JSP) risponde con una seconda response.

    Tra la prima richiesta e la seconda, i valori memorizzati nella prima request (o response) sono ovviamente persi dopo la prima response.
    Ciao LeleFT grazie per il grafico, solo che ho ancora una domandina sulla seconda parte di spiegazione, nel senso che alla fine nella prima response il risultato visualizzato dal cliente sarà sempre una jsp no? se si allora non capisco il motivo del secondo flusso di request e response....

    Scusate la mia ottussagine nel comprendere l'argomento ma vorrei avere le idee chiare... tutto li....

    Comunque grazie sia a andbin e LeleFT per l'aiuto che mi state dando....

    Grazie anticipatamente

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da manublack
    nel senso che alla fine nella prima response il risultato visualizzato dal cliente sarà sempre una jsp no?
    No, dipende. Indipendentemente dal fatto che ci sia dopo un forward/include, quando il client fa una request, questa può essere servita in prima battuta tanto da una servlet che da una JSP, dipende dall'URL che è stato richiesto e da come sono "mappate" le cose nella applicazione.
    La servlet o JSP che inizialmente serve la richiesta può fare un redirect (quindi finisce lì, il client farà poi un'altra request) oppure un forward/include e la "palla" passa ad un'altra risorsa interna.
    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.