14

属性を設定するこれらの3つの方法の違いを理解するのに問題があります。

// String as attribute of request
req.setAttribute("name", "Sluggo");

// Integer as attribute of session
req.getSession().setAttribute("age", 10);

// Date as attribute of context
getServletContext().setAttribute("today", new Date());
  1. 違いは何ですか?
  2. それぞれをいつ使用する必要がありますか?
4

2 に答える 2

23

ServletContext属性は、メソッドを介してコンテキストにバインドされたオブジェクトであり、そのServletContext.setAttribute()コンテキスト内のすべてのサーブレット(つまり、JSP)、またはgetContext()メソッドを介して他のコンテキストで使用できます。定義上、コンテキスト属性は、それらが定義されたVMにローカルに存在します。そのため、分散アプリケーションでは使用できません。

セッション属性は、関連するHTTPリクエストのセットに状態を提供する手段として、セッションにバインドされます。セッション属性は、セッションに参加するサーブレットでのみ使用できます。また、分散シナリオのさまざまなJVMでは使用できません。オブジェクトは、インターフェイスを実装するセッションにバインド/バインド解除されたときに通知を受けることができ HttpSessionBindingListenerます。

リクエスト属性は特定のリクエストオブジェクトにバインドされており、リクエストが解決されるまで、またはサーブレットからサーブレットにディスパッチされ続ける間、属性は存続します。これらは、インターフェースを介したサーブレット間の通信チャネルとしてRequestDispatcher(パラメーターを追加できないため...)、コンテナーによってより多く使用されます。リクエスト属性は、情報プロバイダーと情報プレゼンテーション層(JSP)との間でセットアップ情報を提供する必要があり、特定のリクエストにバインドされ、もはや利用可能である必要がない場合に、Webアプリで非常に役立ちます。これは通常、厳密な制御のないセッションで発生します。ストラテジー。

要約すると、次のように言うことができます。

  • コンテキスト属性は、共有接続プールなどのインフラストラクチャを対象としています。
  • セッション属性は、ユーザーIDなどのコンテキスト情報を対象としています。
  • リクエスト属性は、クエリ結果などの特定のリクエスト情報を対象としています。

出典:Krishna Srinivasan@javabeat.netによるサーブレットインタビューの質問

于 2013-03-15T13:40:00.333 に答える
12

これら3つのスコープは異なります。

  • リクエスト属性は、そのリクエスト/レスポンスサイクルの存続期間中存続します

  • そのセッションの存続期間中のセッション属性

  • ServletContextサーブレットコンテキスト全体にあり、コンテキストが破棄されるまで存続します。

于 2013-03-14T00:16:44.810 に答える