2011-08-23 65 views
3

我一直在使用net beans ide开发一个项目6个月,以开发一个电子学习web应用程序。在net beans内部一切正常工作(该项目来自现有源,我不得不修改它,我没有开发整个应用程序)我在net beans中使用apache tomcat 7.当我创建war文件并部署它时,没有任何工作。我在会话变量中收到空指针异常,就像我从未给它们一个值。我不明白是什么问题。内部净豆我使用相同的tomcat。当访问会话属性时,Tomcat和空指针异常

org.apache.jasper.JasperException: An exception occurred processing JSP page /System.jsp at line 31 

28:  Integer intObj = new Integer(project_id); 
29:  httpsession.setAttribute("project_id",intObj); 
30:  Hashtable projects=(Hashtable)session.getAttribute("projectsprofessor"); 
31:  if((Integer)session.getAttribute("professor")<=1 && 
32:   projects.get(project_id)==null) 
33:     { 
34:   request.getSession().setAttribute("errorMessage","This project belongs to another professor!"); 


Stacktrace: 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:553) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:457) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

root cause 

java.lang.NullPointerException 
    org.apache.jsp.System_jsp._jspService(System_jsp.java:149) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

这发生在我的大部分页面上。奇怪的是,某些会话变量不为空。 我不明白在哪里重点!

谢谢。

//编辑:解决问题是在源代码中,他们忘记了WEB-INF文件夹中的* .class文件,所以当我在NetBeans中清理并构建新类时,当我手动删除WEB-INF/Classes中的所有.class文件时,使用新文件

回答

7

org.apache.jasper.JasperException :在第31行处理JSP页面/System.jsp时发生异常

第31行因此如下:

if((Integer)session.getAttribute("professor")<=1 && ... 

一个NPE在这里可以在技术上只有2个原因:

  1. sessionnullgetAttribute()将失败,NPE。
  2. 属性“教授”返回nullint自动装箱的<=将与NPE失败。

第一个原因是不太可能的,因为第30行会先失败。我敢打赌,这是第二个原因。您需要先检查属性是否不是null

Integer professor = session.getAttribute("professor"); 
if ((professor == null || professor <= 1) && ... 

也许你需要去解决它在较高的水平,即确保了“教授” attribtue是从未null


无关的具体问题,Java code belongs in Java classes。它将使调试,测试和维护更容易。

+0

hm ....我在登录servlet中设置此属性。它不能为null,如果它为null,则应用程序无法继续。我刚刚发现的另一个症状是.war中的.properties文件是旧的,而不是修改过的。可能这是发生在类文件上吗?例如,以前的登录Servlet没有存储教授信息。 – nikosdi

+0

这个例外不是撒谎,也不是为了装饰而抛出。这绝对是'空'。可能你的登录servlet代码只是虚假的,或者你的classpath只是肮脏的,因为你的其他症状表明。重建和清理一切。 – BalusC

+0

谢谢!你是对的!异常不是说谎.....问题是net beans正在编译以前的文件。我不明白为什么我可能会手动创建战争。 – nikosdi