連載
» 2004年03月06日 00時00分 公開

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

[山田祥寛,@IT]

 前回「Strutsフレームワークの「枠組み」を学ぶ」では、ユーザが入力した名前に対して「Hello,〜」メッセージで応答する、最も基本的なStrutsアプリケーションを構築しました。この「Hello,〜」サンプルを通じて、アクションクラス、アクションフォームBeans、コンフィグレーションファイル、「.jsp」ファイルから構成されるStrutsアプリケーションの全体像がお分かりいただけたことと思います。

 前回もご説明したように、Strutsアプリケーションを理解するに際しては、まずアプリケーションを構成する要素同士の関係、枠組み(フレームワーク)を把握することが重要です。フレームワークさえ理解してしまえば、あとはこのフレームワークに対して、必要なロジック(プログラム)を組み込んでいくだけなのです。そうした意味では、あらかじめ提供されたサンプルを、実際に自分の環境で動かしてみるだけでも良い勉強でしょう。どのモジュールがどのように関係し、どのように配置されているのか、まだ理解があいまいだという方は、いま一度、第2回のサンプルコードなどを題材にぜひ「自分の手を」動かしてみてください。

 今回からは、Strutsアプリケーションの枠組みはすでに理解されていることを前提に、より実践的な例を見ていくことにします。

 本稿では、「書籍登録・更新アプリケーション」を例に、データベース連携アプリケーションについて扱うことにしましょう。データベース連携は、Strutsフレームワークにとって必須の要素ではありませんが、より高度なデータ処理を支える重要な一要素でもあります。Strutsの特性のひとつとして、データベース管理をコンフィグレーションファイル(struts-config.xml)で容易に行うことができる点が挙げられます。

今回扱うサンプル(データベースサーバで管理された書籍情報を一覧表示) 今回扱うサンプル(データベースサーバで管理された書籍情報を一覧表示)

今回紹介するアプリケーションの概要

 最初に、今回登場するファイルの関連図、および、コード実行の内部的な流れを示しておきます。いきなり個々のコードに目を奪われてしまうのではなく、まずはここで全体像を理解することで、きっと皆さんの理解も深められるはずです。細かいことはまずは気にせず、こんな流れで動作しているんだなというくらいで眺めてみてください。

今回登場するファイルの関連図、および、コード実行の内部的な流れ 今回登場するファイルの関連図、および、コード実行の内部的な流れ
今回のサンプルにおける処理の流れ
No. 処理概要
1 「http://localhost:8080/struts/BookViewAction.do」をリクエスト
2 リクエストパス「/BookViewAction.do」に対して要求が行なわれる(実際にはパスの指定にかかわらず、アクションサーブレットが起動)
3 リクエストデータを受け取ったアクションサーブレットが「/BookViewAction」をキーにコンフィグレーションファイル配下の<action>要素を検索。リクエスト処理に使われるアクションクラスを特定する
4 アクションクラスBookViewProcessでデータベースサーバの検索、抽出データのリクエスト属性への設定などを行う
5 処理結果ステータス“success”をキーとして、コンフィグレーションファイルの<action>/<forward>要素を検索。対応するパス(path属性)に処理を転送する
6 最終的な遷移先BookView.jspで、引き継がれたリクエスト属性の値を取得し、クライアントに応答する

 また、本サンプルではデータベースを利用する関係で、あらかじめデータベースサーバ上に以下のテーブルを作成し、なにかしら任意のデータを格納しておく必要があります。

書籍情報テーブル(bok_inf_tbl)のデータレイアウト
フィールド名 データ型 概要
isbn VARCHAR(30) ISBNコード(主キー)
title VARCHAR(50) タイトル
autho VARCHAR(50) 著者名
price INT 価格
publish VARCHAR(50) 出版社名
published DATETIME 刊行日

データソースを登録する

 Strutsでデータベースサーバを扱うに際しては、まず接続先のデータベース(より一般的に、以下では「データソース(DataSource)」といいます)を、アプリケーションに登録する必要があります。データソースの設定方法については、別稿「JNDI活用でデータソース管理を一元化する」にて紹介していますので、詳細はそちらを参照してください。リソース名は「jdbc/Struts」、server.xmlへの設定値パラメータは、以下表の通りとします。

要素
factory org.apache.commons.dbcp.BasicDataSourceFactory
driverClassName org.gjt.mm.mysql.Driver
url jdbc:mysql://localhost/wings?useUnicode=true&characterEncoding=
Windows-31J
usrname root
password root
maxActive 100
maxWait 10000
maxIdle 30

 最低限、driverClassName、url、username、password属性は必須です。その他の項目は適宜必要に応じて指定してください。

 データソースへの接続文字列の意味などについては、「基礎から学ぶサーブレット/JSP 第10回」でも紹介していますので、併せて参考にしてみてください。

アクションクラスからJavaBeansを呼び出す

 以下は、書籍情報リストを生成するに先立って実行されるアクションクラスBookViewProcessです。アクションクラスでは、データベースへの接続のようなビジネスロジックは記述せず、JavaBeansに委ねている点に注目してください。

BookViewProcess.java
(コンパイル結果は「/WEB-INF/classes/struts」に保存)
package struts;

import java.util.*;
import javax.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.struts.*;
import org.apache.struts.action.*;

public final class BookViewProcess extends Action {
  public ActionForward execute (ActionMapping map,
     ActionForm frm,
     HttpServletRequest request,
     HttpServletResponse response) {
    ArrayList objAry=BookInfo.getBookInfos();
    request.setAttribute("book.view.info",objAry.toArray());
    return map.findForward("success");
  }
}

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。