Servletがインスタンスを共有する理由

| コメント(0) | トラックバック(0)

Servletはインスタンスを共有しようとします。そうなると、インスタンス内に作った変数に個人情報を代入すると、例えprivate変数であっても同時にアクセスのあった他人に個人情報が表示されてしまうということになってしまいます。

そもそもなぜインスタンスが使いまわされてしまうのか?どうやってアクセスごとに個人情報を管理すれば良いのか?

使いまわされる理由についてはこちらのページ(http://codezine.jp/article/detail/4748?p=2)が参考になります。
要はアクセスごとにインスタンスを生成してしまうとメモリがどんどん消費されてしまうので、それを防ぐためにサーブレットコンテナー(tomcatなど)はインスタンスを使いまわすように設計されているということです。
ただ、それでは(上の記事にもあるように)クライアント単位で情報が保持できなくなってしまうので困りものです。

そこで使うのが「セッション」というものです。セッションは初めてリクエストがあったときにセッションIDというIDを発行して、次回以降のリクエストでそのIDを付けてリクエストするよう、ブラウザに通知します。ブラウザはリクエストのたびにIDを付けてくれるので、サーブレットはそのIDを元に個人を特定して個々の情報を管理することができるようになります。

個々の情報もひとつまたは複数のインスタンスなのでメモリの消費は避けられないですが、個々に必要な情報のみ(最小単位で)保持するので、効率よくメモリを使うことができるのが特徴です。

トラックバック(0)

トラックバックURL: http://www.zerosugar.net/cgi/mt/mt-tb.cgi/9

コメントする

アイテム

  • eclipseのビルド・パス設定
  • cap_11120403.jpg
  • cap_11120402.jpg
  • cap_11120401.jpg
  • stone.jpg
  • road.jpg
  • jazzfrog.jpg
  • cap100425.jpg
  • img100424.jpg
  • Paprika_render_001.jpg

ウェブページ

このブログ記事について

このページは、shimanebitoが2010年2月 9日 15:17に書いたブログ記事です。

ひとつ前のブログ記事は「ipod touchから投稿」です。

次のブログ記事は「Bitmap.smoothingをtrueにするタイミング」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。