Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Servlet→db→JSPの連携

最近javaの勉強を始めたものです。

Tomcat 5.5.15
MySQL 4.0.13
j2sdk 1.4.2
を使用しています。

現在、HTMLで作成したページからキーを入力し、
サーブレットで値を取得→MySQLへ接続し、
キーの一致するデータをJSPで出力する
といったものを作成しています。

最初にHTMLとサーブレットのみで結果を出力するものを
作成し、こちらを修正している状況です。
(正常な結果が得られています。)

接続部分等はそのままで、

String strSql="SELECT * from person where id=" +in1 ;
ResultSet rs = stmt.executeQuery(strSql);

String no = new String(rs.getString("id"));
String name = new String(rs.getString("name"));

request.setAttribute("no",no);
request.setAttribute("name",name);

getServletConfig().getServletContext().getRequestDispatcher("/sbt_tes/Sbt_output.jsp").forward(request,response);

この様な形でコードを記述してみたところ、
コンパイルは問題なく通りますが、
実行したところ
html で検索ボタンを押す →
アドレス部分がサーブレット名に変わる →
表示がなにもでない
といった状況です。

JSPの呼びだし方法が間違っているのかと思い、
値の取得をとりあえずHTMLから取得したin1を表示する用にしたところ
正常に表示が行われました。

よって、

String no = new String(rs.getString("id"));
String name = new String(rs.getString("name"));

request.setAttribute("no",no);
request.setAttribute("name",name);

の辺りの記述がおかしいのだろうとは思うのですが、
setAttribute等で検索をかけてみても
サーブレットからJSPへSQLで抽出したデータを渡すっといったような
サンプルが見つからない状況です。

これはそもそも記述がおかしいのでしょうか。
それともSELECTで抽出したデータはJSPに渡すことができないのでしょうか?
ご教授願います。

10

回答

99629

閲覧

10件の回答

評価

0

悪いのは JSPファイルだと思います。

JSPの中でNullPointerExceptionとかが発生すると真っ白で何も表示されない状況になる事があります。

評価

0

某師様

ご回答ありがとうございます。

JSPですが、

<%@ page contentType="text/html;charset=Shift_JIS" %>

<html>
<head>
<title> サーブレット→ JSP テスト</title>
</head>

<body>

<table border="1">
<tr><td>ID</td><td>名前</td></tr>
<tr><td><%=request.getAttribute("no")%></td>

<td><%=request.getAttribute("name")%></td></tr>
</table>

</body>
</html>

このような形で記述しております。

評価

0


某師様の
NullPointerException をヒントに色々と検索をかけてみた結果

String no = new String(rs.getString("id"));
String name = new String(rs.getString("name"));

の前に
rs.first();
を入れたら正常に表示されました。

rs.getString....で取得する値は
指定しない限り、一番最初のデータを読むものだと
思っていたのですが、違うようですね;;

ありがとうございました。


評価

0

表示がなにもでないというのが「空テーブル<TABLE>」はできているが値が入っていないっていうのをあらわしているのかよくわかりませんが・・・

Q1.真っ白な画面のときHTMLソースはどうなってますか?
 ・JSPソースにあるHTMLが正常に表示されている場合はQ2へ
 ・表示されていない場合はforwardに失敗してるか某師さまが
  おっしゃるようにJSPの問題か

Q2.真っ白な画面のとき「右クリック⇒最新表示」をやってみても変わりませんか?
 ・変わった場合はJSPの再コンパイルがされていなかったという
  ことかと

同一環境で行ったわけではありませんが、下記環境で正常に起動しましたのでソースミスはないと思いますが・・・

 Tomcat4.1
  J2sdk1.4.2
  DB処理は省略

評価

0

DB処理の個所が原因だったんですね・・

省略したので無駄レスしてしまったなぁ・・・すいません。

評価

0

JSPじゃなかったんですね・・・
大変失礼しました。

評価

0

rsはイテレータだから、nextしないとだめですね。

ところで、

String no = new String(rs.getString("id"));

はnew Stringしないでもそのまま入ると思うんですが。

評価

0

スコットタイガー様
mio様

ご回答ありがとうございます。
今回は1レコード分しかデータが存在しないもので抽出したのすが、
現在複数レコードをJSPに渡す部分の勉強中です。
(配列を使うのかなぁと悩み中)
また質問させて頂くことも有るかと思いますので、
よろしくお願いします。

mio様

String no = new String(rs.getString("id"));
のnew Stringですが、
何故かコンパイル時にnewStringをはずすとエラーが出てしまって
いたので、とりあえずつけてみたら、回避されたのでそのままに
なっています;;
いま修正できる状態ではないので、月曜にでも修正してみます。
(他部分でエラーがでていたんですかね)

評価

0

項目が2つあるようだし、配列よりビーンクラスを作成したほうがいいかも知れません。
とりあえずは、イテレータの考え方を勉強してください。

評価

0

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。