Заикание начало отладки JSP в IntelliJ IDEA - PullRequest
3 голосов
/ 19 октября 2010

Резюме

При использовании IntelliJ IDEA для отладки JSP я вижу, что JSP запускается дважды перед фактическим запросом из браузера. Кто-нибудь знает почему?

Обновлено с тестом сервлета ниже.

Обзор

Я использую (оцениваю) IntelliJ IDEA впервые (эффективно). При отладке веб-приложений я вижу странное поведение, которое подсказывает мне, что у меня где-то что-то неправильно настроено: если у меня установлена ​​точка останова в коде, который будет запускаться в ответ на страницу запуска, код запускается дважды до запуска браузера. и затем в третий раз в ответ на запрос браузера. Я хотел бы знать, возможно, я где-то ошибся (или если я не ошибся, что происходит).

Настройка

А) Создан новый проект веб-приложения

  1. Создан новый проект с нуля
  2. дал ему имя и идентифицировал его как модуль Java
  3. Принимается по умолчанию src каталог
  4. Выберите «Веб-приложение» из списка «Желаемые технологии»

Это дало мне стандартную структуру (src, WEB-INF и т. Д.) Со значением по умолчанию index.jsp.

B) Добавлен простой код в JSP для вывода даты.

C) Поставьте точку останова в коде.

D) Настроил мой веб-браузер в Файл | Настройки | Веб-браузеры

E) Пошел на Run | Редактировать конфигурации ... и:

  1. Кликнул [+] | Tomcat Server | Местный
  2. дал имя
  3. Нажмите кнопку Настроить ... рядом с раскрывающимся списком серверов приложений (поскольку у меня его еще не было) и направили ее на мой автономный сервер Tomcat6 (см. Ниже), принимая все значения по умолчанию
  4. Вернувшись в конфигурацию отладки, сказал ему развернуть артефакт "война взорвался" для этой конфигурации
  5. Добавлена ​​строка запроса "? Foo = bar" в начальный URL-адрес по умолчанию, поэтому: http://localhost:8080/?foo=bar (вы поймете почему ниже)
  6. Оставил все остальное по умолчанию
  7. Нажал ОК

Бег

  1. Выберите Выполнить | Debug . Он счастливо запускает сервер Tomcat.
  2. Он достигает точки останова. Изучение запроса показывает, что это GET из user-agent "Java / 1.6.0_20". Он имеет строку запроса, настроенную выше. Нет атрибутов, нет параметров, кроме строки запроса один.
  3. Нажмите кнопку Продолжить программу (F9).
  4. Это снова достигает точки останова. Это также GET из user-agent "Java / 1.6.0_20", но он не имеет строку запроса. Без атрибутов, без параметров.
  5. Нажмите кнопку Продолжить программу (F9).
  6. Он запускает браузер и снова достигает точки останова. Это GET из браузера (со строкой запроса) и выглядит совершенно нормально.

Я вижу поведение как со строкой запроса, так и без нее, я просто добавил ее, чтобы узнать, когда / обнаружится ли она.

Если я создаю класс и использую этот класс из кода в JSP и перемещаю свою точку останова в код класса, эта точка останова получает все три раза, так что если она выполняет реальную работу ( например, поиск чего-либо в базе данных), это действительно сделало бы эту работу. Я задавался вопросом, был ли это какой-то фантомный вызов перед компиляцией или что-то в этом роде, но А) это не должно быть, и Б) это не так.

Запуск с сервлетом

Я хотел еще немного дразнить поведение, поэтому я добавил сервлет в проект, сопоставил его с путем /foo и изменил свою конфигурацию отладки так, чтобы она запускала http://localhost:8080/foo?foo=bar, а не страницу индекса , Я также добавил в проект еще одну JSP, которая называется root.jsp. Это выявило очень интересное поведение:

  1. Выберите Выполнить | Debug . Он счастливо запускает сервер Tomcat.
  2. Достигает точки останова в коде servlet .Изучение запроса показывает, что это GET из user-agent "Java / 1.6.0_20".У него есть строка запроса.Нет атрибутов, нет параметров, кроме строки запроса один.
  3. Нажмите кнопку «Возобновить программу» (F9).
  4. Она достигает точки останова в index.jsp (?!).Это также GET из user-agent "Java / 1.6.0_20", но он не имеет строку запроса.Нет атрибутов, нет параметров.Обратите внимание, что index.jsp не имеет ничего общего с путем запуска /foo.
  5. Нажмите кнопку Возобновить программу (F9).
  6. Он запускает браузер и снова достигает точки останова в сервлете.Это GET из браузера (со строкой запроса) и выглядит совершенно нормально.

Точка останова в файле another.jsp никогда не попадает.Поэтому я подозревал, что запуск index.jsp (без строки запроса) связан с тем, что он является «файлом приветствия» по умолчанию.Поэтому я добавил welcome-file-list в свой web.xml и настроил еще один .jsp как welcome-file.Конечно же, теперь достигается точка останова в another.jsp, а не в index.jsp.

Подробнее

  • Довольно универсальная настольная установка Ubuntu 10.04 LTS
  • Недавно загруженная и распакованная установка IntelliJ IDEA Ultimate (30-дневная пробная версия)
  • Недавно загруженная и распакованная автономная установка Tomcat6 (IDEA не понравилась центральная установка, которую я сделал через Synaptic, структура разделенного каталога перепутанатак что я остановил этот сервер и просто использовал простую версию для скачивания и распаковки)
  • Sun's Java 6 JDK

Заранее спасибо!

1 Ответ

4 голосов
/ 19 октября 2010

Изучение запроса показывает, что это GET от пользовательского агента "Java / 1.6.0_20".

Это происходит при развертывании веб-приложения в ROOT Tomcat. Плагин Eclipse сервера Tomcat будет выполнять самотестирование на / во время запуска (который косвенно загружает welcome-file, как указано в web.xml).

Что ты можешь сделать? Либо живите с этим, либо разверните в контексте, отличном от ROOT.

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