Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,202

    [JAVA SERVLET] Problema con RequestDispatcher

    Ciao, ho necessità di usare un RequestDispatcher per fare una forward.
    Ho le pagine JSP dentro alla cartella webapp/, sorella di WEB-INF, e ho qualche problemino...

    Ho usato questo codice:

    Codice PHP:
            RequestDispatcher rd getServletContext().getRequestDispatcher("/webapp/cp.jsp");
            
    rd.forward(requestresponse); 
    E il forward mi funziona, ma è come se rimanesse in un limbo tra la root e la webapp in pratica cp.jsp viene caricata come se fosse nella root, non trovando il file CSS e sballando tutti i link.
    Perchè accade ciò?
    Ho provato a impostare a mano un Context diverso:

    Codice PHP:
    ServletContext rdContext getServletContext().getContext("/webapp");        
            
    RequestDispatcher rd rdContext.getRequestDispatcher("/cp.jsp");
            
    rd.forward(requestresponse); 
    Ma pur facendo così mi va a cercare cp.jsp nella root e ovviamente non lo trova, mentre se specifico come sopra webapp si comporta esattamente come sopra.

    Se metto le jsp nella root e creo il dispatcher tutto funziona, ma io ho necessità che funzioni anche con le jsp in webapp/.

    Aiut
    Debian GNU/Linux sid
    Publishing a theory should not be the end of one's conversation with the universe, but the beginning. (Eric S. Raymond)
    Kernel 2.6.14-ck1

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,202
    Provando in locale la prima versione mi funziona... credo che il problema allora sia nel server, è un server un po' anomalo in cui uso Apache-SSL assieme all'application server Resin.
    /var/www è la document root, dove c'è web-inf/ con le servlet e webapp/ con le jsp.

    Se qualcuno ha qualche idea del perchè non vada, si faccia sentire :rollo:

    edit: come non detto... ora lo fa anche in locale

    Ho provato a usare anche qualche classe di javax.servlet.jsp (permette di inserire url relativi) ma il risultato è lo stesso

    Codice PHP:
    JspFactory  factory JspFactory.getDefaultFactory();
            
    PageContext pc factory.getPageContext(thisrequestresponsenullfalseJspWriter.DEFAULT_BUFFERtrue);
            
    pc.forward("./webapp/cp.jsp"); 
    Debian GNU/Linux sid
    Publishing a theory should not be the end of one's conversation with the universe, but the beginning. (Eric S. Raymond)
    Kernel 2.6.14-ck1

  3. #3
    hai provato a lasciare il nome del file senza /webapp, del tipo /nomeFile.jsp -

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,202
    Sì, ovviamente non trova il file
    Debian GNU/Linux sid
    Publishing a theory should not be the end of one's conversation with the universe, but the beginning. (Eric S. Raymond)
    Kernel 2.6.14-ck1

  5. #5
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    credo perchè un dispatch non cambia l'url della richiesta
    ad esempio se la richiesta è www.sito.com/pag.jsp e fai un dispatch su /dir/pag2.jsp, al browser arriva il contenuto di pag2.jsp, ma l'url rimane pag.jsp
    quindi i riferimenti relativi nella pagina sono risolti a partire da pag.jsp
    sono stato troppo chiaro vero?
    dunque o cambi i riferimenti relativi in pag2.jsp, o esegui una redirect lato server

  6. #6
    nelle mie webapp ho sempre utilizzato il seguente tag prima di qualsiasi link (specialmente quelli mappati)
    Codice PHP:
    <%= request.getContextPath() %> 
    Così automaticamente viene generato l'url assoluto in base al context (che cambia dal locale al remoto).
    Unico neo, sono le pagine sotto ssl, ma questo è un altro discorso.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,202
    @Floyd: sì infatti l'url sul browser rimane quello della servlet; ma usando <jsp:forward/> il forward funziona correttamente, perciò mi aspettavo che almeno usando i metodi di javax.servlet.jsp avrebbe funzionato... però se mi dici che non c'è modo di ottenere lo stesso risultato con una servlet (non posso cambiare i riferimenti nelle jsp e non posso spostare indietro i file), mi tocca usare una redirect, che non è il massimo visto che devo usare HTTPS e quindi devo recuperare il dominio della macchina per passare a sendRedirect l'url assoluto.

    @Sandrocchio: potresti farmi un esempio pratico per favore?
    Debian GNU/Linux sid
    Publishing a theory should not be the end of one's conversation with the universe, but the beginning. (Eric S. Raymond)
    Kernel 2.6.14-ck1

  8. #8
    Codice PHP:
    <link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/css/menu.css" media="screen" />
    [
    url="<%= request.getContextPath() %>/catalog?task=getBrands"]By brand[/url
    Se però ti trovi in una pagina sotto ssl, per tornare alla home senza trascinarti dietro l'https devi mettere un url assoluto.

  9. #9
    Originariamente inviato da Kamui
    @Floyd: sì infatti l'url sul browser rimane quello della servlet; ma usando <jsp:forward/> il forward funziona correttamente, perciò mi aspettavo che almeno usando i metodi di javax.servlet.jsp avrebbe funzionato... però se mi dici che non c'è modo di ottenere lo stesso risultato con una servlet (non posso cambiare i riferimenti nelle jsp e non posso spostare indietro i file), mi tocca usare una redirect, che non è il massimo visto che devo usare HTTPS e quindi devo recuperare il dominio della macchina per passare a sendRedirect l'url assoluto.

    @Sandrocchio: potresti farmi un esempio pratico per favore?
    Scusa e quindi come hai fatto ad ottenere il forward con il requestdispatcher in modo che l'indirizzo della barra indirizzi del browser fosse quello di destinazione e non quello della servlet?
    Forza e onore

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.