web-dev-qa-db-ja.com

JavaオブジェクトをHttpSessionにどのように保存しますか?

したがって、このサーブレットが要求されたときに、ユーザーのセッションにJavaオブジェクトを追加するサーブレットを取得しようとしています。しかし、サーブレットが次のページにリダイレクトした後、オブジェクト、代わりにnullオブジェクトを取得します。

オブジェクトをHttpSession(サーブレット内)に追加するには、次のようにします。

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が返されます。

34
Tamer

オブジェクトをセッションに追加するのではなく、リクエストに追加します。
必要なのは:

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

サーブレットには、データを保存できる4つのスコープがあります。

  1. 応用
  2. セッション
  3. 要求
  4. ページ

これらを必ず理解してください。詳細については こちら

46
Romain Hippeau

sessionではなく、requestに追加してください。

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

また、JSPでスクリプトレットを使用しないでください。代わりに [〜#〜] el [〜#〜] を使用してください。 objectにアクセスするために必要なのは${object}だけです。

JSPテクノロジーバージョン2.0の主な機能は、式言語(EL)のサポートです。式言語を使用すると、JavaBeansコンポーネントに格納されているアプリケーションデータに簡単にアクセスできます。たとえば、JSP式言語を使用すると、ページ作成者は、単純な変数の場合は${name}、ネストされたプロパティの場合は${name.foo.bar}などの単純な構文を使用してBeanにアクセスできます。

12
Matt Ball

ここでは、HttpRequestまたはHttpSessionを使用して実行できます。そして、あなたの問題はJSP内にあると考えてください。

内部サーブレットを使用する場合は、以下を実行します。

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}

5

要求オブジェクトはセッションではありません。

セッションオブジェクトを使用して保存する場合。セッションがリクエストに追加され、リクエスト間でデータを保持する必要がありました。セッションは以下から取得できます

HttpSession session = request.getSession(true);

その後、セッションでsetAttributeまたはgetAttributeを使用できます。

Jspセッションに関する最新のチュートリアルは次のとおりです。 http://courses.coreservlets.com/Course-Materials/pdf/csajsp2/08-Session-Tracking.pdf

1
ditkin