7

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

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("")),我不知道为什么要帮助我。我认为它不会检测会话是否存在。但是我已经阅读了很多这样的线程它给了我这个解决方案,我不知道我做错了什么。

4

4 回答 4

16

就目前我所记得的

session.getAttribute("xyz")

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

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

if (session.getAttribute("Username") == null || session.getAttribute("Username").equals(""))
于 2012-08-12T21:46:11.840 回答
0
 <%  
     if (session.getAttribute("Username") != null) {  
         …
     }
  %>
于 2012-08-13T05:32:31.483 回答
0

它对我有用。尝试这个

String userName;
    userName = (String)session.getAttribute("uname");   
if (session.getAttribute("userName").equals(""))
于 2018-11-02T18:36:39.973 回答
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。

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

于 2016-11-14T17:28:38.267 回答