depuração servlet
Testing / depuração desenvolvimento Servlet do curso é sempre difícil. Servlet muitas vezes envolve um grande número de interacção cliente / servidor, mas pode ser difícil de reproduzir o erro.
Aqui estão algumas dicas e sugestões que podem ajudar a depurar.
System.out.println ()
System.out.printlnl () é utilizado como um marcador, usado para testar se um pedaço específico de código é executada. Nós também pode imprimir o valor da variável. Além disso:
- Como os objetos do sistema são parte do núcleo objetos Java, ele pode ser usado em qualquer lugar sem a necessidade de instalar quaisquer classes adicionais. Isso inclui Servlet, JSP, RMI, EJB, feijão e classes, bem como aplicações stand-alone.
- Com diferentes paradas no ponto de interrupção, escreva para System.out não interfere com o fluxo normal de execução da aplicação, o que torna o momento é crucial quando se é particularmente valioso.
Aqui está a sintaxe para usar System.out.println () é:
System.out.println ( "mensagem de depuração");
Todas as mensagens que são gerados pela gramática acima será gravado em arquivos de log do servidor Web.
O registro de mensagens
Use o método apropriado de registo para registar todas as depuração, aviso e mensagens de erro, que é uma idéia muito boa, é recomendado o uso de registro Log4J todas as mensagens.
Servlet API também proporciona uma maneira simples de saída, usando o método de log (), como se segue:
// Import java necessária biblioteca de importação java.io. *; importação javax.servlet * .; importação javax.servlet.http * .; classe pública ContextLog estende HttpServlet { doGet public void (HttpServletRequest pedido, HttpServletResponse resposta) throws ServletException, java.io.IOException { Cordas par = request.getParameter ( "par1"); // Chamada ServletContext.log dois métodos ServletContext context = getServletContext (); if (par == null || par.equals ( "")) // Registro de parâmetros pela versão Throwable context.log ( "Não mensagem recebida:", nova IllegalStateException ( "Missing parâmetro")); mais context.log ( "Aqui é a mensagem do visitante:" + par); response.setContentType ( "text / html; charset = UTF-8"); java.io.PrintWriter out = response.getWriter (); String title = "Contexto Log"; Cordas docType = "\ n <DOCTYPE html!>"; out.println (docType + "<Html> \ n" + "<Head> <title>" + título + "</ title> </ head> \ n" + "<Body bgcolor = \" # f0f0f0 \ "> \ n" + "<H1 align = \" Centro \ ">" + título + "</ h1> \ n" + "<H2 align = \" Centro \ "> As mensagens enviadas </ h2> \ n" + "</ Body> </ html>"); } // DoGet }
ServletContext que mensagens de texto para servlet arquivo de log recipiente. Para Tomcat, esses logs podem ser encontrados no <Tomcat-installation-directory> / logs.
Esses arquivos de log são erros de frequência, de fato emergentes ou problemas são dadas instruções. Devido a isso, recomendamos o uso da cláusula catch função exceção log () não costuma acontecer.
Use JDB depurador
Você pode usar o comando applet ou depuração de aplicativos jdb para Servlet depuração.
Para depurar um servlet, que pode depurar sun.servlet.http.HttpServer e, em seguida, executá-lo como httpserver Servlet para responder às solicitações HTTP lado do navegador. Este pequeno programa de depuração do applet é muito semelhante. E depuração do applet é diferente, o programa real que está sendo depurado é sun.applet.AppletViewer.
A maioria dos depuradores irá automaticamente esconder os detalhes de como depurar applet. Da mesma forma, para o servlet, você deve fazer o seguinte com a ajuda do depurador:
- Definir classpath classpath do seu depurador, para que ele possa encontrar sun.servlet.http.Http-Server e classes relacionadas.
- Definir classpath classpath do seu depurador, para que ele possa encontrar o seu servlet e classes de suporte, geralmente em server_root / servlets e server_root / classes em.
Você geralmente não quer server_root / servlets em seu caminho de classe, porque ele desativa recarregar servlet. No entanto, esta regra contém é muito útil para depuração. Ele permite que você depurar no httpserver loader Servlet personalizado antes Servlet definir um ponto de interrupção em um Servlet.
Se você definir o classpath classpath correto, você pode iniciar a depuração sun.servlet.http.HttpServer. Servlet pode definir pontos de interrupção no código que você deseja depurar e, em seguida, dada Servlet usando um navegador da Web (http: // localhost: 8080 / servlet / ServletToDebug) faz uma solicitação para httpserver. Você verá a execução do programa pára no ponto de interrupção.
use comentários
Comentários no código vai ajudar de várias maneiras para depuração. As notas podem ser usados em muitas outras maneiras processo de depuração.
O uso de comentários Java Servlet e comentários de linha única (// ...), comentários multi-linha (/ * ... * /) pode ser usado para remover temporariamente algum código Java. Se o erro desaparecer, basta olhar para o código comentado e identificar o problema.
informações do cliente e do cabeçalho do lado do servidor
Às vezes, quando um Servlet não é o esperado, ver o pedido HTTP original e resposta é muito útil. Se você estiver familiarizado com a configuração do HTTP, você pode ler a solicitação e resposta e ver as informações que esses cabeçalhos.
técnicas importantes de depuração
Aqui estão algumas dicas de depuração Servlet:
- Por favor note, server_root / classes não será recarregado, eo server_root / servlets poder.
- Ele pede o navegador para exibir o conteúdo original da página que exibe. Isso ajuda a identificar o formato de problema. É geralmente uma opção no menu "View".
- Ao forçar uma completa recarregar a página para assegurar que o navegador não é um pedido antes do buffer de saída. No Netscape Navigator, usar Shift-Reload, no Internet Explorer, use Shift-Refresh.
- Certifique-se o método do servlet init () aceita um ServletConfig parâmetro e chama super.init (config).