前回「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で、引き継がれたリクエスト属性の値を取得し、クライアントに応答する | |
また、本サンプルではデータベースを利用する関係で、あらかじめデータベースサーバ上に以下のテーブルを作成し、なにかしら任意のデータを格納しておく必要があります。
フィールド名 | データ型 | 概要 | |
---|---|---|---|
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回」でも紹介していますので、併せて参考にしてみてください。
以下は、書籍情報リストを生成するに先立って実行されるアクションクラスBookViewProcessです。アクションクラスでは、データベースへの接続のようなビジネスロジックは記述せず、JavaBeansに委ねている点に注目してください。
BookViewProcess.java (コンパイル結果は「/WEB-INF/classes/struts」に保存) |
package struts; |
Copyright © ITmedia, Inc. All Rights Reserved.