0

您好,我有一个工作高效的 web 应用程序的开发版本,这让我很头疼。当我登录时,我收到以下错误,而 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,这就是 NullPointerException 的原因。这个开发完全是从工作生产版本复制的,为什么在这里抛出错误而不是在生产版本上?我很困惑。有人有想法吗?提前致谢!

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

4

1 回答 1

0

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

于 2012-05-17T11:15:15.337 回答