English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Testare/Debuggere Servlet è sempre una delle sfide nel processo di sviluppo. I Servlet spesso coinvolgono una grande interazione client/server, possono verificarsi errori ma essere difficili da riprodurre.
Ecco alcune suggerimenti e consigli che possono aiutarti a debuggare.
System.out.println() viene utilizzato come etichetta per verificare se un determinato blocco di codice viene eseguito. Possiamo anche stampare i valori delle variabili. Inoltre:
Poiché l'oggetto System fa parte del nucleo degli oggetti Java, può essere utilizzato ovunque senza la necessità di installare classi aggiuntive. Questo include Servlet, JSP, RMI, EJB's, Beans normali e classi, nonché applicazioni indipendenti.
Diversamente dal fermarsi a un breakpoint, l'invio a System.out non interferisce con il flusso di esecuzione normale dell'applicazione, il che lo rende particolarmente prezioso quando l'ordine è fondamentale.
Ecco la sintassi di System.out.println():
System.out.println("Messaggio di debug");
Tutti i messaggi generati dalla sintassi sopra elencata verranno registrati nel file di log del server web.
Usare il metodo di registrazione dei log appropriato per registrare tutti i messaggi di debug, avviso e errore, è un'idea molto buona e raccomandata log4J per registrare tutti i messaggi.
L'API Servlet fornisce anche un modo semplice per visualizzare messaggi di output, utilizzando il metodo log(), come segue:
// Importare le librerie java necessarie import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ContextLog extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { String par = request.getParameter("par1"); // Chiamare due metodi ServletContext.log ServletContext context = getServletContext( ); if (par == null || par.equals("")) // Traccia la versione attraverso il parametro Throwable context.log("Nessun messaggio ricevuto:", new IllegalStateException("Parametro mancante")); else context.log("Ecco il messaggio del visitatore: " + par); response.setContentType("text/html;charset=UTF-8"); java.io.PrintWriter out = response.getWriter( ); String title = "Context Log"; String docType = "<!DOCTYPE html> \n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<h2 align=\"center\">Messaggi inviati</h2>\n" + "</body></html>);" } //doGet }
ServletContext registra i suoi messaggi di testo nei file di log del container Servlet. Per Tomcat, questi log si possono trovare nella directory <Tomcat-installation-directory>/logs.
Questi file di log indicano effettivamente la frequenza di errori o problemi emergenti. Per questo motivo, si consiglia di utilizzare la funzione log() nelle clausole catch di eccezioni che non si verificano di solito.
Puoi debuggare un Servlet utilizzando il comando jdb per debuggare gli applet o le applicazioni.
Per debuggare un Servlet, possiamo debuggare sun.servlet.http.HttpServer e considerarlo come HttpServer che esegue il Servlet per rispondere alle richieste HTTP del lato client. Questo è molto simile al debug degli applet小程序. A differenza del debug degli applet, il programma effettivamente debuggato è sun.applet.AppletViewer.
La maggior parte dei debugger nasconde automaticamente i dettagli su come debuggare gli applet. Allo stesso modo, per i servlet, devi aiutare il debugger a eseguire le seguenti operazioni:
Imposta la classpath del tuo debugger in modo che possa trovare sun.servlet.http.Http-Server e le classi correlate.
Imposta la classpath del tuo debugger in modo che possa trovare i tuoi servlet e le classi di supporto, di solito nei directory server_root/servlets e server_root/classes.
Di solito non vorresti che server_root/servlets sia nella tua classpath, perché disabilita il riavvio dei servlet. Tuttavia, questa regola di inclusione è molto utile per il debug. Permette al tuo debugger di impostare un breakpoint nel Servlet prima che il caricatore Servlet personalizzato di HttpServer carichi il Servlet.
Se hai configurato correttamente la classpath, puoi iniziare a debuggare sun.servlet.http.HttpServer. Puoi impostare un breakpoint nel codice Servlet che desideri debuggare e poi inviare una richiesta a HttpServer utilizzando il Servlet fornito (http://localhost:8080/servlet/ServletToDebug) tramite il browser web. Vedrai che il programma si fermerà alla posizione del breakpoint.
I commenti nel codice aiutano a debuggare in vari modi. I commenti possono essere utilizzati in molti altri modi nel processo di debug.
Questo Servlet utilizza commenti Java e commenti su una singola riga (//...), i commenti multipli (/* ...*/) possono essere utilizzati per rimuovere temporaneamente parte del codice Java. Se il bug scompare, guardati bene il codice che hai commentato e trova il problema.
A volte, quando un Servlet non funziona come previsto, è molto utile guardare la richiesta HTTP originale e la risposta. Se sei familiare con la struttura HTTP, puoi leggere la richiesta e la risposta per vedere esattamente quali sono queste informazioni di intestazione.
Di seguito elenchiamo alcune tecniche di debug di Servlet:
Nota che server_root/classes non viene ricaricato, mentre server_root/servlets potrebbe esserlo.
Richiedi al browser di mostrare il contenuto originale della pagina che sta visualizzando. Questo aiuta a identificare problemi di formattazione. È solitamente un'opzione nel menu "Visualizza".
Esegui un completo riavvio della pagina per assicurarti che il browser non abbia ancora memorizzato l'output della richiesta precedente. Nel Netscape Navigator, usa Shift-Reload,而在 Internet Explorer 中,请使用 Shift-Refresh。
Confermi che il metodo init() di servlet accetta un parametro ServletConfig e chiama super.init(config)?