- - PR -
sessionオブジェクトについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-11-11 23:17
質問があいまいでごめんなさい。
勉強中ですが、詳しくまだ分からないところがあって 1. HttpServletRequest@ HttpSessionA の違いというのは @はページ間でしか有効ではない Aはそのsessionが無効になるまで有効 なのでしょうか? 2. sessionを無効化しないでおくとどんなデメリットがあるのでしょうか? |
|
投稿日時: 2004-11-12 00:00
ちょっと長くなりますが、
javaAPIより引用 ----request javax.servlet.http インタフェース HttpServletRequest すべてのスーパーインタフェース: ServletRequest 既知の実装クラスの一覧: HttpServletRequestWrapper public interface HttpServletRequest extends ServletRequest HTTP Servletのためのリクエスト情報を与えるために ServletRequestインタフェースを拡張します。 ServletコンテナはHttpServletRequest オブジェクトを生成し、Servletのサービスメソッド(doGet、 doPost等)に引数で渡します。 javax.servlet.http インタフェース HttpSession -------------------------------------------------------------------------------- public interface HttpSession 複数ページにわたる要求により Web サイトの閲覧を行うユーザを一意に識別し、そのユーザについての情報を格納する方法を提供します。 -----session サーブレットコンテナは、このインタフェースを使用して、HTTP クライアントと HTTP サーバ間にセッションを作成します。セッションは、ユーザからの複数の接続すなわちページ要求にまたがって一定期間持続します。通常 1 つのセッションはサイトに何度も接続する 1 人のユーザに対応します。サーバは、クッキーの使用や URL の書き換えなどといったさまざまな方法で、セッションを維持することができます。 このインタフェースによって、サーブレットは次のことを実行できます。 セッション識別子、生成時間、最終アクセス時間などのセッションについての情報を参照し、操作する ユーザ情報が複数回のユーザ接続にわたって維持されるように、オブジェクトをセッションにバインドする 簡単に言いますと、HttpServletRequestはrequest(要求)に関している、 それに対して、HttpSessionというのはアクセスしている人を認識するため のものです。 sessionを無効化しない場合とはsessionを閉じる(session.close())をしないという ことでしょうか?sessionを閉じないとサーバーにアクセスのしたしている という状態が増えることからサーバーがダウンする恐れがあるのです。 |
|
投稿日時: 2004-11-12 00:34
>sessionを無効化しない場合とはsessionを閉じる(session.close())をしない
細かい話ですが invalidate() ですね。 set/getAttribute() メソッドによって情報を格納しておくという機能においてはYOUさんの認識の通りですね。砂くじらさんのおっしゃるとおりインターフェースは全く異なりますのでそれ以外の昨日については全然概念のことなるものです。 セッションに巨大なオブジェクトを放り込んでおいたりタイムアウト時間を長く設定しすぎたりすると OutOfMemoryError の原因となります。 セッションにセットするオブジェクトのサイズは大きくしすぎず(必要に応じて EntityBean の利用も!)、また想定される負荷をかけても十分にヒープが足りるように設計/設定しましょう。 |
|
投稿日時: 2004-11-12 22:40
すいません。
追加で教えていただきたいのですが、 1. サーバ側で今どれくらいのセッションを保持しているかということを確認する方法は あるのでしょうか? 2. sesisonを作るとき以下のように作っていますが、 このページをリロードした場合また新しいセッションができるのでしょうか? HttpSession session = request.getSession(true); // sessionオブジェクト |
|
投稿日時: 2004-11-13 10:04
1.セッション数の確認方法について
依然はHttpSessionContext#getIds() で全てのセッションを取得できましたがServletAPI2.2以降では標準的な方法はありません。 コンテナによっては JMX インターフェースから取得可能です。 WebLogic Server では WebAppComponentRuntimeMBean#getOpenSessionCurrentCount() や管理コンソールから確認できます。 http://e-docs.bea.com/wls/docs81/javadocs/weblogic/management/runtime/WebAppComponentRuntimeMBean.html#getOpenSessionsCurrentCount() 2.セッションの作成タイミングについて getSession()メソッドの説明を読みましょう。 http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpServletRequest.html#getSession(boolean) よくわからなければ簡単な実験で確認できますよね。 |
1