堆栈跟踪:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
java.lang.NullPointerException
org.apache.jsp.jsp.Report_jsp._jspService(Report_jsp.java:79)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.
答案 0 :(得分:1)
要点:只需读取堆栈跟踪并相应地修复空指针。
stacktrace的第一行应该包含引起它的源代码的行号。打开已编译的Report.jsp
源代码并转到该行。它应该看起来像:
someObject.doSomething();
特别是在那里查看点运算符.
用于访问或调用某个对象实例的位置。此类代码行上的NullPointerException
表示someObject
实际上是null
。它只是指 nothing 。您无法访问它,也无法调用任何方法。
修复NullPointerException
所需要做的就是确保someObject
不 null:
if (someObject == null) {
someObject = new SomeObject();
}
someObject.doSomething();
或者,如果someObject
不是null
,则只进行访问/调用。
if (someObject != null) {
someObject.doSomething();
}
也就是说,由于taglib和EL通常是NPE安全的,这表明您使用old fashioned scriptlets在JSP文件中编写了原始Java代码。我强烈建议不要这样做,只是在真正的Java类中编写Java代码并使用taglibs来控制页面流和输出,并使用EL来访问后端数据。