Всегда сложно тестировать / отлаживать сервлеты. Сервлеты, как правило, связаны с большим количеством взаимодействий клиент / сервер, что делает ошибки вероятными, но трудно воспроизводимыми.
Вот несколько советов и предложений, которые могут помочь вам в вашей отладке.
System.out.println ()
System.out.println () легко использовать в качестве маркера для проверки, выполняется ли определенный фрагмент кода или нет. Мы можем также распечатать значения переменных. Дополнительно —
-
Поскольку объект System является частью основных объектов Java, его можно использовать везде без необходимости устанавливать какие-либо дополнительные классы. Это включает в себя сервлеты, JSP, RMI, EJB, обычные компоненты и классы и автономные приложения.
-
Остановка в технике точек останова останавливает нормальное выполнение и, следовательно, занимает больше времени. Принимая во внимание, что запись в System.out не сильно мешает нормальному потоку выполнения приложения, что делает его очень ценным, когда время имеет решающее значение.
Поскольку объект System является частью основных объектов Java, его можно использовать везде без необходимости устанавливать какие-либо дополнительные классы. Это включает в себя сервлеты, JSP, RMI, EJB, обычные компоненты и классы и автономные приложения.
Остановка в технике точек останова останавливает нормальное выполнение и, следовательно, занимает больше времени. Принимая во внимание, что запись в System.out не сильно мешает нормальному потоку выполнения приложения, что делает его очень ценным, когда время имеет решающее значение.
Ниже приведен синтаксис для использования System.out.println () —
System.out.println("Debugging message");
Все сообщения, сгенерированные вышеупомянутым синтаксисом, будут зарегистрированы в файле журнала веб-сервера.
Регистрация сообщений
Всегда хорошая идея использовать правильный метод регистрации, чтобы регистрировать все отладочные сообщения, предупреждения и сообщения об ошибках, используя стандартный метод регистрации. Я использую log4J для записи всех сообщений.
Servlet API также предоставляет простой способ вывода информации с помощью метода log () следующим образом:
// Import required java libraries import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ContextLog extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { String par = request.getParameter("par1"); //Call the two ServletContext.log methods ServletContext context = getServletContext( ); if (par == null || par.equals("")) //log version with Throwable parameter context.log("No message received:", new IllegalStateException("Missing parameter")); else context.log("Here is the visitor's message: " + par); response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter( ); String title = "Context Log"; String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor = \"#f0f0f0\">\n" + "<h1 align = \"center\">" + title + "</h1>\n" + "<h2 align = \"center\">Messages sent</h2>\n" + "</body> </html>" ); } //doGet }
ServletContext записывает свои текстовые сообщения в файл журнала контейнера сервлета. С Tomcat эти журналы находятся в <Tomcat-Installation-Directory> / logs.
Файлы журнала дают представление о появлении новых ошибок или частоте возникновения проблем. По этой причине хорошо использовать функцию log () в предложении catch исключений, которые обычно не должны возникать.
Использование JDB Debugger
Вы можете отлаживать сервлеты с помощью тех же команд jdb, которые вы используете для отладки апплета или приложения.
Чтобы отладить сервлет, мы отлаживаем sun.servlet.http.HttpServer и внимательно наблюдаем, как HttpServer выполняет сервлеты в ответ на HTTP-запросы, сделанные из браузера. Это очень похоже на отладку апплетов. Разница в том, что с апплетами отлаживаемой программой является sun.applet.AppletViewer.
Большинство отладчиков скрывают эту деталь, автоматически зная, как отлаживать апплеты. Пока они не сделают то же самое для сервлетов, вы должны помочь отладчику, выполнив следующее:
-
Задайте путь к классу вашего отладчика, чтобы он мог найти sun.servlet.http.Http-Server и связанные с ним классы.
-
Задайте путь к классу вашего отладчика, чтобы он также мог находить ваши сервлеты и вспомогательные классы, обычно это server_root / servlets и server_root / classes.
Задайте путь к классу вашего отладчика, чтобы он мог найти sun.servlet.http.Http-Server и связанные с ним классы.
Задайте путь к классу вашего отладчика, чтобы он также мог находить ваши сервлеты и вспомогательные классы, обычно это server_root / servlets и server_root / classes.
Обычно вы не хотите, чтобы server_root / servlets находились в вашем classpath, потому что это отключает перезагрузку сервлета. Это включение, однако, полезно для отладки. Это позволяет вашему отладчику устанавливать точки останова в сервлете до того, как пользовательский загрузчик сервлета в HttpServer загрузит сервлет.
После того как вы установили правильный путь к классу, начните отладку sun.servlet.http.HttpServer. Вы можете установить точки останова в любом сервлете, который вас интересует в отладке, а затем использовать веб-браузер, чтобы запросить HttpServer для данного сервлета (http: // localhost: 8080 / servlet / ServletToDebug). Вы должны увидеть, что выполнение остановлено на ваших точках останова.
Использование комментариев
Комментарии в вашем коде могут помочь процессу отладки различными способами. Комментарии могут использоваться многими другими способами в процессе отладки.
Сервлет использует комментарии Java, а однострочные (// …) и многострочные (/ * … * /) комментарии могут использоваться для временного удаления частей вашего Java-кода. Если ошибка исчезнет, внимательно посмотрите на код, который вы только что прокомментировали, и выясните проблему.
Заголовки клиента и сервера
Иногда, когда сервлет ведет себя не так, как ожидалось, полезно взглянуть на необработанный HTTP-запрос и ответ. Если вы знакомы со структурой HTTP, вы можете прочитать запрос и ответ и точно узнать, что именно происходит с этими заголовками.
Важные советы по отладке
Вот список некоторых советов по отладке сервлетов:
Помните, что server_root / classes не перезагружается, и что server_root / servlets, вероятно, делает.
Попросите браузер показать необработанное содержимое отображаемой страницы. Это может помочь выявить проблемы с форматированием. Обычно это опция в меню «Вид».
Убедитесь, что браузер не кэширует вывод предыдущего запроса, принудительно перезагрузив страницу. В Netscape Navigator используйте Shift-Reload; с помощью Internet Explorer используйте Shift-Refresh.
Убедитесь, что метод init () вашего сервлета принимает параметр ServletConfig и сразу вызывает super.init (config).