如果会话存在与否

Mua*_*ani 7 java session google-app-engine jsp

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

void createSession(String Username) {
        getThreadLocalRequest().getSession(true).setAttribute("Username", Username);
    }
Run Code Online (Sandbox Code Playgroud)

调用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>
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是当我在abc.jsp 没有创建会话的情况下访问时,它会在此if (session.getAttribute("Username").equals(""))行中抛出异常,我不知道为什么请帮助我.我认为它不会检测会话是否存在.但我看了这么多线程像这样它给了我这个解决方案,我不知道我在做什么错.

Pr0*_*m3r 14

就目前我所记得的

session.getAttribute("xyz")
Run Code Online (Sandbox Code Playgroud)

null如果属性不存在则返回...因此您的NullPointerException因为尝试调用equals而发生null.

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

if (session.getAttribute("Username") == null || session.getAttribute("Username").equals(""))
Run Code Online (Sandbox Code Playgroud)