【问题标题】:If session exist or not会话是否存在
【发布时间】:2012-08-09 04:34:30
【问题描述】:

我正在尝试在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 这样的帖子,它给了我这个解决方案,我不知道我做错了什么。

【问题讨论】:

    标签: java google-app-engine jsp session


    【解决方案1】:

    我记得

    session.getAttribute("xyz")
    

    如果属性不存在则返回null... 所以发生 NullPointerException 是因为您尝试在 null 上调用 equals

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

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

    【讨论】:

    • thanx 成功了,但这告诉我一个不同的故事>>stackoverflow.com/questions/2818251/…
    • 嗯..当用户在您的服务器上请求一个站点时,即使您没有手动调用getSession(&lt;boolean&gt;),也会自动创建一个会话对象。但是当然这个“default-session”是空的,意味着它没有属性,所以getAttribute(&lt;String&gt;)返回null
    【解决方案2】:
     <%  
         if (session.getAttribute("Username") != null) {  
             …
         }
      %>
    

    【讨论】:

      【解决方案3】:

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

      所以,首先

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

      然后然后

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

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

      if(session != null && session.getAttribute("xyz") != null) 
      

      如果属性不存在则返回 null...所以你的 发生 NullPointerException 是因为您尝试在 null 上调用 equals。

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

      【讨论】:

        【解决方案4】:

        它对我有用。试试这个

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

        【讨论】:

          猜你喜欢
          • 2011-12-29
          • 2011-04-02
          • 2018-04-04
          • 2013-02-26
          • 2013-05-22
          • 1970-01-01
          • 2014-06-21
          • 2011-02-18
          • 2012-10-03
          相关资源
          最近更新 更多