他のサーブレットには見えないが、サーブレットAIでAとBは、HashMapを作成し、initでサーブレットコンテキストに保存する()ので、のような:のServletContext変数のは、私は2つのサーブレットがあるとしましょう
ServletContext context = getServletContext();
context.setAttribute("otable", someObject);
今でサーブレットBのinit()私は、サーブレット・コンテキスト・オブジェクト(私は最初のweb.xmlを経由して最初に起動するサーブレットコンテキストオブジェクトを作成し、サーブレットを指定しています)へのローカル参照初期化しています:私は、その後の挿入とサイズ
// get and set reference to object cache
oc = (ObjectCache)getServletContext().getAttribute("otable");
をサーブレットAが再び呼び出され、サーブレットコンテキストHashMaをチェックするとpの場合、サイズはまだ0です。
サーブレットコンテキストオブジェクトへのローカル参照を格納するのは悪い考えですか?サーブレットのコンテキストからオブジェクトを直接取得しようとしましたが、同じ結果が得られました。私はここで何が欠けていますか?共有オブジェクトを作成します
サーブレットは、次のと私のweb.xmlで最初に開始されます。
<servlet>
<servlet-name>ServletA</servlet-name>
<servlet-class>package.ServletA</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
わかりました。ありがとうMarkus、ただ好奇心が強いですが、その場合、サーブレットのローカル変数はサーブレットのコンテキストと同じではありませんか?あるいは、同じサーブレットの複数のインスタンスに対してサーブレット・コンテキストが使用されていますか? 2つのサーブレットにまたがって配置するために並行ハッシュマップを使用する際の問題はありますか? – fobius
私のコメントは間違っていたので削除しました、ごめんなさい! –
サーブレットが初期化されていますか?起動時に負荷を設定できます。それ以外の場合は、最初の要求が到着するまで初期化されません。はい、間違いなく同時アクセスが必要な場合はHashMapを使用しないでください。それは競争状態に終わるかもしれません! –