java tomcat:java.lang.NullPointerException

时间:2012-05-17 10:51:36

标签: java jsp

你好,我有一个工作高效的webapp的开发版本让我很头疼。当我登录时,我收到以下错误,而admin.jsp正在尝试显示文件夹结构。

    org.apache.jasper.JasperException: Exception in JSP: /admin/admin.jsp:133

130:    GenDisplay display = null;
131:    if(null==oldDisplay || true==oldDisplay.checkIsOld()) {
132:        display = new GenDisplay(oldDisplay);
133:        display.genTree(((CompanySession)ppa).getRootOrdner(), ((CompanySession)ppa).getRootType(), user.getUID(), out);
134:        ((CompanySession)ppa).setGenDisplay(display);   
135:    } else {
136:        display = oldDisplay;


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

root cause

java.lang.NullPointerException
    ppa.admin.GenDisplay.getKey(GenDisplay.java:185)
    ppa.admin.GenDisplay.isOpen(GenDisplay.java:161)
    ppa.admin.GenDisplay.genSubTree(GenDisplay.java:49)
    ppa.admin.GenDisplay.genSubTree(GenDisplay.java:57)
    ppa.admin.GenDisplay.genSubTree(GenDisplay.java:57)
    ppa.admin.GenDisplay.genSubTree(GenDisplay.java:57)
    ppa.admin.GenDisplay.genTree(GenDisplay.java:42)
    org.apache.jsp.admin.admin_jsp._jspService(admin_jsp.java:606)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

这是围绕第606行代码块的admin_jsp.java生成错误:

GenDisplay oldDisplay = ((CompanySession)ppa).getGenDisplay();
    GenDisplay display = null;
    if(null==oldDisplay || true==oldDisplay.checkIsOld()) {
        display = new GenDisplay(oldDisplay);
        display.genTree(((CompanySession)ppa).getRootOrdner(), ((CompanySession)ppa).getRootType(), user.getUID(), out);
        ((CompanySession)ppa).setGenDisplay(display);   
    } else {
        display = oldDisplay;
    }
    //out.println(((CompanySession)ppa).getRootOrdner());
    //
    int currentOrdner = ((CompanySession)ppa).getRootOrdner();
    int currentOrdnerType = ((CompanySession)ppa).getRootType();
    if(null!=oldDisplay) {
    currentOrdner = oldDisplay.getCurrentOrdner();
    currentOrdnerType = oldDisplay.getCurrentOrdnerType();
    } else {
        display.openOrdner(((CompanySession)ppa).getRootOrdner(), ((CompanySession)ppa).getRootType());
}

所以我将传递给display.genTree()的变量之一排序为null,这就是Nul​​lPointerException的原因。这个开发完全是从工作生产版本复制的,为什么在这里抛出错误而不是生产版本?我很困惑。有人有想法吗?提前谢谢!

p.s:我比较了java版,tomcat版,编译版。我重新建立了两个tomcats的相同设置。我比较了mysql服务器版本和设置。它们几乎是相同的版本和设置。与所涉及的软件没有重大的版本差异。我尝试了更新版本的tomcat(6,7)并且遇到了不同的错误,所以这让我更加困惑。我真的需要帮助,因为我没有编写webapp,而且我是java的新手。

1 个答案:

答案 0 :(得分:0)

问题不在于生成的servlet代码。 NPE发生在ppa.admin.GenDisplay.getKey(GenDisplay.java:185中,变量(null)被解除引用,因此您需要查看第185行中发生的情况并找出变量应该设置的位置。 追溯这一点将显示开发和生产的差异(例如:环境变量或文件系统权限)。