English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Отладка JSP

Тестирование/отладка JSP или servlet программы всегда было таким сложным. Программы JSP и Servlets склонны к взаимодействию с большим количеством клиент/сервер, что может привести к ошибкам и трудностям в повторении ошибочных условий.

Далее будут предложены некоторые советы и хитрости, чтобы помочь вам отладить программу.

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

System.out.println() очень удобен для маркировки того, выполнено ли то или иное кодирование.もちろん、можно также распечатать различные значения.Кроме того:

  • С тех пор как объект System стал частью ядра Java, его можно использовать везде без необходимости ввода дополнительных классов. Область использования включает Servlets, JSP, RMI, EJB's, Beans, классы и независимые приложения.

  • В отличие от остановки выполнения на breakpoint, вывод с помощью System.out не оказывает значительного влияния на поток выполнения приложения, что особенно полезно в приложениях с важной定时ной механикой.

Далее приведена грамматика использования 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>

Теперь, если запустить приведенный выше пример, он будет производить следующие результаты:

-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. Таким образом, мы можем использовать этот фреймворк для записи любой информации.

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

<%@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. В этом случае мы используем метод info из logger. Ниже приведен снимок файла stdout.log:

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

Сообщения можно отправлять с различными приоритетами, используя методы sever(), warning(), info(), config(), fine(), finer(), finest(). Метод finest() используется для записи лучших сообщений, а метод sever() - для записи наиболее серьезных сообщений.

Сообщения можно записывать в различные файлы с использованием фреймворка Log4J, классифицируя их по степени серьезности и важности.

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

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

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

  • Точки останова

  • Следование шаг за шагом

  • Точки наблюдения

Подробную информацию можно найти в руководстве по использованию NetBeans.

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

Отладка в JSP и servlets может быть выполнена с помощью команды jdb, как в случае с обычными приложениями.

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

Большинство отладчиков могут автоматически пропустить некоторые детали при отладке applets, так как они знают, как отладить applets. Если нужно передать объект отладки на JSP, необходимо выполнить следующие два условия:

  • Настройте classpath отладчика, чтобы он мог найти sun.servlet.http.Http-Server и связанные классы.

  • Настройте classpath отладчика, чтобы он мог найти ваши JSP файлы и связанные классы.

После настройки classpath начните отладку sun.servlet.http.Http-Server. Вы можете установить точку останова в любом месте файла JSP, если вам это нравится, и отправить запрос серверу через браузер, чтобы увидеть, что программа остановилась на точке останова.

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

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

JSP использует Java комментарии. Если ошибка исчезла, внимательно изучите код, который вы только что закомментировали, обычно можно найти причину.

Заголовочные модули клиента и сервера

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

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

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

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

  • Убедитесь, что браузер не захватил предыдущий вывод запроса при принудительном перезагрузке страницы. Если вы используете браузер Netscape Navigator, то используйте Shift-Reload; если вы используете браузер IE, то используйте Shift-Refresh.