Strutsでの画面前処理の話を以前のブログですると書きましたが、その前に、セッションについてまとめておく必要があるので、ちと書いておきます。
セッションは、画面間で、データを受け渡しするのに、普通使います。
PHPだとこんなかんじ
(ただし、Cannot send session cookie(このあとつづく)っていうエラーが出る場合はここ)
Perlだとこんなかんじ、
JSPだとこんなかんじで、
Javaのサーブレットだとこんなかんじ
とまあ、こんなかんじになります。
では、セッションでは、なにをやっているのかというとまとめると、結局
・画面間で、データの受け渡しをするのに、サーバー側にデータ置き場を用意しておき、クライアントにセッションIDをわたすことで、どこの置き場のデータを使っているということがわかるようにして、データを受け渡す
という方法でした。
つまり、こんなかんじ。

で、これを実現するためには、クライアントの画面にセッションIDを渡して、クライアントからはそのIDを返してもらわないといけません。
そのためには、クライアントに
1.クッキーを使ってもらうか
2.セッションIDをURLに設定して(SIDやSessionIDとなるのがふつう)
とってくるのがふつうです。
なお、上記の図のように、セッションは、サーバー側にあるものなので、
Javascriptでクライアントからセッションのデータを操作するというのは、
常識的には出来ません(AJAXで非同期でなんかして。。。とか、
そーいうことを、今考えないとして=常識的に)。
また、別にセッション以外でも、このことと同じことは実現できます。
1セッションごとにファイルやディレクトリ(=フォルダ)を用意して、
そこに書き出し、セッションIDのかわりに、そのファイル名をクライアント
に受け渡しすれば、OKです。
もちろんHiddenですべてのデータをわたしてもいいし。。
この場合のメリットは、AJAXを利用する場合、比較的簡単にサーバ側データ
が取得できるということです。セッションに入っているデータをとってくるというと、
いろんなからくりを作らないと無理っぽそうですが、ファイルをXMLで書き出し、
そのファイル名をクライアント側に渡してしまえば、あとは、フツーのAJAX
でのXML取得の話でs。
で、今回は、そーいうことをいいたいんじゃなくって、
クライアント側で、仮にクッキーも受け付けず、URLにもいれない、つまり、セッションは一切使いたくないとしたとします。
それでも、サーバーからみると、サーバープログラムと、その直後のJSPにおいては、セッションを利用して、データを受け渡すことは可能だということです。
たしかに、複数画面間のデータ受け渡しにはセッションIDをつかって、セッションをみつけるので、セッションIDがないとこまります。なので、クライアントでセッションIDを受け渡すことを、上記のように拒否された場合、”複数画面間での”データ受け渡しは出来ません。
しかし、”1画面を出力するまでの”サーバープログラムと直後のJSPの関係においては、クライアントはでてこないので、ここでセッションを利用して、データ共有することは可能です。つまり、”1画面内で複数プログラムがあるときの”データ受け渡しは可能です。
おなじことが、PHPプログラムにもいえます。
サーバー側でPHPプログラムが1画面を出力する間に複数動く場合、セッションに処理したデータを突っ込んでしまえば、そのプログラム間でセッションによるデータ共有は可能です。
ただし、複数画面における画面間でのデータ共有は、クライアント側で、セッションを利用できるように(=クッキーを受け入れるか、URLにセッション番号を付けることをOKとする等)しないとできません。
この特徴を使って、MVCにプログラムをわけて、各プログラムにおいて、他プログラムに渡したいデータをセッションにいれてしまい、データ共有させたのが、カオル姫方式です。
ということで、Strutsの話ができそうです。
