[英]Tomcat and null pointer exception when accesing session attributes
我一直在使用net beans ide开发一个项目6个月,以便开发一个电子学习web应用程序。所有东西在net beans中运行良好。(该项目来自现有的资源,我不得不修改它,我没有开发整个应用程序我在net beans中使用apache tomcat 7.当我创建war文件并部署它没什么工作。我在我的会话变量中得到空指针异常,就像我从来没有给它们一个值。我无法理解是什么问题.Iinside 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 bean使用了以前的来自WEB-INF文件夹的源。当我手动删除WEB-INF / Classes中的所有.class文件时,在下一个clean-build中使用了新文件
org.apache.jasper.JasperException:在第31行处理JSP页面/System.jsp时发生异常
因此,第31行如下:
if((Integer)session.getAttribute("professor")<=1 && ...
这里的NPE在技术上只能有两个原因:
session
为null
, getAttribute()
将因NPE而失败。 null
,而<=
的int
autoboxing将因NPE而失败。 第一个原因不太可能,因为第30行将首先失败。 我敢打赌,这是第二个原因。 您需要先检查该属性是否为null
。
Integer professor = session.getAttribute("professor");
if ((professor == null || professor <= 1) && ...
也许你需要在更高层次上解决它,即确保“教授”attribtue 永远不会为 null
。
与具体问题无关 , Java代码属于Java类 。 它将使调试,测试和维护变得更加容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.