検索
連載

Strutsとデータベースの連携を学ぶStrutsを使うWebアプリケーション構築術(3)(2/2 ページ)

Share
Tweet
LINE
Hatena
前のページへ |       

データベースからの抽出結果をJavaBeansクラスにセットする

 データベースへの接続・操作を担当するのは、JavaBeansクラスBookInfoの役割です。BookInfoクラスのgetBookInfosメソッドでは、書籍情報テーブル(bok_inf_tbl)の内容を配本日(publishedフィールド)降順で抽出し、取得した結果セットを後続のビュー(BookView.jsp)に引き渡します。

 ただし、取得した結果セットをそのまま「.jsp」ファイルに引き継いでも、「.jsp」ファイルではこれを扱うことができません(もちろん、スクリプトレットなどを利用すれば可能です)。後続の「.jsp」ファイル内において、「Strutsタグライブラリ」だけで結果セットの内容を処理するには、結果セットからJavaBeansクラスの配列を作成しておく必要があるのです。Strutsでは標準的に結果セット(ResultSetオブジェクト)を処理するための機能(タグライブラリ)は用意していませんが、データをJavaBeans配列の形式に加工しておくことでデータを容易に処理することができるようになります(処理方法については後述)。

 BookInfoクラスでは、bok_inf_tblテーブルから抽出した結果セットの1行を1つのオブジェクトで表現します。getBookInfosメソッドでは、データソースから抽出した結果セットの内容を1行ずつ取り出し、BookInfoクラスの各プロパティ(フィールド)に格納していきます。出来上がったBookInfoクラスは、ArrayList(可変配列)に順に追加していくことで、最終的にループ処理がすべて完了したときには、BookInfoクラスの配列ができているというわけです。

 なお、ここではデータベース操作の基本的な手法については割愛しますので、詳細は「基礎から学ぶサーブレット/JSP 第10回」「JNDI活用でデータソース管理を一元化する」を参考にしてください。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 完成したArrayListオブジェクトは、HttpServletRequest#setAttributeメソッドを介してリクエスト属性“book.view.info”として格納します。

JavaBeansクラスの内容を「.jsp」ファイルで出力する

 これで、データを表示するための準備ができましたので、いよいよビュー(「.jsp」ファイル)の構築です。上で用意されたBookInfoクラスの配列を、「.jsp」ファイル上でグリッド表に展開してみましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 配列から順番に要素を取り出し、出力するのは、<logic:iterate>要素の役割です。name属性で指定された「属性」値を、scope属性で指定されたスコープから検出します。id属性は、<logic:iterate>要素の配下で、取り出された要素(個々のJavaBeansクラス)にアクセスする場合の変数名となります。

 <logic:iterate>要素配下では、<bean:write>要素を使用することで、JavaBeansクラスの個々のプロパティにアクセスすることができます。<bean:write>要素のname属性は、<logic:iterate>要素のid属性に対応している必要があります。property属性には、取得したいプロパティ名を、それぞれ指定してください。

 なお、タイトル列には、詳細画面(次回紹介)にジャンプするためのハイパーリンクを作成することにします。ハイパーリンクの作成には、<html:link>要素を使用します。以下に、<html:link>要素で利用可能な主な属性を挙げておくことにしましょう。

<html:link>要素の主な属性
属性 概要
action リンク先のアクション名
paramId クエリ情報のキー名
paramName クエリ情報の値(JavaBeansクラス)
paramProperty クエリ情報の値(プロパティ名)

 配下には、リンク文字列として使用される文字列を指定します。つまり、<html:link>要素によって、(例えば)以下のような<a>タグが生成されます。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 <logic:iterate>要素と併用することで、一覧表に個別画面へのリンクを生成するこの手法は、比較的よく利用する定石的な方法でもありますので、きちんと押さえておいてください。

関係ファイルをマッピングする

 最後に、これまで作成したアクションクラス、アクションフォームBeans、「.jsp」ファイルを、コンフィグレーションファイル上でマッピング(関連付け)して、完了です。struts-config.xmlに、以下のリストの赤字部分を追記してください。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 <action>要素の設定については、すでに「第2回 Strutsフレームワークの「枠組み」を学ぶ」でもご紹介したので、さらに加えるべき点はありません。復習も兼ねて、第2回の解説と照らし合わせながら、自分なりに解釈してみてください。

 なお、このようにコンフィグレーションファイルを設定した場合、アプリケーションは以下のURLで呼び出すことができます。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 末尾の見慣れない拡張子「.do」を、あるいは不思議に思われた方がいらっしゃるかもしれません。しかし、これはれっきとしたStrutsの標準的な拡張子です。第1回で作成したweb.xmlをもう一度ご覧いただくと、アクションサーブレット(action)に対して、拡張子「.do」が関連付けされていることがお分かりになるはずです。

 つまり、Strutsでは拡張子「.do」でURLを指定することで、必ず一度アクションサーブレットを呼び出しているというわけです。アクションサーブレットは、URLからアクション名(ここでは「BookViewAction」)を取得し、これをキーとして関連するアクションフォームBeansやアクションクラスをコールします。

 第2回のサンプル(input.jsp)で、拡張子「.do」を意識する必要がなかったのは、ただ単に<html:form>要素がaction属性の指定値に対して、内部的に拡張子「.do」を付加していたからにすぎません。このように、ブラウザから直接にStrutsアプリケーションを呼び出す場合には、「.do」を明示的に指定する必要があります。

まとめ

 以上、今回はStrutsアプリケーションからデータベースにアクセスするための方法を学習しました。今回学習したのは最も基本的な内容にすぎませんが、逆にいうと、多くの状況で応用可能な「定石」でもあります。ただ記事を読み流すだけではなく、自分の手を動かしつつ、自分の目で動作を確認してみてください。きっとそこには「読む」だけでは得られなかった新たな発見があるはずです。


前のページへ |       

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る