jsp和servlet出错

时间:2010-01-28 10:30:19

标签: java jsp

堆栈跟踪:

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.

1 个答案:

答案 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来访问后端数据。