2014-10-02 2 views
0

Я хочу проверить, существует или нет сессия на веб-странице, однако при этом, если сеанс не существует, компилятор получает NullPointerException. Как проверить сеанс, чтобы он не выдавал это исключение? Рассмотрим, сеанс не существуетКак проверить, существует ли сеанс?

try 
    { 
     HttpSession currentsession=request.getSession(false); 
     if(currentsession==null) || currentsession.getAttribute("current-emailID").equals(null)) 
     { 
      //Code to redirect to default page 
     } 
    } 
    catch(NullPointerException npe) 
    { 
      //Code to redirect to default page 
    } 
+1

Не является ли 'currentsession.getAttribute (« current-emailID »)' return 'null'? Попробуйте заменить '.equals (null)' на '== null'. Это предотвращает вас от «NullPointerException». –

+2

Вы не должны «улавливать» исключенные исключения –

+1

@kocko unchecked исключения - это потому, что вы не пытаетесь их поймать. Любая программа, которая должна быть надежной, должна будет обрабатывать неожиданные проблемы, а это означает, что вы будете использовать RuntimeExceptions. –

ответ

0

Вот проблемы с вашим кодом:

  • NullPointerException может быть выброшен, если request == null, но это очень маловероятно.
  • Для проверки нулей с помощью currentSession.getAttribute используйте ==. У не вызвать метод equals, как ваш атрибут может быть null, следовательно, вы бы бросить NPE, вызывая equals на null объекта.
  • И как kocko упоминает, ловя RuntimeException - это плохая практика во многих случаях - конкретно NullPointerException s. В этом случае вы должны удалить блок try/catch.
+1

Я согласен с удалением try/catch в этом конкретном случае, но говоря, что «catching RuntimeExceptions - это плохая практика» - это слишком широкое обобщение. Написание кода, который зависит от того, чтобы поймать их, а не проверять его входные данные, будет в большинстве случаев плохой практикой. –

+0

@ Сэмюэль Ослунд, вы правы - это слишком радикально. Некоторое 'RuntimeException' нужно поймать. Закрепление. – Mena

0

когда currentsession имеет нулевое значение, то currentsession.getAttribute("current-emailID") бросит NullPointerException,

когда currentsession не равно нулю, то currentsession.getAttribute("current-emailID") равно нулю или не равно нулю, в любом случае вы тестирования следует использовать не == null.equals(null)

, так что во всех ваших тестах должно быть (currentsession!=null) && (currentsession.getAttribute("current-emailID")!=null)

таким образом, когда значение тока равно нулю, вы предотвращаете второе совпадение из-за того, что он был исполнен, а затем выбрасывается исключение.

Смежные вопросы