2010-01-28 69 views
0

堆栈跟踪:错误的jsp和servlet

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

有问题吗?这可能是原因:(Report_jsp.java:79)你应该在生成的Java类中调查这一行,看起来你正在使用一个空的对象。 – dawez 2010-01-28 10:38:47

+0

给自己一个很好的酒吧'老式的空指针问题! – 2010-01-28 10:39:37

回答

1

的一点是:刚读的堆栈跟踪,并据此定出空指针。

堆栈跟踪的第一行应该包含导致它的源代码的行号。打开编译的源代码Report.jsp并转到该行。它应该看起来像:

someObject.doSomething(); 

尤其是看那里的点运算符.用于访问或调用一些对象实例。在这样的代码行上的NullPointerException意味着someObject实际上是null。它只是指没有什么。你不能访问它,也不能调用它的任何方法。

所有你需要做的修复NullPointerException是确保someObject空:

if (someObject == null) { 
    someObject = new SomeObject(); 
} 
someObject.doSomething(); 

或仅做访问/调用,如果someObjectnull

if (someObject != null) { 
    someObject.doSomething(); 
} 

这就是说,作为标签库和EL通常是NPE安全的,这表明您使用old fashioned scriptlets写JSP文件中的原始的Java代码。我强烈建议不要这么做,只是为了在真正的Java类中编写Java代码并使用taglib来控制页面流和输出,并使用EL来访问后端数据。