7

私は最初のアプリをGoogle App Engine作成しようとしています。セッションを維持しようとしています。送信時にログインページを作成しservlet、サーブレットを呼び出してユーザーを検証し、次のコードを使用して新しいセッションを作成します。

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

サーブレットを呼び出した後のログインページは、あるページにリダイレクトされます。つまり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が発生equalsします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

セッションの属性を確認する前に、セッション自体を確認する必要があります。

だから、最初に:

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

そして、_

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

より良い解決策は、両方を1行にまとめることです。

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

属性が存在しない場合はnullを返します...したがって、nullでequalsを呼び出そうとすると、NullPointerExceptionが発生します。

明らかに、(上記のように)コンテンツを検証する前に、属性を確認することを強くお勧めします。

于 2016-11-14T17:28:38.267 に答える
0

それは私のために働いた。これを試して

String userName;
    userName = (String)session.getAttribute("uname");   
if (session.getAttribute("userName").equals(""))
于 2018-11-02T18:36:39.973 に答える