2011-06-22 115 views
2

我不知道爲什麼我的session.getAttribute(「用戶」)返回非空,但屬性值在幾分鐘後retun null,它可能是由於會話超時,但爲什麼只有屬性值返回null,但其他會話仍然存在甚至session.getAttribute(「user」)返回非空。JSP Session.getAttribute()返回null

這是我的網頁流量,用戶登錄

LoginServlet

User s = new User(); 
s.retriveuser(); 
session.setAttribute("balance", s.getBalance()); 
session.setAttribute("username", s.getUsername()); 
session.setAttribute("user", s); 

我的個人資料

 User user = new User(); 
     if (session.getAttribute("user") == null) { 
      response.sendRedirect("login.jsp"); 
     } else { 
      user = (model.User) session.getAttribute("user"); 
     } 

<tr> 
     <th>Gender:</th> 
       <td><%=user.getGender()%></td> 
</tr> 
<tr> 
     <th>Name:</th> 
     <td><%=user.getName()%></td> 
</tr> 

它可以顯示在用戶登錄的一切工作正常,幾分鐘後性別名稱...將顯示爲空而不是重定向到登錄頁面。而我的餘額和用戶名會話仍在那裏。 設置其他用戶之前=(用戶)session.getAttribute(「用戶」);我正在使用

<jsp:useBean id="user" class="model.User" scope="session" /> 
+1

我沒有同樣的問題。但是,我的問題是相似的。我在表單中設置了id屬性(id =「name」)。我將這個表單提交給一個servlet。 servlet接受id並使用request.getParameter(「name」)獲取參數。該參數設置爲會話屬性。當我嘗試訪問這個,最終使用JSP的屬性,我得到一個null。爲什麼? –

回答

2

我不想隨時測試。但我猜測user對象不會在會話中創建,因此不會設置爲null

if (session.getAttribute("user") == null) { 
      response.sendRedirect("login.jsp"); 
      user=null; 
} else { 
    user = (model.User) session.getAttribute("user"); 
} 

應該解決你的問題。

編輯此外,簡單的打印user.Gender()會在這種情況下返回Null,所以你最好從會話變量打印出來直。

+0

你能告訴我爲什麼session.getAttribute(「someId」);在JSP中可能會返回null?也就是說,當你得到這個錯誤時,這個問題的原因是什麼? –

+0

原因通常是因爲會話通過註銷或超時而失效。可能還有另外一個原因,那就是'someid'對象首先在會話中沒有被設置。 –

+0

那麼,我該如何解決這件事?我嘗試使用getSession(true)並失敗。我猜我所有的代碼都很好。不知道爲什麼我仍然得到這個空。請參閱下面的評論。謝謝。 –

0

你在bean代碼中使用了什麼?你確定你已經創建了一個空構造函數,getters,setter,java類實現了Serializable嗎?然後,在jsp頁面上,最好使用<jsp:setProperty name="the_same_you_used_in_bean_id" property="*"/>。如果你想了解更多有關豆腐的信息,請告訴我!

1

我不知道爲什麼我的session.getAttribute(「用戶」)返回不爲空,但幾分鐘

確定後屬性值retun空,所以屬性「用戶」變爲零。

可能由於會話超時,但爲什麼只有屬性值返回空但其他會話仍然存在,即使session.getAttribute(「用戶」)返回不爲空。

Que?那麼屬性「user」不是空的?

只有兩種可能改變會話屬性:

  1. 如果您的會話超時:所有屬性由容器在同一時間被清除。
  2. 如果您的會話沒有超時,並且只有一個屬性被清除:一個屬性被程序清除。

特別注意事項A:從javadoc中獲得HttpServletResponse.sendRedirect:使用此方法後,響應應被視爲已提交且不應寫入。上面的代碼違反了這個規定。

額外注B:

User user = new User(); 

你只是一個垃圾新的空用戶對象填充它。避免這種情況 - 這是一個等待發生的錯誤。只將變量設置爲有用/有效值。 :)