English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Тестирование/отладка Servlet всегда является сложной задачей в процессе разработки. Servlet часто связаны с大量的 взаимодействием клиент/сервер, могут возникать ошибки, но их трудно воспроизвести.
Вот несколько советов и рекомендаций, которые помогут вам в отладке.
System.out.println() используется в качестве маркера для проверки выполнения определенного фрагмента кода. Мы также можем выводить значения переменных. Кроме того:
Поскольку объект System является частью ядра Java, его можно использовать везде, не требуя установки дополнительных классов. Это включает Servlet, JSP, RMI, EJB's, обычные Beans и классы, а также автономные приложения.
В отличие от остановки на breakpoint, запись в System.out не干扰ит нормальный процесс выполнения приложения, что делает его особенно ценным в тех случаях, когда время выполнения критично.
Ниже приведен синтаксис использования System.out.println():
System.out.println("Debugging message");
Все сообщения, сгенерированные этой грамматикой, будут записаны в файл журнала веб-сервера.
Использование подходящих методов записи лога для записи всех отладочных, предупреждающих и ошибочных сообщений является очень хорошей идеей и рекомендуется. log4J записывать все сообщения.
Servlet API также предоставляет простой способ вывода информации, используя метод log(), как показано ниже:
// 导入必需的 java 库 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 two ServletContext.log methods ServletContext context = getServletContext( ); if (par == null || par.equals("")) // Through the Throwable parameter to record the version context.log("No message received:", new IllegalStateException("Missing parameter")); else context.log("Here is the visitor's message: " + par); response.setContentType("text/html;charset=UTF-8"); java.io.PrintWriter out = response.getWriter( ); String title = "Context Log"; String docType = "<!DOCTYPE html> \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 записывает свои текстовые сообщения в лог-файл контейнера Servlet. Для Tomcat эти логи можно найти в каталоге <Tomcat-installation-directory>/logs.
Эти лог-файлы действительно указывают на частоту возникновения новых ошибок или проблем. Поэтому рекомендуется использовать функцию log() в блоке catch для нестандартных исключений.
Вы можете использовать команду jdb для отладки Servlet, как для отладки applet или приложения.
Чтобы отладить Servlet, мы можем отладить HttpServer из пакета sun.servlet.http и рассматривать его как выполнение Servlet для ответа на HTTP-запросы браузера. Это очень похоже на отладку applet. В отличие от отладки applet, фактической программой, которую отладают, является sun.applet.AppletViewer.
Большинство отладчиков автоматически скрывают детали отладки applet. Точно так же, для servlet, вам нужно помочь отладчику выполнить следующие действия:
Настройте путь класса classpath вашего отладчика, чтобы он мог найти sun.servlet.http.Http-Server и связанные классы.
Настройте путь класса classpath вашего отладчика, чтобы он мог найти ваши servlet и поддерживающие классы, обычно это server_root/servlets и server_root/classes.
Вам, скорее всего, не потребуется, чтобы server_root/servlets был в вашем classpath, так как это отключит перезагрузку servlet. Но это правило включения очень полезно для отладки. Оно позволяет вашему отладчику установить точку останова в Servlet до того, как он будет загружен загрузчиком Servlet в HttpServer.
Если вы уже настроили правильный путь класса classpath, вы можете начать отладку HttpServer из пакета sun.servlet.http. Вы можете установить точку останова в вашем Servlet коде и затем отправить запрос HttpServer через веб-браузер, используя предоставленный Servlet (http://localhost:8080/servlet/ServletToDebug). Вы увидите, что программа остановится на точке останова.
Комментарии в коде помогают в отладке различными способами. Комментарии могут использоваться во многих других способах отладки процесса.
Этот Servlet использует Java-комментарии и однolinейные комментарии (//...), многolinейные комментарии (/* ...*/) могут использоваться для временного удаления части Java-кода. Если ошибка исчезает, тщательно изучите код, который вы только что закомментировали, и найдите причину проблемы.
Иногда, когда Servlet не работает так, как ожидалось, полезно просмотреть исходный HTTP-запрос и ответ. Если вы знакомы с структурой HTTP, вы можете прочитать запрос и ответ, чтобы увидеть, что содержится в этих заголовках.
Ниже перечислены некоторые советы по отладке Servlet:
Обратите внимание, что server_root/classes не перезагружается, а server_root/servlets может.
Требуется, чтобы браузер показал исходное содержимое отображаемой страницы. Это помогает определить проблемы с форматированием. Это通常是 опция в меню "Вид".
Для обеспечения того, что браузер еще не缓存 результаты предыдущего запроса, выполните полное перезагрузку страницы. В Netscape Navigator используйте Shift-Reload, в Internet Explorer - Shift-Refresh.
Пожалуйста, подтвердите, что метод init() servlet принимает параметр ServletConfig и вызывается super.init(config).