Сервлеты - Отладка

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

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

System.out.println ()

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

  • Поскольку объект 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

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

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

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

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

  • Задайте путь к классам вашего отладчика, чтобы он также мог находить ваши сервлеты и классы поддержки, обычно каталог-сервера / servlets и каталог-сервера / классы.

Обычно вам не нужны каталог-сервера / сервлеты в пути к классам, потому что он отключает перезагрузку сервлета. Однако это включение полезно для отладки. Это позволяет вашему отладчику устанавливать точки останова в сервлете до того, как пользовательский загрузчик сервлета в 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).