Учебники

JSP — отладка

В этой главе мы обсудим отладку JSP. Всегда сложно тестировать / отлаживать JSP и сервлеты. JSP и сервлеты, как правило, требуют большого количества взаимодействия клиент-сервер, что делает ошибки вероятными, но трудно воспроизводимыми.

Ниже приведены несколько советов и предложений, которые могут помочь вам в вашей отладке.

Использование System.out.println ()

System.out.println () легко использовать в качестве маркера для проверки, выполняется ли определенный фрагмент кода или нет. Мы можем также распечатать значения переменных. Рассмотрим следующие дополнительные моменты —

  • Поскольку объект System является частью основных объектов Java, его можно использовать везде без необходимости устанавливать какие-либо дополнительные классы. Это включает в себя сервлеты, JSP, RMI, EJB, обычные компоненты и классы и автономные приложения .

  • По сравнению с остановкой в ​​точках останова запись в System.out не сильно мешает нормальному потоку выполнения приложения, что делает его очень ценным, когда iming имеет решающее значение.

Поскольку объект System является частью основных объектов Java, его можно использовать везде без необходимости устанавливать какие-либо дополнительные классы. Это включает в себя сервлеты, JSP, RMI, EJB, обычные компоненты и классы и автономные приложения .

По сравнению с остановкой в ​​точках останова запись в System.out не сильно мешает нормальному потоку выполнения приложения, что делает его очень ценным, когда iming имеет решающее значение.

Ниже приведен синтаксис для использования System.out.println ()

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

В следующем примере показано, как использовать 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>

Получив доступ к вышеуказанной JSP, браузер покажет следующий результат —

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

Если вы используете Tomcat, вы также найдете эти строки, добавленные в конец stdout.log в каталоге logs.

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

Таким образом, вы можете вносить переменные и другую информацию в системный журнал, который можно проанализировать, чтобы выяснить причину проблемы или по другим причинам.

Использование JDB Logger

Инфраструктура ведения журнала J2SE предназначена для предоставления служб ведения журнала для любого класса, работающего в JVM. Мы можем использовать эту платформу для регистрации любой информации.

Давайте перепишем приведенный выше пример, используя JDK logger API —

<%@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>

Приведенный выше код сгенерирует аналогичный результат в браузере и в stdout.log, но у вас будет дополнительная информация в stdout.log . Мы будем использовать метод info регистратора, потому что и регистрируем сообщение только для информационных целей. Ниже приведен снимок файла 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

Сообщения можно отправлять на разных уровнях с помощью вспомогательных функций Суровый (), Предупреждение (), Информация (), Конфигурация (), Точный (), Тонкий () и Лучший () . Здесь метод finest () может использоваться для регистрации самой точной информации, а метод heavy () может использоваться для регистрации серьезной информации.

Вы можете использовать Log4J Framework для регистрации сообщений в разных файлах в зависимости от их серьезности и важности.

Инструменты отладки

NetBeans — это бесплатная интегрированная среда разработки Java с открытым исходным кодом, которая поддерживает разработку автономных приложений Java и веб-приложений, поддерживающих спецификации JSP и сервлетов, а также включает отладчик JSP.

NetBeans поддерживает следующие основные функции отладки:

  • Контрольные точки
  • Пошаговое выполнение кода
  • Контрольные точки

Вы можете обратиться к документации по NetBeans, чтобы понять описанные выше функции отладки.

Использование JDB Debugger

Вы можете отлаживать JSP и сервлеты с помощью тех же команд jdb, которые вы используете для отладки апплета или приложения.

Чтобы отладить JSP или сервлет, вы можете отладить sun.servlet.http.HttpServer , а затем наблюдать, как HttpServer выполняет JSP / сервлеты в ответ на HTTP-запросы, которые мы делаем из браузера. Это очень похоже на отладку апплетов. Разница в том, что с апплетами отлаживаемой программой является sun.applet.AppletViewer .

Большинство отладчиков скрывают эту деталь, автоматически зная, как отлаживать апплеты. Пока они не сделают то же самое для JSP, вы должны помочь отладчику, учитывая следующее:

  • Установите путь к классу вашего отладчика. Это поможет вам найти sun.servlet.http.Http-Server и связанные с ним классы.

  • Установите путь к классу вашего отладчика. Это поможет вам найти ваш JSP и вспомогательные классы, обычно ROOT \ WEB-INF \ classes .

Установите путь к классу вашего отладчика. Это поможет вам найти sun.servlet.http.Http-Server и связанные с ним классы.

Установите путь к классу вашего отладчика. Это поможет вам найти ваш JSP и вспомогательные классы, обычно ROOT \ WEB-INF \ classes .

После того как вы установили правильный путь к классу , начните отладку sun.servlet.http.HttpServer . Вы можете установить точки останова в любой JSP, которая вас интересует в отладке, а затем использовать веб-браузер для запроса к HttpServer для данного JSP (http: // localhost: 8080 / JSPToDebug) . Исполнение здесь останавливается на контрольных точках.

Использование комментариев

Комментарии в вашем коде могут помочь процессу отладки различными способами. Комментарии могут использоваться многими другими способами в процессе отладки.

JSP использует комментарии Java, а однострочные (// …) и многострочные (/ * … * /) комментарии могут использоваться для временного удаления частей вашего Java-кода. Если ошибка исчезнет, ​​внимательно посмотрите на код, который вы только что прокомментировали, и выясните проблему.

Заголовки клиента и сервера

Иногда, когда JSP ведет себя не так, как ожидалось, полезно взглянуть на необработанный HTTP-запрос и ответ. Если вы знакомы со структурой HTTP, вы можете прочитать запрос и ответ и посмотреть, что именно происходит с этими заголовками.

Важные советы по отладке

Вот список некоторых советов по отладке JSP —

Попросите браузер показать необработанное содержимое отображаемой страницы. Это может помочь выявить проблемы с форматированием. Обычно это опция в меню «Вид».

Убедитесь, что браузер не кэширует вывод предыдущего запроса, принудительно перезагрузив страницу. В Netscape Navigator используйте Shift-Reload ; с помощью Internet Explorer используйте Shift-Refresh .