你好,我有一个工作高效的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,这就是NullPointerException的原因。这个开发完全是从工作生产版本复制的,为什么在这里抛出错误而不是生产版本?我很困惑。有人有想法吗?提前谢谢!
p.s:我比较了java版,tomcat版,编译版。我重新建立了两个tomcats的相同设置。我比较了mysql服务器版本和设置。它们几乎是相同的版本和设置。与所涉及的软件没有重大的版本差异。我尝试了更新版本的tomcat(6,7)并且遇到了不同的错误,所以这让我更加困惑。我真的需要帮助,因为我没有编写webapp,而且我是java的新手。
答案 0 :(得分:0)
问题不在于生成的servlet代码。 NPE发生在ppa.admin.GenDisplay.getKey(GenDisplay.java:185
中,变量(null)被解除引用,因此您需要查看第185行中发生的情况并找出变量应该设置的位置。
追溯这一点将显示开发和生产的差异(例如:环境变量或文件系统权限)。