2010-01-28 64 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來訪問後端數據。