English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Pruebas/Depurar Servlet siempre ha sido un desafío en el proceso de desarrollo de uso./La interacción del servidor puede generar errores que son difíciles de reproducir.
Aquí hay algunos consejos y sugerencias que pueden ayudarte a depurar.
System.out.println() se utiliza como un marcador para verificar si se ejecuta un código específico. También podemos imprimir el valor de las variables. Además:
Dado que el objeto System es parte integral de los objetos Java, se puede usar en cualquier lugar sin necesidad de instalar clases adicionales. Esto incluye Servlet, JSP, RMI, EJB's, Beans comunes y clases, así como aplicaciones independientes.
A diferencia de detenerse en un punto de ruptura, escribir en System.out no interfiere con el flujo de ejecución normal de la aplicación, lo que lo hace especialmente valioso cuando la secuencia es crucial.
A continuación, se muestra la sintaxis de System.out.println():
System.out.println("Mensaje de depuración");
Todos los mensajes generados por la sintaxis anterior se registrarán en el archivo de registro del servidor web.
Es una buena idea usar métodos de registro adecuados para registrar todos los mensajes de depuración, advertencia y error, lo que se recomienda encarecidamente log4J 来记录所有的消息。
Servlet API 还提供了一个简单的输出信息的方式,使用 log() 方法,如下所示:
// 导入必需的 java 库 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"); // 调用两个 ServletContext.log 方法 ServletContext context = getServletContext( ); if (par == null || par.equals("")) // 通过 Throwable 参数记录版本 context.log("No message received:", new IllegalStateException("Missing parameter")); else context.log("Here is the visitor's message: " + 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">Messages sent</h2>\n" + "</body></html> } //doGet }
ServletContext registra sus mensajes de texto en el archivo de registro del contenedor de Servlet. Para Tomcat, estos registros se pueden encontrar en <Tomcat-instalación-directorio>/se pueden encontrar en el directorio logs.
Estos archivos de registro realmente indican la frecuencia de errores o problemas recientes. Por lo tanto, se recomienda usar la función log() en la cláusula catch de excepciones que no suelen ocurrir.
Puede usar el comando jdb para depurar Servlets, similar al depurar applets o aplicaciones.
Para depurar un Servlet, podemos depurar sun.servlet.http.HttpServer y luego considerarlo como HttpServer ejecutando Servlet para responder a solicitudes HTTP del lado del navegador. Esto es muy similar a depurar applets. A diferencia de depurar applets, el programa que se está depurando es sun.applet.AppletViewer.
La mayoría de los depuradores ocultan automáticamente los detalles de cómo depurar applets. Del mismo modo, para servlets, debe ayudar al depurador a realizar las siguientes operaciones:
Configure la variable de clase classpath de su depurador para que pueda encontrar sun.servlet.http.Http-Server y las clases relacionadas.
Configure la variable de clase classpath de su depurador para que pueda encontrar sus servlets y clases de soporte, generalmente en server_root/servlets y server_root/classes.
Usted generalmente no querrá que server_root/servlets en su classpath, ya que esto deshabilita la recarga de servlets. Sin embargo, esta regla de inclusión es muy útil para la depuración. Permite que su depurador configure puntos de ruptura en el Servlet antes de que el cargador de Servlet personalizado de HttpServer lo cargue.
Si ya ha configurado correctamente la variable de clase classpath, puede comenzar a depurar sun.servlet.http.HttpServer. Puede configurar puntos de ruptura en el código del Servlet que desea depurar y luego usar el navegador web para acceder al Servlet proporcionado (http://localhost:8080/servlet/ServletToDebug) envía una solicitud a HttpServer. Verá que el programa se detiene en el punto de ruptura.
Los comentarios en el código ayudan a depurar de varias maneras. Los comentarios se pueden usar en muchos otros aspectos del proceso de depuración.
Este Servlet utiliza comentarios de Java y comentarios en una sola línea (//...),comentarios en múltiples líneas (/* ...*/)Se puede usar para quitar temporalmente parte del código Java. Si el bug desaparece, revise el código que acaba de comentar con cuidado y encuentre el problema.
A veces, cuando un Servlet no funciona como se espera, es muy útil ver la solicitud HTTP original y la respuesta. Si está familiarizado con la estructura de HTTP, puede leer la solicitud y la respuesta para ver qué información de encabezado es exactamente.
A continuación, se enumeran algunas técnicas de depuración de Servlet:
Tenga en cuenta que server_root/Las clases no se recargarán, mientras que server_root/Los servlets pueden.
Solicite al navegador que muestre el contenido original de la página que muestra. Esto ayuda a identificar problemas de formato. Esto suele ser una opción del menú "Ver".
Asegúrese de que el navegador no haya almacenado la salida de la solicitud anterior ejecutando un recarga completa de la página. En Netscape Navigator, use Shift-Recargar, en Internet Explorer, use Shift-Refrescar.
Por favor, asegúrese de que el método init() del servlet acepte un parámetro ServletConfig y llame a super.init(config).