从堆栈跟踪行号获取实际的jsp行号?

Arn*_*son 31 java debugging jsp tomcat

这是堆栈跟踪:

...
org.apache.jsp.showcustomer_jsp._jspService(showcustomer_jsp.java:128)
org.apache.jasper.runtime.HttpJspBase.service(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

这就是我做的:

  1. 从堆栈跟踪中获取行号,在本例中为128.
  2. 找到showcustomer_jsp.java文件(看起来不是很明显/var/run/tomcat-6/Catalina/localhost/_/org/apache/jsp).
  3. 打开它,然后转到第128行.
  4. 现在,在.jsp文件中搜索文件中第128行找到的内容_jsp.java.
  5. 繁荣!你完成了!

请问有更简单的方法吗?

Jon*_*ier 5

我在 Eclipse WTP FAQ 上找到了这个页面,它解释了如何配置 Eclipse,以便您可以单击堆栈跟踪转到生成的 java 代码。


Dav*_*itz 2

我认为你不能。JSP文件被编译成servlet,并且不直接运行。由于异常是从此 servlet 引发的,因此堆栈跟踪中的行是来自该类的行。此时 JSP 中的原始行已丢失。

通常最好避免在 jsp 中编写代码或抛出异常,并将逻辑封装在 servlet 和 JSP 标记中,并使用 JSTL 进行控制流(if、forEach 等)

  • WebLogic 在 WL10 之前的版本中有一个非常好的功能:它将在生成的 Java 文件中写入一条注释,显示源 JSP 行号。即使您的逻辑封装在标记库中,也很高兴看到哪个调用抛出了异常。 (2认同)