Servletはインスタンスを共有しようとします。そうなると、インスタンス内に作った変数に個人情報を代入すると、例えprivate変数であっても同時にアクセスのあった他人に個人情報が表示されてしまうということになってしまいます。
そもそもなぜインスタンスが使いまわされてしまうのか?どうやってアクセスごとに個人情報を管理すれば良いのか?
使いまわされる理由についてはこちらのページ(http://codezine.jp/article/detail/4748?p=2)が参考になります。
要はアクセスごとにインスタンスを生成してしまうとメモリがどんどん消費されてしまうので、それを防ぐためにサーブレットコンテナー(tomcatなど)はインスタンスを使いまわすように設計されているということです。
ただ、それでは(上の記事にもあるように)クライアント単位で情報が保持できなくなってしまうので困りものです。
そこで使うのが「セッション」というものです。セッションは初めてリクエストがあったときにセッションIDというIDを発行して、次回以降のリクエストでそのIDを付けてリクエストするよう、ブラウザに通知します。ブラウザはリクエストのたびにIDを付けてくれるので、サーブレットはそのIDを元に個人を特定して個々の情報を管理することができるようになります。
個々の情報もひとつまたは複数のインスタンスなのでメモリの消費は避けられないですが、個々に必要な情報のみ(最小単位で)保持するので、効率よくメモリを使うことができるのが特徴です。
コメントする