簡體   English   中英

如何在 HttpSession 中存儲 Java 對象?

[英]How do you store Java objects in HttpSession?

所以我試圖讓一個 servlet 在請求這個 servlet 時將一個 Java 對象添加到用戶的會話中。 但是在 servlet 重定向到下一頁並且我嘗試檢索該對象之后,我反而得到了一個null對象。

這是我將對象添加到 HttpSession(在 servlet 中)的操作:

request.setAttribute("object", obj);

然后我嘗試通過(在 JSP 中)檢索它:

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

那么我怎樣才能讓 obj 不為空呢?

更新:我也試過一無所獲:

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

在 JSP 中具有以下內容:

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

兩種方式仍然返回 null。

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

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

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

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

確保你理解這些。 更多信息請看這里

將它添加到會話中,而不是請求中

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

另外,不要在 JSP 中使用 scriptlet。 改用EL 要訪問object您只需要${object}

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

在這里,您可以使用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 上。

如果你想使用scriptlets,它應該如下所示,

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

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

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

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

請求對象不是會話。

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

HttpSession session = request.getSession(true);

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

有關 jsp 會話的最新教程是: http : //courses.coreservlets.com/Course-Materials/pdf/csajsp2/08-Session-Tracking.pdf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM