Как я могу отладить JSP?

26

Я пытаюсь отредактировать JSP для проекта и получаю исключение NullPointerException где-то в JSP, когда оно запрашивается с моего сервера.

Мой веб-сервер (JBoss) сообщает об исключении, но дает мне поддельный номер строки. Он сообщает, что исключение произошло в строке 702, но мой JSP имеет длину всего 146 строк, поэтому я не могу определить, какая линия задыхается.

Каковы хорошие методы для устранения ошибок в JSP? Я использую IntelliJ 9 Ultimate в качестве своей IDE.

Благодарность

ampersandre
источник
1
можно спросить на Stackoverflow.com
Абимаран Кугатасан
1
Хорошо. Извините, я не совсем понимаю разницу между StackOverflow.com и Programmers.StackExchange.com. Я не уверен, какие вопросы принадлежат где .. Я прочитал FAQ для programmers.stackexchange, но это немного расплывчато.
амперсандр
3
На самом деле я не уверен, что это будет нормально при переполнении стека. Хотя он довольно специфичен, конкретных деталей недостаточно (из-за характера проблемы). Что вам нужно, так это методы отладки, которые должны быть в теме этого сайта.
ChrisF
Вы включили какие-либо jsps в ваш jsp? Вот так может увеличиться номер строки. Вопрос нужно перенести в stackoverflow
minusSeven
Одна из техник - просмотр файлов компиляции: codeinventions.blogspot.com/2014/08/…
Suresh Atta

Ответы:

29

Есть несколько вариантов, которые могут вам помочь:

  1. Этот ответ на самом деле объясняет, как конкретно отлаживать JSP: /programming/33739/jsp-debugging-in-intellij-idea . Я никогда не пробовал этого, поэтому я следовал следующим трем советам, когда использовал JSP, JBoss и IntelliJ ...

  2. Помните, что JSP компилируются в классы. Когда это говорит строку 702, это означает в скомпилированном классе. Если у вас есть test.jspимя класса, вероятно test_jsp, так что откройте ваш рабочий каталог JBoss и выполните поиск test_jsp.java(как только вы найдете правильный каталог, вы увидите, что структура каталога соответствует структуре вашего каталога JSP). Всякий раз, когда у меня было исключение JSP, я мог довольно легко найти строку и обычно сопоставлять ее с соответствующей строкой в ​​JSP.

  3. Точки останова прекрасно работают в классах Java, вызываемых из JSP. Так что, возможно, вы можете переместить код сценария Java, который есть в вашем JSP, в класс и отладить его с точки входа. В будущем вы можете также привыкнуть перестраивать свою логику так, чтобы большая ее часть находилась в классе, который вызывается из JSP, а JSP прост, прост и, надеюсь, не вызывает каких-либо исключений. В любом случае, это хорошая практика.

  4. Более того, удалите всю (или практически всю) логику Java в классы Java, оставив JSP для тегов HTML и JSP. Я знаю, что это не выполнимо сразу, но опять же, это хорошая идея в долгосрочной перспективе, чтобы избежать подобных проблем.

Николь
источник
2
+1 за удаление логики из JSP. Более подробно об этом можно узнать из рекомендаций JSP / Servlet с архитектурой Model 2 (MVC): oracle.com/technetwork/articles/javase/servlets-jsp-140445.html
bunglestink
Благодарность! Вариант 4 идеален, я согласен, но в этом проекте у нас нет отличного разделения вида / контроллера.
амперсандр
1
Также +1 за пункт № 2. Я понятия не имел, где найти *_jsp.javaклассы.
scottyseus
2
удаление всей логики из JSP в проекте, который имеет тысячи JSP, каждая из которых содержит несколько тысяч строк скриптлетов ... нет, спасибо, просто хочу отладить Hashtables и Vectors. FML :-( </ rant> хороший ответ, хотя
Питер Перхач
-1

Вы можете легко отлаживать JSP-страницу, как в Java-коде:
«JSP-файл аналогичен отладке Java-класса, но большинство функций (Watch, Inspect и т. Д.) Не реализованы. Единственный способ получить значения переменных это представление переменных. "
Смотрите ссылку ниже:
https://www.laliluna.de/articles/posts/debugging-jsp-java-tutorial.html

Shadab
источник
4
При ответе на старый вопрос, на который уже есть хорошо полученный ответ, добавьте больше подробностей в свой ответ, чтобы вы обратились к тому, что еще не было охвачено.
комнат