2011-04-23 117 views
32

所以我試圖讓servlet在請求這個servlet的時候向用戶的session中添加一個Java對象。但是,在servlet重定向到下一頁並嘗試檢索該對象之後,我得到了一個null對象。如何在HttpSession中存儲Java對象?

這裏是我做的對象添加到HttpSession(在servlet):

request.setAttribute("object", obj); 

然後我嘗試找回它(在JSP中):

Object obj = request.getAttribute("object"); 

所以我怎麼會obj不是null?

更新: 我還什麼也沒有試過這樣:

HttpSession session = request.getSession(); 
session.setAttribute("object", obj); 

與JSP中的以下內容:

Object obj = request.getSession().getAttribute("object"); 

這兩種方法仍返回null。

+4

您正在設置爲HttpRequest。但問題說HttpSession。你想要做什麼? – CoolBeans 2011-04-23 19:57:48

+0

還要確保在JSP的頂部有:<%@ page language =「java」session =「true」%> – 2013-03-07 15:47:09

+0

obj null?我找到了一些我無法從request.getSession()中獲得任何對象的解決方法,我必須在第二頁上創建另一個會話對象,並且需要執行session.getAttribute(「object」);代替。 – meltdownmonk 2013-10-08 20:27:24

回答

42

您沒有將對象添加到會話中,而是將其添加到請求中。
你需要的是:

HttpSession session = request.getSession(); 
session.setAttribute("MySessionVariable", param); 

在Servlet中您有4個範圍,您可以存儲的數據。

  1. 應用
  2. 會議
  3. 請求

確保你瞭解這些。欲瞭解更多看here

+6

,你可以從request.getSession() – MeBigFatGuy 2011-04-23 19:58:13

+0

獲得會話我已經嘗試過,但效果相同。 – Tamer 2011-04-23 19:59:19

+1

你是如何在jsp中讀取它的? – MeBigFatGuy 2011-04-23 20:00:38

12

將它添加到會議,不給要求

HttpSession session = request.getSession(); 
session.setAttribute("object", object); 

另外,不要在JSP中使用scriptlets。改爲使用EL;要訪問object,只需要${object}即可。

JSP技術2.0版的主要特點是支持表達式語言(EL)。表達式語言可以輕鬆訪問存儲在JavaBeans組件中的應用程序數據。例如,JSP表達式語言允許頁面作者使用簡單語法來訪問bean,例如${name}作爲簡單變量,或者${name.foo.bar}作爲嵌套屬性。

1

請求對象不是會話。

您想使用會話對象進行存儲。該會話被添加到請求中,並且您希望跨請求保留數據。會話可從

HttpSession session = request.getSession(true); 

然後,您可以在會話上使用setAttribute或getAttribute。

更是最新的教程JSP的會議是:http://courses.coreservlets.com/Course-Materials/pdf/csajsp2/08-Session-Tracking.pdf

+0

我有一個類似的問題,使用EL,我可以從應用程序和請求範圍訪問屬性,但不訪問會話範圍。我正在使用正確的語法。 – kiwicomb123 2016-09-18 02:07:02

5

在這裏,您可以通過使用HttpRequestHttpSession做到這一點。並認爲你的問題在JSP中。

如果你要使用內部的servlet做以下,

Object obj = new Object(); 
session.setAttribute("object", obj); 

HttpSession session = request.getSession(); 
Object obj = new Object(); 
session.setAttribute("object", obj); 

,並通過使用請求或會話,使用下列訪問它在JSP設置你的屬性後, ,

<%= request.getAttribute("object")%> 

<%= session.getAttribute("object")%> 

看來你的問題出現在JSP中。

如果你想使用小腳本應該如下,

<% 
Object obj = request.getSession().getAttribute("object"); 
out.print(obj); 
%> 

,或者可以使用表達式如下,

<%= session.getAttribute("object")%> 

或者可以使用EL如下, ${object}${sessionScope.object}