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

    chiamare Servlet da un'altra Servlet

    salve,
    ho una pagina1.jsp in cui c'è un form che invia dati ad una servlet1.
    questa servlet, dopo altre operazioni,
    chiama una servlet2, passandole dei dati.
    servlet2 aprirà una pagina2.jsp con quei dati.

    (per i test uso apache tomcat 7.0, browser firefox)

    da manuale Java EE 5 di Hoepli, tale chiamata da servlet1 viene fatta in questo modo:

    RequestDispatcher forward = request.getServletContext().getRequestDispatcher("/Servlet2");
    forward.forward(request, response);

    solo che nel browser mi dà un errore dicendomi che non è impostato il tipo di codifica. così, prima delle due istruzioni prima scritte, ho aggiunto un response.setContentType("text/html; charset=UTF-8"); solo che continua a non chiamare l'applet: infatti si apre una pagina vuota, e nell'url resta la servlet1.

    se invece chiamo servlet2 direttamente dall'url oppure da un link, la pagina2 viene visualizzata correttamente (al netto dei dati ovviamente)

    ps: per semplicità nel mio codice ho commentanto tutte le altre istruzioni, quindi non ci sono altri problemi.
    ps: in entrambe le servlet implemento i metodi doGet()

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Re: chiamare Servlet da un'altra Servlet

    Originariamente inviato da cheStress
    solo che nel browser mi dà un errore dicendomi che non è impostato il tipo di codifica.
    Puoi riportare esattamente il messaggio del browser? E, possibilmente, anche il log di Tomcat.

    così, prima delle due istruzioni prima scritte, ho aggiunto un response.setContentType("text/html; charset=UTF-8"); solo che continua a non chiamare l'applet
    Non confondere le Servlet con le Applet: sono due cose diametralmente diverse, che funzionano in ambienti diversi (le Servlet funzionano sul server, le Applet sono piccoli programmi che girano dentro il browser, quindi nel client).

    infatti si apre una pagina vuota, e nell'url resta la servlet1.
    La URL del browser non viene modificata da quella chiamata... lato client viene visualizzato solo l'URL della chiamata effettuata... ciò che accade nel server è completamente trasparente al client, che non deve sapere nulla di quanti salti tu faccia (quante servlet richiami o come si chiami la risorsa a cui rimandi).

    Dovresti, comunque, postare un po' del codice (praticamente tutto il doGet() ) della prima servlet per capire se commetti qualche errore lì. Tieni ben presente anche quanto riportato nella documentazione del metodo forward():

    forward should be called before the response has been committed to the client (before response body output has been flushed). If the response already has been committed, this method throws an IllegalStateException. Uncommitted output in the response buffer is automatically cleared before the forward.
    Nel caso tu non abbia rispettato questa cosa, dovresti avere il trace dell'eccezione nel log di Tomcat.


    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

  3. #3

    Re: chiamare Servlet da un'altra Servlet

    ciao, intanto grazie per avermi risposto.

    nel doGet() della servlet1 ho:

    RequestDispatcher forward = request.getServletContext().getRequestDispatcher("/Servlet2");
    forward.forward(request, response);

    nel doGet() della servlet2 ho:

    RequestDispatcher forward = request.getRequestDispatcher("pagina2.jsp");
    forward.forward(request, response);

    quindi, trascurando i vari attributi che passo, dovrebbe visualizzarsi pagina2.jsp, ma la pagina resta bianca.

    l'errore della codifica unicode è:

    Timestamp: 13/06/2013 10:38:46
    Error: The character encoding of the plain text document was not declared. The document will render with garbled text in some browser configurations if the document contains characters from outside the US-ASCII range. The character encoding of the file needs to be declared in the transfer protocol or file needs to use a byte order mark as an encoding signature.
    Source File: http://localhost:8080/.../Servlet1
    Line: 0

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Puoi postare il form HTML che richiama la servlet? Perchè credo che il problema possa dipendere da quello...

    E manca ancora il log di Tomcat...

    E magari anche la parte del web.xml che dichiara le servlet ed il mapping.

    Con solo queste informazioni non è chiaro il contesto in cui si sviluppa il problema.

    PS: usa i tag CODE per il codice, così mantiene formattazione ed indentazione


    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

  5. #5
    nel form la chiamata è impostata bene, perché le altre istruzioni (relazioni con un database) prima della chiamata all'altra servlet le esegue correttamente.

    il log del tomcat non so come si recupera

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da cheStress
    nel form la chiamata è impostata bene, perché le altre istruzioni (relazioni con un database) prima della chiamata all'altra servlet le esegue correttamente.
    Ok, ci dobbiamo fidare.
    Posta tutto il codice della servlet 1.

    il log del tomcat non so come si recupera
    Nella directory dove è installato Tomcat, c'è una directory "logs", che contiene diversi file.
    Ci sono in particolare due file: uno inizia con "stdout_" e l'altro con "stderr_" (la parte dopo l'underscore è la data di avvio di Tomcat scritta al contrario, quindi i log di oggi dovrebbero chiamarsi "stdout_20130613.log" e "stderr_20130613.log"). L'impostazione standard di Tomcat prevede che le eccezioni vengano dirottare nel file "stdout_", ma se hai una configurazione personalizzata potrebbe essere che vengano dirottate nel file "stderr_". In ogni caso, se uno dei due non è vuoto, postane il contenuto (anche di entrambi, se entrambi non sono vuoti).


    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

  7. #7
    ho risolto. dovevo metterle entrambe nei doPost()....... grazie comunque

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da cheStress
    ho risolto. dovevo metterle entrambe nei doPost()....... grazie comunque
    Quindi avevo ragione io... il problema era nel form, che effettua una richiesta con method = POST. Bastava che postassi il form, come avevo richiesto e ti avrei suggerito di modificare da method="POST" a method="GET", senza toccare nulla nelle servlet.


    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

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.