Jak mogę debugować plik JSP?


26

Próbuję edytować plik JSP dla projektu i otrzymuję wyjątek NullPointerException gdzieś na stronie JSP, gdy zostanie o to poproszony z mojego serwera.

Mój serwer WWW (JBoss) zgłasza wyjątek, ale podaje mi fałszywy numer linii. Informuje, że wyjątek wystąpił w linii 702, ale mój plik JSP ma tylko 146 linii, więc nie jestem w stanie zidentyfikować, która linia się dusi.

Jakie są dobre techniki debugowania błędów na stronach JSP? Używam IntelliJ 9 Ultimate jako mojego IDE.

Dzięki


1
można zapytać na
Stackoverflow.com

1
Dobrze. Przepraszam, nie do końca rozumiem różnicę między StackOverflow.com a Programmers.StackExchange.com. Nie jestem pewien, które pytania należą. Gdzie przeczytałem FAQ dla programistów.stackexchange, ale jest to trochę niejasne.
ampersandre

3
Właściwie nie jestem pewien, czy to będzie OK w przypadku przepełnienia stosu. Chociaż jest dość specyficzny, nie ma wystarczającej ilości konkretnych szczegółów (ze względu na charakter problemu). To, czego szukasz, to techniki debugowania, które powinny być na temat tej witryny.
ChrisF

czy umieściłeś jsp w swoim jsp? W ten sposób może wzrosnąć numer linii. Pytanie należy przenieść do stackoverflow
minusSeven

Jedną z technik jest oglądanie plików kompilacji: codeinventions.blogspot.com/2014/08/…
Suresh Atta

Odpowiedzi:


29

Istnieje kilka opcji, które mogą ci pomóc:

  1. Ta odpowiedź faktycznie wyjaśnia, jak konkretnie debugować strony JSP: /programming/33739/jsp-debugging-in-intellij-idea . Nigdy tego nie próbowałem, więc zastosowałem JSP, JBoss i IntelliJ zgodnie z następnymi trzema sugestiami ...

  2. Pamiętaj, że strony JSP są kompilowane do klas. Kiedy mówi wiersz 702, oznacza to w skompilowanej klasie. Jeśli tak test.jsp, prawdopodobnie jest to nazwa klasy test_jsp, więc otwórz katalog roboczy JBoss i wyszukaj test_jsp.java(gdy znajdziesz odpowiedni katalog, zobaczysz, że struktura katalogów odpowiada strukturze katalogów JSP). Ilekroć miałem wyjątek JSP, mogłem dość łatwo znaleźć linię i zwykle dopasować ją do odpowiedniej linii w JSP.

  3. Punkty przerwania działają dobrze w klasach Java wywoływanych z JSP. Być może możesz przenieść kod skryptu Java, który masz na swojej stronie JSP, do klasy i debugować od punktu wejścia. W przyszłości możesz również przyzwyczaić się do zmiany układu logiki, tak aby większość z nich należała do klasy wywoływanej z JSP, a JSP jest prosta, bezpośrednia i, miejmy nadzieję, nie rzuca żadnych wyjątków. To i tak dobra praktyka.

  4. Jeszcze lepiej, usuń całą (lub praktycznie całą) logikę Java do klas Java, pozostawiając strony JSP dla tagów HTML i JSP. Wiem, że nie jest to od razu możliwe, ale znowu dobrym pomysłem jest długoterminowe unikanie takich problemów.


2
+1 za usunięcie logiki z strony JSP. Więcej na ten temat można znaleźć w najlepszych praktykach JSP / Servlet z architekturą Modelu 2 (MVC): oracle.com/technetwork/articles/javase/servlets-jsp-140445.html
bunglestink

Dzięki! Zgadzam się, że opcja 4 jest idealna, ale w tym projekcie nie mamy doskonałej separacji widoków / kontrolerów.
ampersandre

1
Również +1 za przedmiot nr 2. Nie miałem pojęcia, gdzie znaleźć *_jsp.javazajęcia.
scottyseus

2
usuwając całą logikę ze stron JSP w projekcie, który ma tysiące stron JSP, z których każda zawiera kilka tysięcy wierszy skryptletów ... nie, dziękuję, chcę po prostu debugować Tabele skrótów i Wektory. FML :-( </rant> ładna odpowiedź
Peter Perháč,

-1

Możesz łatwo debugować stronę JSP, podobnie jak kod java:
„plik JSP jest taki sam jak debugowanie klasy Java, ale większość funkcji (Watch, Inspect itp.) Nie jest zaimplementowana. Jedyny sposób na uzyskanie wartości zmiennych to widok Zmienne ”.
Zobacz poniższy link:
https://www.laliluna.de/articles/posts/debugging-jsp-java-tutorial.html


4
Odpowiadając na starsze pytanie, które ma już dobrze odebraną odpowiedź, dodaj więcej szczegółów do swojej odpowiedzi, aby zająć się czymś, co nie zostało jeszcze uwzględnione.
komar
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.