1

同じ Tomcat サーバーで 2 つのサーブレットを実行しており、あるサーブレットのインスタンスから他のサーブレットの対応するインスタンスにデータを渡す必要があります。次のようなことを行うことでこれを行うことができるようです:

getServletContext().getContext("/path").setAttribute("varName", variable)

また、getAttribute を使用して、他のサーブレットからも同様に受信できるはずです。しかし、ここに私の質問があります:

他のサーブレットは、この属性がいつ設定されたかをどのように認識しますか? データは、任意の時点で複数回受信できます。では、取得を待っているデータがあることを他のサーブレットに「通知」するにはどうすればよいでしょうか。

ありがとう、

エリック

編集:

ここに私がやろうとしていることの詳細があります: 私は2つの異なるアプリでチャットプログラムを構築しようとしています. 別のアプリであるチャット受信アプリにメッセージを送信できるクライアントがあります。フロントエンドには Vaadin を使用しています。チャット レシーバー アプリには 2 つのサーブレットが含まれています。もう 1 つの Vaadin アプリケーションと、クライアント アプリからメッセージを受信するための基本的なサーブレットです (この部分は既に動作しています)。次に、メッセージを受信して​​いるサーブレットと同じ war ファイルにある、チャット受信アプリの Vaadin アプリケーションにそれをリレーしたいと思います。うまくいけば、それで問題が解決します。この質問を投稿するには、Vaadin フォーラムの方が適していると思われる場合はお知らせください。助けてくれてありがとう、私は主にコア Java プログラマーなので、かなり混乱しています。ほんとうにありがとう!

4

1 に答える 1

2

サーブレットを呼び出す唯一のメカニズムは、HTTPリクエストを発行することです。また、サーブレットコンテナのみがサーブレットを呼び出し、そのライフサイクルを処理できます。

これは、1つのサーブレットにサーブレットコンテキスト属性を設定してから、ユーザーが2番目のサーブレットを呼び出すのを待つことができることを意味します。これによりグローバル値が表示されます。あるサーブレットを別のサーブレットから呼び出すことはできません。

何を達成したいのかわからない。たぶん、最初のサーブレットから2番目のサーブレットへの転送/リダイレクトで十分でしょうか?

request.setAttribute("varName", variable);
getServletContext().getRequestDispatcher("servlet2").forward(request,response);

変数には、次の方法でアクセスできますservlet2

request.getAttribute("varName");

ところで、コードは不必要に複雑でエラーが発生しやすいので、次のことを試してください。

getServletContext().setAttribute("varName", variable);
于 2012-08-18T18:20:30.337 に答える