JSP - Depuração

Neste capítulo, discutiremos a depuração de um JSP. É sempre difícil testar / depurar um JSP e servlets. JSP e Servlets tendem a envolver uma grande quantidade de interação cliente / servidor, tornando os erros prováveis, mas difíceis de reproduzir.

A seguir estão algumas dicas e sugestões que podem ajudá-lo em sua depuração.

Usando System.out.println ()

System.out.println()é fácil de usar como um marcador para testar se um determinado trecho de código está sendo executado ou não. Podemos imprimir os valores das variáveis ​​também. Considere os seguintes pontos adicionais -

  • Como o objeto System faz parte dos objetos Java principais, ele pode ser usado em qualquer lugar sem a necessidade de instalar nenhuma classe extra. Isso incluiServlets, JSP, RMI, EJB's, ordinary Beans e classes, e standalone applications.

  • Comparado a parar em pontos de interrupção, escrever para System.out não interfere muito no fluxo normal de execução do aplicativo, o que o torna muito valioso quando o iming é crucial.

A seguir está a sintaxe a ser usada System.out.println() -

System.out.println("Debugging message");

O exemplo a seguir mostra como usar System.out.print() -

<%@taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>

<html>
   <head><title>System.out.println</title></head>
   <body>
      <c:forEach var = "counter" begin = "1" end = "10" step = "1" >
      
         <c:out value = "${counter-5}"/></br>
         <% System.out.println( "counter = " + pageContext.findAttribute("counter") ); %>
      </c:forEach>
      
   </body>
</html>

Acesse o JSP acima, o navegador mostrará o seguinte resultado -

-4
-3
-2
-1
0
1
2
3
4
5

Se você estiver usando o Tomcat, também encontrará essas linhas anexadas ao final do stdout.log no diretório de logs.

counter = 1
counter = 2
counter = 3
counter = 4
counter = 5
counter = 6
counter = 7
counter = 8
counter = 9
counter = 10

Dessa forma, você pode trazer variáveis ​​e outras informações para o log do sistema, que podem ser analisadas para descobrir a causa raiz do problema ou por vários outros motivos.

Usando o JDB Logger

o J2SEa estrutura de registro é projetada para fornecer serviços de registro para qualquer classe em execução na JVM. Podemos fazer uso desta estrutura para registrar qualquer informação.

Vamos reescrever o exemplo acima usando a API JDK logger -

<%@taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<%@page import = "java.util.logging.Logger" %>

<html>
   <head><title>Logger.info</title></head>
   
   <body>
      <% Logger logger = Logger.getLogger(this.getClass().getName());%>

      <c:forEach var = "counter" begin = "1" end = "10" step = "1" >
      <c:set var = "myCount" value = "${counter-5}" />
      <c:out value = "${myCount}"/></br>
         <% String message = "counter = "
            + pageContext.findAttribute("counter") + "myCount = "
            + pageContext.findAttribute("myCount");
            logger.info( message );
         %>
      </c:forEach>
      
   </body>
</html>

O código acima irá gerar resultados semelhantes no navegador e em stdout.log, mas você terá informações adicionais em stdout.log. Vamos usar oinfométodo do logger porque e registrar a mensagem apenas para fins informativos. A seguir está um instantâneo do arquivo stdout.log -

24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 1 myCount = -4
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 2 myCount = -3
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 3 myCount = -2
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 4 myCount = -1
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 5 myCount = 0
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 6 myCount = 1
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 7 myCount = 2
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 8 myCount = 3
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 9 myCount = 4
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 10 myCount = 5

As mensagens podem ser enviadas em vários níveis usando as funções de conveniência severe(), warning(), info(), config(), fine(), finer(), e finest(). Aqui, o método finest () pode ser usado para registrar as melhores informações e o método serious () pode ser usado para registrar as informações graves.

Você pode usar o Log4J Framework para registrar mensagens em arquivos diferentes com base em seus níveis de gravidade e importância.

Ferramentas de depuração

O NetBeans é um Java Integrated Development Environment gratuito e de código aberto que oferece suporte ao desenvolvimento de aplicativos Java autônomos e aplicativos da Web que oferecem suporte às especificações JSP e servlet e também inclui um depurador JSP.

O NetBeans suporta as seguintes funcionalidades básicas de depuração -

  • Breakpoints
  • Percorrendo o código
  • Watchpoints

Você pode se referir a NetBeans documentation para entender as funcionalidades de depuração acima.

Usando JDB Debugger

Você pode depurar JSP e servlets com o mesmo jdb comandos que você usa para depurar um miniaplicativo ou um aplicativo.

Para depurar um JSP ou servlet, você pode depurar sun.servlet.http.HttpServer, então observe como o HttpServer executa o JSP / servlets em resposta às solicitações HTTP que fazemos de um navegador. Isso é muito semelhante a como os miniaplicativos são depurados. A diferença é que com os miniaplicativos, o programa real sendo depurado ésun.applet.AppletViewer.

A maioria dos depuradores esconde esse detalhe sabendo automaticamente como depurar miniaplicativos. Até que eles façam o mesmo para JSP, você deve ajudar seu depurador considerando o seguinte -

  • Defina o classpath do seu depurador. Isso ajuda você a encontrarsun.servlet.http.Http-Server e as classes associadas.

  • Defina o classpath do seu depurador. Isso ajuda a encontrar seu JSP e classes de suporte, normalmenteROOT\WEB-INF\classes.

Depois de definir o caminho de classe adequado, comece a depurar sun.servlet.http.HttpServer. Você pode definir pontos de interrupção em qualquer JSP que estiver interessado em depurar e, em seguida, usar um navegador da web para fazer uma solicitação ao HttpServer para o JSP fornecido(http://localhost:8080/JSPToDebug). A execução aqui para em pontos de interrupção.

Usando comentários

Comentários em seu código podem ajudar o processo de depuração de várias maneiras. Os comentários podem ser usados ​​de muitas outras maneiras no processo de depuração.

O JSP usa comentários Java e single line (// ...) e multiple line (/* ... */)os comentários podem ser usados ​​para remover temporariamente partes do seu código Java. Se o bug desaparecer, dê uma olhada no código que você acabou de comentar e descubra o problema.

Cabeçalhos de cliente e servidor

Às vezes, quando um JSP não se comporta conforme o esperado, é útil examinar a solicitação e a resposta HTTP brutas. Se você estiver familiarizado com a estrutura do HTTP, poderá ler a solicitação e a resposta e ver o que exatamente está acontecendo com esses cabeçalhos.

Dicas importantes de depuração

Aqui está uma lista de mais algumas dicas de depuração na depuração JSP -

  • Peça a um navegador para mostrar o conteúdo bruto da página que está exibindo. Isso pode ajudar a identificar problemas de formatação. Geralmente é uma opção do menu Exibir.

  • Certifique-se de que o navegador não esteja armazenando em cache a saída de uma solicitação anterior, forçando uma recarga completa da página. ComNetscape Navigator, usar Shift-Reload; comInternet Explorer usar Shift-Refresh.