访问会话属性时Tomcat和空指针异常



我已经使用net beans ide在一个项目上工作了6个月,以开发一个电子学习web应用程序。在net beans内部一切都很好。(该项目来自现有的资源,我必须修改它,我没有开发整个应用程序)我使用apache tomcat 7 in net beans。当我创建war文件并部署它时,没有任何工作。我得到空指针异常在我的会话变量,就像我从来没有给他们一个值。我不明白是什么问题。在net beans中,我使用相同的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中清理和构建时,新的类没有编译,net beans使用了WEB-INF文件夹中的以前的源代码。当我在下次清理构建中手动删除WEB-INF/Classes中的所有.class文件时,使用新文件

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

因此,

第31行如下:

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

从技术上讲,这里的NPE只能有两个原因:

  1. sessionnull, getAttribute()为NPE失效
  2. 属性"教授"返回nullint自动装箱<=将失败与NPE。

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

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

也许你需要在更高的层次上解决它,即确保"教授"属性是而不是 null


与具体问题无关,Java代码属于Java类。

最新更新