如果会话存在与否

时间:2012-08-12 21:20:09

标签: java google-app-engine jsp session

我正在尝试在Google App Engine上编写我的第一个应用程序,我正在尝试维护会话,我在提交时创建了一个登录页面,它调用了servlet,servlet验证了用户并创建了使用以下代码的新会话。

void createSession(String Username) {
        getThreadLocalRequest().getSession(true).setAttribute("Username", Username);
    }
调用servlet后,

登录页面重定向到某个页面,即abc.jsp,我的abc.jsp页面包含

<body><%
        try {
            if (request.getSession(false) == null) {

            } else {
    %>
    Welcome to
    <%=session.getAttribute("Username")%>
    <%
        if (session.getAttribute("Username").equals("")) {
    %>
    <a href="login.jsp"><b>Login </b></a>
    <%
        } else {
    %>
    <a href="logout.jsp"><b>Logout</b></a>
    <%
        }
            }
        } catch (Exception e) {

        }
    %></body>

它工作正常,但是当我访问abc.jsp 而没有创建会话时,它会在此if (session.getAttribute("Username").equals(""))行引发异常,我不知道为什么要帮助我。我认为它不会检测会话是否存在。但我读了很多线程,比如this它给了我这个解决方案,我不知道我做错了什么。

4 个答案:

答案 0 :(得分:13)

据我记得

session.getAttribute("xyz")
如果属性不存在,

返回null ... 所以你的NullPointerException发生是因为你试图在equals上调用null

我建议在验证其内容之前检查您的属性:

if (session.getAttribute("Username") == null || session.getAttribute("Username").equals(""))

答案 1 :(得分:0)

 <%  
     if (session.getAttribute("Username") != null) {  
         …
     }
  %>

答案 2 :(得分:0)

在检查会话的属性之前,您必须查看会话本身。

所以,第一次

HttpSession session = request.getSession(false);
if(session != null){...}

然后

if(session.getAttribute("xyz") != null){...}

更好的解决方案可能在一行中

if(session != null && session.getAttribute("xyz") != null) 
  如果属性不存在,

返回null ...所以你的   发生NullPointerException是因为您尝试在null上调用equals。

显然,在验证其内容(如上所述)之前,严格建议 检查您的属性

答案 3 :(得分:0)

对我有用。试试这个

String userName;
    userName = (String)session.getAttribute("uname");   
if (session.getAttribute("userName").equals(""))