• 締切済み

JSPのタグリブを使ったDBアクセスの基本的な記述

JSPのスクリプトレットを使ってとりあえず以下のコードを書きました。 とりあえず動いています。しかし今っぽく無くダサいので タグリブを使った記述に書き換えようと思っています。 ---------------------- ResultSet rs = st.executeQuery(sql); ResultSetMetaData mdata = rs.getMetaData(); int numberOfColumns = mdata.getColumnCount(); for (int i = 1; i < numberOfColumns + 1; i++) { out.println("\t<tr><th>" + mdata.getColumnName(i)); } while (rs.next()) { out.println("\t<tr>"); for (int i = 1; i < numberOfColumns + 1; i++) { out.println("\t\t<td>" + rs.getString(i)); } } ---------------------- 最終的にはコネクション取得の部分からタグにしたいのですが 取り合えずばループ部分だけでも変更したいと取り組みました。 いろいろダメなところはあるのですが、 下記のコードすらまともにかけていない状態です。 ---------------------- <c:forEach var="i" begin="1" end="2"> ${mdata.columnName(${i})} </c:forEach> ---------------------- とりあえずは引数が必要なgetterの記述側からないのですが 上記の(ダメダメな)タグのコードを無視し意図を汲み取って その先のコードまで教えていただけると大変助かります。 よろしくお願いします。

みんなの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

今っぽくしたいのであれば データベース接続は 専用にデータアクセス用のクラスを作成し そこに記述。 具体的には 統合Servlet →業務制御クラス →データアクセス →結果オブジェクト →JSP という流れにして JSPでは結果オブジェクトからのデータ取得に留めるべき だね。 これをMVCという。 M:Model つまりデータを格納するもの V:View つまりのところユーザインターフェース C:Control つまり制御部 この3つの分離こそがオブジェクト指向の理想なのです。 仕様変更の際、MVCのうち一つだけを変えれば良いという理想形。 今回の場合 JSP上に直接データアクセスを記述しているとこから推測するに ブラウザから直接JSP呼んでいるんだね。 なので今更大改造は厳しいか。 とりあえず質問部分の回答だけど やるならsqlタグの利用を。 http://lab.moyo.biz/recipes/java/jsp/jstl/sql-transaction.xsp この辺りから参照すると良いかも。

pringlez
質問者

お礼

最初はDoltengを使ってS2+SAStruts+Hibernateとかでやろうと 思っていたのですが逆にいろいろ大変になってしまいやめました。 どうせテーブルは10もなく、画面数も10-20くらいの超極小規模の テスト開発なので、JSPのみで構築することにしました。 sqlタグは最初使っていたのですがよくわかりませんでした。 というかタグが全体的によくわかっていませんでした。 サンプルを見てそれがきっかけでようやくわかったのは <sql:query var="rs" sql="select文" /> で返ってくるrsはResultSetではないということ。 というか、タグリブでは元の良く使うクラスに似た 独自クラスを使う場合があるということ。 それを確認するには、実際に使われているクラスを 確認しながら開発しなければならないこと などがわかりました。 この辺がわかったことにより理解が深まりました。 ありがとうございました。

専門家に質問してみよう