- - PR -
サーブレットとDB→JSPの連携
1|2|3
次のページへ»
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-04-10 15:19
現在、ブラウザよりpostされてきた値をサーブレットで受け取り
その値をデータベースに登録し、登録したDBをJSPで表示 しようと考えているのですが、ブラウザから サーブレットまでは、何とか作成出来たのですが そこからのDB登録及びJSPの呼び出し方法が分からず 困っております。 どなたか、アドバイス等宜しく御願いします。 現状は、サーブレットからJSPを呼ぶ時にsetAttributeを使い JSP側に表示だけするようにしています。 本来ならこの表示を決まった枠内に表示したいので、 その為には一度DBに登録してから、JSPを呼び出し useBeanを使ってテーブルの値を取り表示しようと 思っています。宜しく御願い致します。 | ||||
|
投稿日時: 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に持たせてあげてもいいでしょう。 と。ご参考まで。 | ||||
|
投稿日時: 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内に記述したら 良いという事でしょうか? 宜しく御願い致します。 | ||||
|
投稿日時: 2003-04-11 21:09
いえ、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などのセッターをもたせます。 | ||||
|
投稿日時: 2003-04-13 23:00
raystarさんすみません。
出来ればSampleBeanのソース例を 教えて頂けないでしょうか? Beanには、もちろんSQL文も入っているのですよね? そして、そのSQLに実行が終わってから"/test.jsp"に forwardしたいのですが、可能でしょうか? | ||||
|
投稿日時: 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などで回したらよいのではないでしょうか。 | ||||
|
投稿日時: 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さんの教えて頂いたロジックで再度挑戦してみます。 また、不明な点が出てきたら質問させて頂きます。 長々とすみませんでした。 | ||||
|
投稿日時: 2003-04-23 09:22
基本的なロジックは変わりません。 forwardするまえに beanのDB関係のメソッドを呼び出し、 それをセッションにいれるべきです。 ↑でいう getAll()のような感じですね。 | ||||
1|2|3
次のページへ»
