2011-06-21 65 views
0

おはよう!セッションでのドロップダウンの選択

私は既存のプログラムからいくつかのコードを変更しています。 プログラムを開始する前に、すべてのドロップダウンリストを初期化し、セッションに格納します。

セッションにドロップダウンメニューのリストを保存しても問題ありませんか? 注:リストはデータベースからのものです。

サンプルコード:

  HttpSession session = request.getSession(); 

     session.setAttribute("accountList", accountList); 
     session.setAttribute("contractorAgencyList", contractorAgencyList); 
     session.setAttribute("employeeStatusList", employeeStatusList); 
     session.setAttribute("movementTypeList", movementTypeList); 
     session.setAttribute("positionLevelList", positionLevelList); 
     session.setAttribute("positionRoleList", positionRoleList); 
     session.setAttribute("practiceCodeList", practiceCodeList); 
     session.setAttribute("projectUtilizationList", projectUtilizationList); 
     session.setAttribute("siteLocationList", siteLocationList); 
     session.setAttribute("taxStatusList",taxStatusList); 
     session.setAttribute("turnoverTypeList",turnoverTypeList); 
     session.setAttribute("projectList",projectList); 

はこれを行うための他の方法はありますか?これが最も一般的な方法であれば、どうやってセッションが失われるのを防ぐことができますか?

ありがとうございます。

答えて

2

他の方法がありますか?

はい、ただし、値を保存する時間によって異なります。サーブレットコンテナでは、通常、アプリケーションスコープ、セッションスコープ、リクエストスコープ、およびページスコープにアクセスできます。最初の3つはサーブレットとJSPの両方でアクセスできますが、最後はJSPのコンテキストでのみ役に立ちます。

メニューの内容は、セッション間で再利用することができた場合、それはアプリケーションがオブジェクトをスコープにthe ServletContext interfaceを経由して、それらを格納することをお勧めします。

現在のリクエストを超えてメニューデータを必要としない場合は、リクエストスコープにする必要があります。セッションスコープではありません。

ドロップダウンメニューの範囲はしかし、セッションに制限されている場合

は、限り、オブジェクトが多くのスペースを消費しないように、セッションに保管するためのより良いアイデアです。特に、クラスタリングとセッションのレプリケーション戦略が導入されている場合、メモリに格納されたオブジェクトのサイズはサイトのパフォーマンスに影響を与えます。これは主に、セッションの内容をシリアル化して、フェイルオーバー時に別のセッションを作成する

また、パフォーマンスは、各セッションは、セッションの無効化の後にのみ、次のGCサイクルの際に放出されるメモリを消費しますと、あなたが、クラスタリングとセッション移行戦略を採用していない場合であっても影響を受けることになります。

セッションを使用してセッションスコープのオブジェクトを保存しないようにするには、必要に応じてデータベースからデータを照会できます。また、機密データではない限り、ファイルにコンテンツを格納することもできます。これにより、セッション移行戦略がさらに苦労する可能性があります。

これが最も一般的な方法であれば、セッションを紛失しないようにするにはどうすればよいですか?

私は質問のこの部分を理解しませんでした。いずれの場合も、セッションは、アプリケーション開発者に代わってコンテナによって管理されます。多くの場合、開発者は、セッション満了のためのローリングウィンドウの範囲を指示するセッションタイムアウト値を指定することができる。開発者は、アプリケーションのナビゲーションフローの重要なポイント(たとえば、ログアウトボタンをクリックすると)でセッションを無効にすることもできます。開発者は通常、セッションの管理について、HttpSession APIを使用して実行する必要があるもの以上、またはデプロイメント記述子のエントリを超えて心配する必要はありません。

1

セッションに保存できますが、目的は何ですか?データはセッションユーザーにのみ固有のものですか?そうなら、あなたは保管することができます。 その値がすべてのユーザーに共通する場合は、セッションの代わりにアプリケーションを使用できます。

アドバンテージ(データはユーザー固有である場合)セッションを使用して、であり、それは高速データベースフェッチと比較され、不利な点は、メモリは、ユーザ毎にサーバに割り当てられますです。

+0

あなたは何をしていますか?常にデータベースからデータをフェッチしますか? – newbie

+1

これは、ユーザーに頻繁に値を使用している場合はセッションを保存することをお勧めします。それ以外の場合は、必要に応じてデータベースからロードします(ユーザーが常にそのデータを必要とするかどうかは不明です) – AjayR

関連する問題