2014-10-02 167 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”)'返回'null'?尝试用'== null'替换'.equals(null)'。它可以防止你出现'NullPointerException'。 – 2014-10-02 11:00:00

+2

你不应该'抓住'未检查的例外 – 2014-10-02 11:01:05

+1

@ kocko未经检查的例外是这样的,因为你不需要捕捉它们。任何应该可靠的程序都需要处理意外问题,这意味着捕获RuntimeException。 – 2014-10-02 11:07:50

回答

0

这里是你的代码的问题:

  • 一个NullPointerException可如果request == null抛出但是这不太可能。
  • 要检查currentSession.getAttribute的空值,请使用==。不要调用方法equals为您的属性可能是null,因此你会被null对象上调用equals抛出NPE
  • 而且kocko提到,在许多情况下捕获RuntimeException是不好的做法 - 特别是NullPointerException s。在这种情况下,您应该删除try/catch块。
+1

我同意在这个特定情况下删除try/catch,但是说“捕获RuntimeExceptions是不好的做法”有点过于笼统。编写依赖捕获这些代码而不是检查它的输入的代码在大多数情况下是不好的做法。 – 2014-10-02 11:11:58

+0

@SamuelÅslund你是对的 - 有点过于激进。一些'RuntimeException'需要被捕获。定影。 – Mena 2014-10-02 11:51:23

0

currentsession为null,则currentsession.getAttribute("current-emailID")将抛出一个NullPointerException

currentsession不为空,那么currentsession.getAttribute("current-emailID")为空或不为空,在您测试这两种情况下应该使用== null.equals(null)

所以你所有的测试应该是(currentsession!=null) && (currentsession.getAttribute("current-emailID")!=null)

通过这种方式当currentsession为null时,你可以防止第二个co被执行的事件,然后抛出异常。