セッションで保持されているオブジェクトを更新する正しい方法は何ですか? setAttribute()
セッションから取得された、状態が変更されたオブジェクトを常に呼び出す必要がありますか? ここでは、すでに作成されてセッションに保存されているセッション属性のみを参照しています。新しい属性ではありません。
Person
セッションにオブジェクトが保存されていて、各リクエストが行うとしましょう:
Person p = (Person) session.getAttribute("person");
次に、「p」によって参照されるオブジェクトは、常にリクエスト全体で返される同じオブジェクトになります。コンテナー (少なくとも Tomcat) は、毎回新しいコピーを提供するわけではありません。ここでのポイントは、後で をp.setName("Joe the Plumber")
呼び出して呼び出さなくてsetAttribute("person", p)
も、セッションに保持されているオブジェクトは引き続き更新され、リクエスト間で更新が表示されるということです。
ただし、クラスタリングとセッション レプリケーションが開始されるとsetAttribute()
、更新されたセッション オブジェクトを配布するタイミングをクラスタリング コードが認識できるように、通常は常に呼び出す必要があります。一部のコンテナには、を呼び出さずにこれを達成するための他のメカニズムがあることを認識していますsetAttribute()
。
これはサーブレット仕様の灰色の領域ですか?