- PR -

サーブレットとDB→JSPの連携

投稿者投稿内容
aki
会議室デビュー日: 2003/04/10
投稿数: 16
お住まい・勤務地: Osaka/Japan
投稿日時: 2003-04-10 15:19
現在、ブラウザよりpostされてきた値をサーブレットで受け取り
その値をデータベースに登録し、登録したDBをJSPで表示
しようと考えているのですが、ブラウザから
サーブレットまでは、何とか作成出来たのですが
そこからのDB登録及びJSPの呼び出し方法が分からず
困っております。
どなたか、アドバイス等宜しく御願いします。

現状は、サーブレットからJSPを呼ぶ時にsetAttributeを使い
JSP側に表示だけするようにしています。
本来ならこの表示を決まった枠内に表示したいので、
その為には一度DBに登録してから、JSPを呼び出し
useBeanを使ってテーブルの値を取り表示しようと
思っています。宜しく御願い致します。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-04-10 20:21
setAttributeってSessionオブジェクトのsetAttributeメソッドでしょうか。
ServletContextなども同じメソッドがあるので。
(普通、sessionですね)

で、流れとしては
1. ブラウザからServletにPost
2. Servletはパラメタを受け取りJavaBeanにぶちこむ。
3.  JDBCを経由してDBにInsert.
4. そのBeanをSessionにいれて、JSPにForward
5. JSPは useBean アクションを使用してsession内のインスタンスを取り出す。
6. JSPにて表示。

3番のDBにDMLをぶちこむメソッドはJavaBeanに持たせてあげてもいいでしょう。

と。ご参考まで。
aki
会議室デビュー日: 2003/04/10
投稿数: 16
お住まい・勤務地: Osaka/Japan
投稿日時: 2003-04-11 17:12
raystarさんご返答ありがとうございます。

早速ですが、2,3お聞きしても宜しいでしょうか?

>2.Servletはパラメタを受け取りJavaBeanにぶちこむ。
この2番のJavaBeansにぶち込む時の記述は
RequestDispatcherメソッドを使うのですよね?
ちなみに現在は、下記のように値をgetしJSPに投げています。

String form_lancablekataban = "5M";
request.setAttribute("lancablekataban",form_lancablekataban);
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/TestTop.jsp");
rd.include(request,response);
上記の↑部分をJavaBeansに変えたら良いのでしょうか?

>4.そのBeanをSessionにいれて、JSPにForward
これは、useBeanとfowardタグをJSP内に記述したら
良いという事でしょうか?

宜しく御願い致します。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-04-11 21:09
引用:

この2番のJavaBeansにぶち込む時の記述は
RequestDispatcherメソッドを使うのですよね?


いえ、Beanをnewしてsetterを起動するだけでOKです。

includeの部分を forward にします。

name, addr, tel という三つのフィールドをもったBeanにSETして
forwardするまでのコードは

SampleBean sample = new SampleBean();

session.setAttribute("sample", sample);

sample.setName(name);
sample.setAddr(addr);
sample.set(tel);

request.getRequestDispatcher("/test.jsp").forward(request, response);

このようになるでしょう。

SampleBeanというクラスにsetNameなどのセッターをもたせます。
aki
会議室デビュー日: 2003/04/10
投稿数: 16
お住まい・勤務地: Osaka/Japan
投稿日時: 2003-04-13 23:00
raystarさんすみません。
出来ればSampleBeanのソース例を
教えて頂けないでしょうか?

Beanには、もちろんSQL文も入っているのですよね?
そして、そのSQLに実行が終わってから"/test.jsp"に
forwardしたいのですが、可能でしょうか?
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-04-14 18:05
可能ですよ。

SampleBeanの内容

import java.util.*;
import java.sql.*;

public class SampleBean{
private String name;
private String addr;
private String tel;

public void setName(String val){
name = val;
}
// addr, tel は省略します
public String getName(){
return name;
}

public Iterator getAll(){
Iterator it;
// ここでSQL処理
// 結果をitにぶちこみます
return it;
}
}

こんな感じになると思います。
getAllメソッド内にSQL処理を書いた例です。
別にIteratorじゃなくてもOKです。
(Enumerationなど)
ResultSetはそのまま返しません。(一度、コレクションにいれてください)

こうすれば、JSP側でIteratorオブジェクトを受け取って、
forなどで回したらよいのではないでしょうか。
aki
会議室デビュー日: 2003/04/10
投稿数: 16
お住まい・勤務地: Osaka/Japan
投稿日時: 2003-04-21 11:29
raystarさん
どうもありがとうございます。

先週は風邪で倒れていたのでWebのほうは、さっぱり出来ませんでした。
今週は何とかこの仕組みを完成したいと思っています。

説明不足だったかもしれませんが、この仕様はサーブレットからBeansに
処理が移った時にBeansの中で対象データと既存データの比較を行い、
それによりSQLでinsertするのかdeleteするのか、そのままかを処理します。

その結果のTable内の値をjspに表示しようと考えております。
この場合も、やはりサーブレットでBeansをnewして値をsetし、
forwardでjspを呼ぶといった動作で宜しいのでしょうか?

重複すると思いますが、現在はA.jspで選択した値をrequest.getParameterで
受け取り、その値によって変数に文字列を挿入し、request.setAttributeで
値をセットし、そのままB.jspに転送しているだけです。
ですから、現在は値を単に表示しているだけ、DBから検索して表示しているわけ
ではありません。
これを上段に記述していますように、一度DBに登録された値をSQLで検索し、
B.jspに表示したいと考えています。
このような仕組みは、複雑すぎるのでしょうか?
それとも、もっと簡略化できるのでしょうか?

raystarさんの教えて頂いたロジックで再度挑戦してみます。
また、不明な点が出てきたら質問させて頂きます。
長々とすみませんでした。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-04-23 09:22
引用:

この場合も、やはりサーブレットでBeansをnewして値をsetし、
forwardでjspを呼ぶといった動作で宜しいのでしょうか?



基本的なロジックは変わりません。
forwardするまえに beanのDB関係のメソッドを呼び出し、
それをセッションにいれるべきです。
↑でいう getAll()のような感じですね。

スキルアップ/キャリアアップ(JOB@IT)