Tomcat и исключение нулевого указателя при доступе к атрибутам сеанса - PullRequest
3 голосов
/ 23 августа 2011

Я работал над проектом в течение 6 месяцев, используя net bean ide для разработки веб-приложения электронного обучения. Все работало нормально внутри net bean. (Проект был из существующих источников, и мне пришлось его изменять, я не разрабатывал все приложение) Я использовал Apache Tomcat 7 в Net Beans. Когда я создал файл war и развернул его, ничего не получалось. Я получаю исключения с нулевым указателем в моих переменных сеанса, как будто я никогда не даю им значение. Я не могу понять в чем проблема. Внутри чистых бобов я использую того же кота.

    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)

Это происходит с большинством моих страниц. Странно, что некоторые переменные сеанса не равны нулю. Я не могу понять, на чем сосредоточиться!

спасибо.

// Редактировать: Решено! Проблема заключалась в том, что в полученных источниках они забыли файлы * .class в папке WEB-INF, поэтому при очистке и сборке в NetBeans новые классы не компилировались, а сетевые компоненты использовались предыдущие источники из папки WEB-INF. Когда я удалял вручную все файлы .class из WEB-INF / Classes в следующей чистой сборке, использовались новые файлы

1 Ответ

7 голосов
/ 23 августа 2011

org.apache.jasper.JasperException: произошло исключение при обработке страницы JSP /System.jsp в строке 31

Строка 31, таким образом, выглядит следующим образом:

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

У NPE здесь технически может быть только 2 причины:

  1. session - это null, и getAttribute() завершится неудачей с NPE.
  2. Атрибут «профессор» вернул null, а автоматическая блокировка int для <= завершится с NPE.

Первая причина маловероятна, так как в противном случае строка 30 потерпела бы неудачу первой. Держу пари, что это вторая причина. Сначала необходимо проверить, не является ли атрибут null.

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

Возможно, вам нужно решить ее на более высоком уровне, то есть убедиться, что атрибут "профессор" равен никогда null.


Не связано с конкретной проблемой, Java-код принадлежит классам Java . Это упростит отладку, тестирование и обслуживание, а также многое другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...