【问题标题】:Tomcat and null pointer exception when accesing session attributes访问会话属性时的Tomcat和空指针异常
【发布时间】:2011-11-02 02:24:20
【问题描述】:

我一直在使用 net beans ide 开发一个 elearning web 应用程序的项目 6 个月。在 net beans 内一切正常。(该项目来自现有资源,我必须修改它,我没有开发整个应用程序)我在net beans中使用apache tomcat 7。当我创建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 文件夹中的先前资源。当我在下一个 clean-build 中手动删除 WEB-INF/Classes 中的所有 .class 文件时,使用了新文件

【问题讨论】:

    标签: java apache jsp tomcat netbeans


    【解决方案1】:

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

    因此第 31 行如下:

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

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

    1. sessionnullgetAttribute() 将因 NPE 而失败。
    2. 属性“professor”返回nullint 自动装箱&lt;= 将因 NPE 而失败。

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

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

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


    与具体问题无关Java code belongs in Java classes。它将使调试、测试和维护等变得更加容易。

    【讨论】:

    • hm....我在登录 servlet 中设置此属性。它不能为 null,如果为 null,则应用程序无法继续。我刚刚发现的另一个症状是 .properties 文件.war 是旧的而不是修改的。也许这发生在类文件上?例如以前的登录 Servlet 没有存储教授信息。
    • 异常不是说谎,也不是为了装饰而抛出的。绝对是null。可能您的登录 servlet 代码只是伪造的,或者您的类路径很脏,正如您的其他症状所表明的那样。重建和清理一切。
    • 谢谢你!你是对的!异常没有说谎.....问题是net beans正在编译以前的文件。我不明白为什么我可能会手动创建战争。跨度>
    • Eclipse 提供“构建”和“清理”选项。也许你需要先对 Netbeans 做同样的事情。
    • 好的,我修好了!我真的很感谢你!可能是网豆的bug吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2021-01-06
    相关资源
    最近更新 更多