まえに、こんな題で、2回、書いていたと思う。
なんで、この話、つづきを書いてしまおうと思う。
今回は、
(2)処理は、そのハッシュマップを、POJOクラスのメソッド
にわたす(そのクラス、メソッドは任意。
なので、そこの呼び出しは書く)
について。
■サーブレットの処理をPOJOにする
前回の話で、サーブレットのセッションと引数の値を全部、ハッシュマップにいれました。
なので、処理部分は、そのハッシュマップを引数として、結果をもらえばいいことになります。
つまり、処理部分に対し、たとえば、Shoriというクラスを作って、
executeというメソッドで、実行するとすると、
Shori shori = new Shori();
int ret = shori.execute(map);
で、すむことになります。正常終了のときは、0,
異常のときは、それ以外の値が入ることとします。
shoriクラスの中で、たとえば、
shori1(String val1,String val2);
みたいなものが定義されていて、
public int execute(HashMap map)
{
return shori1((String)map.get("val1"),(String)map.get("val2"));
}
のような形で、引数を明示するメソッドをつくり、それを呼び出して処理してもOKですし、executeの中で処理してもOKです。
とにかく、このShoriクラスのように、なにも継承されていないクラスにすることで、画面などの方法に依存しないで開発、テストできるクラスがつくれます。
それと、
Shori shori = new Shori();
int ret = shori.execute(map);
の型にもってくることで、自動生成も簡単にできるようになります。
■検索の場合は、Vectorを受ける関数
で、これ、更新などの処理のときには便利なのですが、検索のときは、返り値に検索結果を受け取ったほうが便利です。
なので、
Shori shori = new Shori();
Vector recList = shori.executeSelect(map);
のかたちのほうが便利です。
recListの1要素が1レコード分になっていて、HashMapがはいっています。
HashMapのキーが項目名で、値が、そのレコードの項目値です。
この場合、エラーが起きたら、recListはnull
(1件もない場合、recListの件数が0)とします。
理由もとりたい場合は、mapのerrmsgとか
(いや、キーは、なんでもいいんですけどね)の中に入れておいて、
recListがnullの場合、
String errMsg = (String)map.get("errmsg");
でとってくるとします。
■セッションにいれる場合
セッションに入れる場合は、Shoriクラスでおこなっては「いけない」
わけです。そうするとpojoにならないので。
そこで、mapの中に入れて、Shoriクラスのメソッドから出て、
サーブレットにきたところで、セッションにいれるか、
mapの1要素に
キーsessionset 値 HashMapでセッションに入れるもののキーと値
みたいにして、Shoriクラスのメソッドから出て、
サーブレットにきたところで、sessionsetをとってきて、
その中身をセッションにいれれば、自動化できるので、
いいかも(^^)
ということで、次回のこのシリーズは、
(3)画面への出力は
・JSPなら、セッションに値を渡す
・XMLなら、ハッシュマップに入れている値からとってくる
についてかきます。