Comment puis-je déboguer un JSP?

26

J'essaie d'éditer une JSP pour un projet et j'obtiens une NullPointerException quelque part dans la JSP lorsqu'elle est demandée à mon serveur.

Mon serveur Web (JBoss) signale l'exception, mais il me donne un faux numéro de ligne. Il signale que l'exception s'est produite sur la ligne 702, mais mon JSP ne fait que 146 lignes, donc je ne peux pas identifier la ligne qui s'étouffe.

Quelles sont les bonnes techniques pour déboguer les erreurs dans les JSP? J'utilise IntelliJ 9 Ultimate comme mon IDE.

Merci

ampersandre
la source
1
peut être demandé sur Stackoverflow.com
Abimaran Kugathasan
1
D'accord. Désolé, je ne suis pas tout à fait clair sur la différence entre StackOverflow.com et Programmers.StackExchange.com. Je ne sais pas à quelles questions appartient. J'ai lu la FAQ pour programmers.stackexchange mais c'est un peu vague.
ampersandre
3
En fait, je ne suis pas sûr que ce serait OK sur Stack Overflow. Bien qu'il soit assez spécifique, il n'y a pas assez de détails concrets (en raison de la nature du problème). Ce que vous recherchez, ce sont des techniques de débogage qui devraient être le sujet de ce site.
ChrisF
avez-vous inclus des jsps dans votre jsp? C'est ainsi que le numéro de ligne peut augmenter. La question doit être déplacée vers stackoverflow
moinsSeven
Une technique consiste à voir les fichiers de compilation: codeinventions.blogspot.com/2014/08/…
Suresh Atta

Réponses:

29

Plusieurs options peuvent vous aider:

  1. Cette réponse explique comment déboguer spécifiquement les JSP: /programming/33739/jsp-debugging-in-intellij-idea . Je n'ai jamais essayé cela, j'ai donc suivi les trois suggestions suivantes lorsque j'utilisais JSP, JBoss et IntelliJ ...

  2. N'oubliez pas que les JSP sont compilés en classes. Quand il dit la ligne 702, cela signifie dans la classe compilée. Si c'est le cas test.jsp, le nom de la classe est probablement test_jsp, alors ouvrez votre répertoire de travail JBoss et recherchez test_jsp.java(une fois que vous avez trouvé le bon répertoire, vous verrez que la structure du répertoire correspond à la structure de votre répertoire JSP). Chaque fois que j'avais une exception JSP, je pouvais trouver la ligne assez facilement et généralement la faire correspondre à la ligne correspondante dans la JSP.

  3. Les points d'arrêt fonctionnent très bien dans les classes Java appelées à partir d'une JSP. Ainsi, vous pouvez peut-être déplacer le code de script Java que vous avez dans votre JSP dans une classe et déboguer à partir du point d'entrée. À l'avenir, vous pouvez également prendre l'habitude de réorganiser votre logique afin que la majorité de celle-ci soit dans une classe qui est appelée à partir de la JSP, et la JSP est simple, directe et, espérons-le, ne lève aucune exception. C'est de toute façon une bonne pratique.

  4. Mieux encore, supprimez toute (ou pratiquement toute) la logique Java dans les classes Java, laissant les JSP pour les balises HTML et JSP. Je sais que ce n'est pas faisable tout de suite, mais encore une fois, c'est une bonne idée à long terme pour éviter des problèmes comme celui-ci.

Nicole
la source
2
+1 pour supprimer la logique de la JSP. Vous trouverez plus d'informations à ce sujet dans les meilleures pratiques JSP / Servlet, avec l'architecture du modèle 2 (MVC): oracle.com/technetwork/articles/javase/servlets-jsp-140445.html
bunglestink le
Merci! L'option 4 est idéale, je suis d'accord, mais nous n'avons pas une grande séparation vue / contrôleur dans ce projet.
ampersandre
1
Également +1 pour l'élément n ° 2. Je ne savais pas où trouver les *_jsp.javacours.
scottyseus
2
supprimer toute logique des JSP sur un projet qui a des milliers de JSP, contenant chacun plusieurs milliers de lignes de scriptlets ... non, merci, je veux juste déboguer les tables de hachage et les vecteurs. FML :-( </rant> belle réponse cependant
Peter Perháč
-1

Vous pouvez déboguer une page JSP facilement comme un code java:
"un fichier JSP est le même que le débogage d'une classe Java, mais la plupart des fonctionnalités (Watch, Inspect, etc.) ne sont pas implémentées. La seule façon d'obtenir les valeurs des variables est la vue Variables. "
Voir le lien ci-dessous:
https://www.laliluna.de/articles/posts/debugging-jsp-java-tutorial.html

Shadab
la source
4
Lorsque vous répondez à une question plus ancienne qui a déjà une réponse bien reçue, veuillez ajouter plus de détails à votre réponse afin que vous abordiez quelque chose qui n'était pas déjà couvert.
moucher