English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Teste/Depurar Servlet sempre é um desafio no processo de desenvolvimento./Interação com o servidor, pode ocorrer erros que são difíceis de reproduzir.
Aqui estão algumas dicas e sugestões que podem ajudar a depurar.
System.out.println() é usado como um marcador para verificar se um determinado código foi executado. Também podemos imprimir os valores das variáveis. Além disso:
Como parte do conjunto de objetos Java central, o objeto System pode ser usado em qualquer lugar sem a necessidade de instalar nenhuma classe adicional. Isso inclui Servlet, JSP, RMI, EJB's, Beans normais e classes, bem como aplicativos independentes.
Diferente de parar no ponto de interrupção, escrever no System.out não interfere no fluxo normal de execução do aplicativo, o que torna-o particularmente valioso quando a sequência é crucial.
A seguir está a sintaxe do System.out.println():
System.out.println("message de depuração");
Todas as mensagens geradas pela sintaxe acima serão registradas no arquivo de log do servidor da web.
Usar o método apropriado de registro de log para registrar todas as mensagens de depuração, alerta e erro, é uma ideia muito boa, recomenda-se usar 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=\ + "<h1 align=\ + title + "</h1>\n" + "<h2 align=\/h2>\n" + "</body></html> } //doGet }
ServletContext registra suas mensagens de texto no arquivo de log do container Servlet. Para o Tomcat, esses logs podem ser encontrados em <Tomcat-instalação-diretório>/encontrados no diretório logs.
Esses arquivos de log realmente indicam a frequência de novos erros ou problemas. Por esse motivo, é recomendável usar a função log() nas cláusulas catch de exceções que geralmente não ocorrem.
Você pode usar o comando jdb para depurar Servlets, que é usado para depurar applets ou aplicativos.
Para depurar um Servlet, podemos depurar sun.servlet.http.HttpServer e vê-lo como HttpServer executando Servlets para responder a solicitações HTTP do lado do navegador. Isso é muito semelhante ao depurar applets. Diferente do depuração de applets, o programa realmente depurado é sun.applet.AppletViewer.
A maioria dos depuradores oculta automaticamente os detalhes de como depurar applets. Da mesma forma, para servlets, você precisa ajudar o depurador a executar as seguintes operações:
Configure o caminho de classes classpath do seu depurador para que ele possa encontrar sun.servlet.http.Http-Server e classes relacionadas.
Configure o caminho de classes classpath do seu depurador para que ele possa encontrar seus servlets e classes suportadas, geralmente no server_root/servlets e server_root/classes.
Você geralmente não deseja que server_root/Os servlets no seu classpath, pois isso desativa a recarga de servlets. No entanto, essa regra de inclusão é muito útil para a depuração. Ela permite que o seu depurador defina pontos de interrupção no Servlet antes de o carregador personalizado do Servlet no HttpServer carregá-lo.
Se você já configurou o caminho de classes classpath correto, você pode começar a depurar sun.servlet.http.HttpServer. Você pode definir pontos de interrupção no código do Servlet que você deseja depurar e, em seguida, usar o navegador web para acessar o Servlet fornecido (http://localhost:8080/servlet/ServletToDebug) envia uma solicitação para HttpServer. Você verá que o programa parará no ponto de interrupção.
Os comentários no código ajudam de várias maneiras a depurar. Os comentários podem ser usados em muitos outros aspectos do processo de depuração.
Este servlet usa comentários Java e comentários em uma linha (//...),comentários em várias linhas(/* ...*/)Pode ser usado para remover temporariamente parte do código Java. Se o bug desaparecer, veja atentamente o código que você comentou recentemente e encontre o problema.
Às vezes, quando um servlet não está funcionando conforme o esperado, verificar a solicitação HTTP original e a resposta pode ser muito útil. Se você estiver familiarizado com a estrutura HTTP, você pode ler a solicitação e a resposta para ver o que esses cabeçalhos são.
A seguir, estão listados alguns truques de depuração de servlet:
Observe que o server_root/As classes não recarregam, enquanto o server_root/Os servlets podem.
Exigir que o navegador mostre o conteúdo original da página que ele está exibindo. Isso ajuda a identificar problemas de formatação. Isso geralmente é uma opção sob o menu "Visualizar".
Forçar a recarga completa da página para garantir que o navegador ainda não tenha cacheado a saída da última solicitação. No Netscape Navigator, use Shift-Recarregar, no Internet Explorer, use Shift-Recarregar.
Por favor, confirme se o método init() do servlet aceita um parâmetro ServletConfig e chama super.init(config).