前に書いた話の続き。
今回は、
(3)画面への出力は
・JSPなら、セッションに値を渡す
・XMLなら、ハッシュマップに入れている値からとってくる
について
■いままでのところの復習と今回のところ
前々回、前回までのところで、
サーブレットに入ってくる
1.セッションと引数を全部、ハッシュマップに入れる
2.そのハッシュマップをもとに処理を行い、
処理系なら、処理結果
検索系なら、検索結果のベクタ(ハッシュマップのレコードが要素)
をうけとる
3.以降の処理で必要な値は、ハッシュマップから取り出し
セッションにセット
というところまできました。
今回は、2で受け取った結果や3で入れたセッションを元に、結果を返したり、
次画面に遷移したりします。
■出力のパターン
出力のパターンとして
・画面を表示する(普通のサーブレット)
サーブレットでgetWriterを使って書き出す
JSPを呼び出す
・XMLを書き出す(WebAPIの場合)
サーブレットでgetWriterを使って書き出す
JSPを呼び出す
とありえます。
どちらのケースでも、結局、JSPを呼び出すか、直接書くかです。
■JSPのケース
JSPの場合は、書き出し内容をセッションに入れて(上記の3で入れているが、検索系で、処理結果となる検索結果も必要な場合はそれもセッションに入れて)、JSPのフォワードします。
受け手のJSPは、セッションからその値を取り出し、セットします。
この際、XMLの場合は、JSPの先頭に、ページディレクティブ指定として
<%@ page language="java" contentType="text/xml; charset=UTF-8" %>
(< > は本当は半角)が必要です。
なお、FireFoxで、キャラクターセットの指定がしたい場合は、HTMLでも、こんなふうにかきますけど・・
ということは、
2の処理を行うところで、セッションに入れる場合は、ハッシュマップにsessionsetというキーで、セッションに入れるべき値をセットするようにして(この場合、検索系でも検索結果のVectorは、そこに入れるようにして、返り値は、intにする)
3の処理は、sessionsetを取り出して、すべての値をセットするようにして
ここ(4番目の処理)は、JSPをフォワードするようにすれば、
(セッションの値を使って、独自処理をするのは、JSP側)
このサーブレット部分は、名前程度の違いしかないので、自動生成することが可能になってきます。
■サーブレットに書き出すケース
2で受け取った結果やVector、HashMapには言っている値から出力を作り出します。
XMLの場合は固定化しているので、処理系用と検索系用のものを用意しておけば汎用に作れます。
画面の場合には、ここで画面操作が入ってくるので、汎用的にはつくりにくいかも
で、これをあわせると、具体的にどうなるのかという話に関しては、DBアクセス自動生成のためのトランザクション処理方法とともに「オブジェクト指向で開発の最初から最後までの手順例」
で、展開していきます。