Como posso depurar um JSP?


26

Estou tentando editar um JSP para um projeto e estou recebendo uma NullPointerException em algum lugar do JSP quando solicitado do meu servidor.

Meu servidor web (JBoss) está relatando a exceção, mas está me dando um número de linha falso. Está relatando que a exceção aconteceu na linha 702, mas meu JSP tem apenas 146 linhas, portanto, não consigo identificar qual linha está sufocada.

Quais são algumas boas técnicas para depurar erros em JSPs? Estou usando o IntelliJ 9 Ultimate como meu IDE.

obrigado


1
pode ser solicitado em Stackoverflow.com
Abimaran Kugathasan

1
Está bem. Desculpe, não estou totalmente claro sobre a diferença entre StackOverflow.com e Programmers.StackExchange.com. Não tenho certeza de quais perguntas pertencem aonde. Li as perguntas frequentes para programmers.stackexchange, mas é um pouco vago.
ampersandre

3
Na verdade, não tenho certeza de que isso seria bom no Stack Overflow. Embora seja bastante específico, não há detalhes concretos suficientes (devido à natureza do problema). O que você procura são as técnicas de depuração, que devem estar no tópico deste site.
ChrisF

você incluiu algum jsps dentro do seu jsp? É assim que o número da linha pode aumentar. Necessidade questão a ser movido para stackoverflow
minusSeven

Uma técnica é ver arquivos de compilação: codeinventions.blogspot.com/2014/08/…
Suresh Atta

Respostas:


29

Existem várias opções que podem ajudá-lo:

  1. Esta resposta realmente explica como depurar JSPs especificamente: /programming/33739/jsp-debugging-in-intellij-idea . Eu nunca tentei isso, então segui as próximas três sugestões quando estava usando JSP, JBoss e IntelliJ ...

  2. Lembre-se de que JSPs são compilados em classes. Quando diz a linha 702, significa na classe compilada. Se você tiver test.jsp, o nome da classe provavelmente é test_jsp, então abra seu diretório de trabalho do JBoss e procure test_jsp.java(depois de encontrar o diretório certo, você verá que a estrutura de diretórios corresponde à sua estrutura de diretórios JSP). Sempre que eu tinha uma exceção JSP, era possível encontrar a linha com bastante facilidade e, geralmente, correspondê-la à linha correspondente no JSP.

  3. Os pontos de interrupção funcionam bem em classes Java chamadas de um JSP. Portanto, talvez você possa mover o código de script Java que você possui em seu JSP para uma classe e depurar a partir do ponto de entrada. No futuro, você também poderá criar o hábito de reorganizar sua lógica, para que a maioria esteja em uma classe que está sendo chamada pelo JSP, e o JSP é simples, direto e, esperançosamente, não gera exceções. Esta é uma boa prática de qualquer maneira.

  4. Melhor ainda, remova toda (ou praticamente toda) a lógica Java nas classes Java, deixando JSPs para tags HTML e JSP. Sei que isso não é viável imediatamente, mas, novamente, é uma boa idéia, a longo prazo, evitar problemas como esse.


2
+1 para remover a lógica do JSP. Mais sobre isso pode ser visto no JSP / Servlet melhores práticas, com o Modelo 2 arquitetura (MVC): oracle.com/technetwork/articles/javase/servlets-jsp-140445.html
bunglestink

Obrigado! A opção 4 é ideal, concordo, mas não temos uma excelente separação de visualização / controlador neste projeto.
ampersandre

1
Também +1 para o item 2. Eu não tinha ideia de onde encontrar as *_jsp.javaaulas.
scottyseus 28/09/2015

2
removendo toda a lógica das JSPs em um projeto que possui milhares de JSPs, cada uma contendo vários milhares de linhas de scriptlets ... não, obrigado, só quero depurar as Hashtables e Vectors. FML :-( boa resposta embora
Peter Perháč

-1

Você pode depurar uma página JSP facilmente como um código java:
"um arquivo JSP é o mesmo que depurar uma classe Java, mas a maioria dos recursos (Watch, Inspecionar etc.) não é implementada. A única maneira de obter os valores das variáveis é a visualização Variáveis ​​".
Veja o link abaixo:
https://www.laliluna.de/articles/posts/debugging-jsp-java-tutorial.html


4
Ao responder a uma pergunta mais antiga que já tenha uma resposta bem recebida, adicione mais detalhes à sua resposta para abordar algo que ainda não foi abordado.
Gnat
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.