Latest web development tutorials

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).