ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュのサーブレットの質問

  • mixiチェック
  • このエントリーをはてなブックマークに追加
丸投げではないのですが、方法論がわからないので教えて頂きたいです。今やりたいのは、2つの別個のサーブレットを1画面に表示させたいです。
「画面上部にServletJDBC.classを表示させる。画面下部に(フレームみたいなもので隔てて。。別になくても構いません)全く別のサーブレットServletJDBC2.classを表示させる。上下の画面は全く別に動作する。」

JSPはまだ勉強していないのでサーブレット(+HTML)だけで済ませたいのですが、こんなことできるのでしょうか。。?これを実現する方法か、もしくはもっといい方法があるのでしたら教えて欲しいです。(本来、わざわざ二つのサーブレットをつくる必要もないのですが1つのサーブレットにデータ更新用のボタンを作ってもクリック時にServletJDBCのdoGet内の処理(ここでいうと個数や金額がsubmitされ、それによりplaceOrderメソッドが呼び出されてしまう)が行われてしまい、それだと都合が悪いのです)


-------------------------------------------------------------------------------------------------------------
(ServletJDBC.java、画面上部に表示させたいサーブレット)
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class ServletJDBC extends HttpServlet {
private String message;
private int number;
private int price;
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Test";
out.println("<HTML><HEAD><TITLE>");
out.println(title);
out.println("</TITLE></HEAD><BODY>");
out.println("<H1>" + title + "</H1>");
out.println(createInputForm());
number = request.getParameter("number");
price = request.getParameter("price");
placeOrder();
out.println(message);
out.println("</BODY></HTML>");
out.close();
}

private String createInputForm() {
StringBuffer sb = new StringBuffer();
sb.append("<form method=\"get\" action=\"/project/ServletJDBC\">");
sb.append("<p>");
sb.append("個数:<input type=\"text\" size=\"10\" name=\"number\"><br>");
sb.append("金額:<input type=\"text\" size=\"10\" name=\"price\"><br>");
sb.append("</p>");
sb.append("<input type=\"submit\" value=\"Go\"/>");
sb.append("<input type=\"reset\" value=\"Clear\"/>");
sb.append("</form>");
sb.append("<hr color=gray>");
return (new String(sb));
}
private void placeOrder() {
// Oracleデータベースとやりとり
// 終わったら結果に応じてmessageに文字列を代入
}
-------------------------------------------------------------------------------------------------------------
(ServletJDBC2.java、画面下部に表示したいサーブレット)
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class ServletJDBC2 extends HttpServlet {
private String message2;
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(createUpdateButton());
datastatusCheck();
out.println(message2);
out.close();
}

private String createUpdateButton() {
StringBuffer sb = new StringBuffer();
sb.append("<form action=\"/project/ServletJDBC2\"><input type=\"submit\" value=\"データ更新\"/></form>");
return (new String(sb));
}
private void datastatusCheck() {
// Oracleデータベースとやりとり
// 終わったら結果に応じてmessage2に文字列を代入
}
-------------------------------------------------------------------------------------------------------------

コメント(5)

やりたいことは、データの登録や更新を行う画面の作成ですか?
今携帯からなのでコード例は示せないのですが、普通は1つのサーブレットにして、押されたボタンに応じて処理をふりわけます。
データ表示と更新だけならdoGetでデータの表示を行なって、formのmethodをpostにしてdoPostで更新系の処理をするのでもいいと思います。
> やりたいことは、データの登録や更新を行う画面の作成ですか?

はい。そうなのですが、多分私のレベルが低すぎて今出くわしている問題点が伝えられていないような気がします。実際にはJDBCのところは CORBAを使用していますが本件には関係ないと思いはしょったのですがひょっとすると関係あるかも知れないので一応まるごと現状のソースをアップしました。90%以上は関係ない箇所だと思いますが。。どうも問題点を正しく伝えられる自信がないので見て頂けると助かります。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9311.txt

このソースでは、入力フォームからclientID、buyOrSell、quantity、priceを入力し、Goボタンをクリックすると、同じ自分自身のサーブレットに四つの引数を伴って戻って来ます。そしてCORBA経由でデータベースにアクセスし、データ表示を行います。

ここまでは問題なく動くのですが、今やりたいのは更にボタンを一つ追加して、そのボタンを押すとデータベースに(CORBA経由で)アクセスして別の情報を取って来て表示することです。しかし今自分が出くわしている問題点は、ボタンを追加してもジャンプ先が同じ自分自身のサーブレットである以上 doGet内の処理が再度行われ、(4つの引数がnullのため?)エラーになります。

まわりくどくなりましたが、恐らく自分がわかっていないのはサーブレットのごく基本的なところだと思われます。私の問題点、伝わりますでしょうか。。
どこかにボタンを追加し、それをクリックするとdoGet内の処理を再度やることなく、取って来た情報を表示するにはどうしたらいいか知りたいです。
サーブレット関係なく、
HTMLのFORM要素のtarget属性で別のframeを指定すれば良いのでは。
チャットなどでよく見かけます。

>同じ自分自身のサーブレットに四つの引数を伴って戻って来ます

これをする理由がわかりません。

>全く別のサーブレット

これは別のJavaVMで動作しているということでしょうか?
Cappuccinoさんレスありがとうございます。

>同じ自分自身のサーブレットに四つの引数を伴って戻って来ます
>これをする理由がわかりません。

いえ、これをしたいのではなく、したくはないのですがそうなってしまうのが問題でした。(回避方法がわかりませんでした。)サーブレットの前に入力フォーム用のHTMLがありそこで4つの引数をGETメソッドで渡してくるのですがそのケースだと問題ないです。そうではなくてこのServletJDBCCORBAにボタンをつくり、そこでリンク先を自分自身(ServletJDBCCORBA)にした場合、引数がないので4つの引数がnullで渡って来て、そのままnull値を元にplaceOrder()メソッドを呼び出すためエラーになってしまっていました。

多分フレームで分割などすればうまくいくのでしょうが今日が締め切りだったのでとりあえず回避策としてServletJDBCCORBAにリンクを作り、そこから別のサーブレット(JVMが違うのではなく単に違うサーブレットファイルということです)のページに飛ばし、そこでデータを取って来るようにしてとりあえず問題を回避しました。

全く基礎がわかっていないのでこれからHTMLとサーブレットの基本を勉強します。。
レス有り難うございました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング