特集
2004/04/23 17:45 更新


特集:第3回 Strutsをチーム開発に生かす「XDoclet」の活用 (4/8)


取り上げるサンプルアプリケーション仕様

 本稿では、画面1に挙げるよう、入力フォームのサンプルアプリケーションの作成を例に、XDocletを使ったStrutsアプリケーションの開発手順を紹介する。

fig001.gif

画面1■入力フォームのサンプルアプリケーション


 また、アプリケーションの開発用ディレクトリは、表1のように構成していることを前提とする。使用するAntビルドファイル(build.xml)も、このディレクトリ構成を前提に作成してある(※1)。

 ここでStruts設定ファイルやvalidator検証設定ファイルが無いことに気づいただろうか? これらは、ビルドの際にXDocletが生成するので、用意しておく必要がないのだ。


※1)下の表1を見て、Eclipseプロジェクト用設定ファイルがあることに気づくだろう。この「formsample」ディレクトリは、そのままEclipseプロジェクトとしてインポート可能だ。Eclipseで使用する場合はインポート後、プロジェクトのプロパティからJavaのビルドパスの設定を行い、servlet.jarのパスを正しく修正する必要がある。

表1■アプリケーションのファイルとディレクトリ構成
ディレクトリ ファイル 内容
formsample .classpath Eclipseプロジェクト用設定ファイル
formsample .project Eclipseプロジェクト用設定ファイル
formsample build.xml Antビルドファイル
formsample build.properties Antビルドファイル用プロパティファイル
formsample/app index.jsp トップページ用JSPファイル
formsample/app input.jsp 入力フォーム用JSPファイル
formsample/app/WEB-INF/ *.tld StrutsカスタムタグライブラリのためのTLDファイル。Struts標準のものをそのまま使用
formsample/app/WEB-INF/ validator-rules.xml Strutsで標準で用意されているValidatorルールの定義ファイル。Struts標準のものをそのまま使用
formsample/app/WEB-INF/ web.xml Webアプリケーションのデプロイメントディスクリプタ
formsample/app/WEB-INF /classes   コンパイル済みクラスファイル出力ディレクトリ
formsample/app/WEB-INF/lib *.jar アプリケーションで必要なライブラリJAR。Sturts標準のものをそのまま使用
formsample/app/WEB-INF/src
/java/filters
SetCharacterEncoding Filter.java リクエストパラメータの文字エンコーディング名指定を行うServletFilterクラス。Tomcatのものをそのまま使用
formsample/app/WEB-INF/src/java/study/xdoclet
/struts/action
InputAction.java Actionクラス
formsample/app/WEB-INF/src/java/study/xdoclet
/struts/form
InputForm.java ActionFormクラス
formsample/app/WEB-INF
/src/merge
*.xml XDocletが使うマージファイル
dist   WARファイル出力ディレクトリ

1. ソースコードの作成

 まず、ActionFormクラス(InputForm.java)を見てみよう。Validatorによる入力データ検証を行うため、スーパークラスはorg.apache.struts.validator.ValidatorFormとなっている。そのほかは、入力フォーム(input.jsp)から送られるパラメータ名に合わせた名前のjava.lang.String型のプロパティ(計6個)と、各プロパティに対するアクセッサメソッド(計12個)を持つ通常のActionFormクラスだ。ここで、クラス宣言部のJavadocコメント部分に注目してもらいたい(リスト2)。

リスト2■InputForm.javaのクラス宣言部

package study.xdoclet.struts.form;
import org.apache.struts.validator.ValidatorForm;
/**
 * InputForm
 * @struts.form
 *  name="inputForm"
 * @author tetsuo
 * 
 */
public class InputForm extends ValidatorForm {
    //〜略〜
}

 「@struts.form name="inputForm"」の部分が、XDoclet用のタグだ。ビルドの際に、XDocletはJavaソースコードとJavadocコメントに記述されたXDoclet独自のタグを読み取り、Struts設定ファイルの<form-bean>要素を自動生成する(図1)。

fig002.gif

図1■form-bean要素の生成例


 次に、Actionクラス(InputAction.java)を見よう(リスト3)。ソースコードの作成は通常のActionクラスとまったく変わらない。ここでも、クラス宣言部に記述されたJavadocコメントに注目してもらいたい。

リスト3■InputAction.javaのクラス宣言部

package study.xdoclet.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
 * InputAction
 * @struts.action
 *  name="inputForm"
 *  path="/input"
 *  scope="request"
 *  input="/input.jsp"
 *  validate="true"
 * @struts.action-forward
 *  name="success"
 *  path="/index.jsp"
 * @author tetsuo
 */
public class InputAction extends Action {
    //〜略〜

 リスト3は、Strutsアプリケーションの開発を経験した人であれば、見慣れた属性名が並んでいることに気づくだろう。「@struts.action」タグに記述されたそれぞれの属性は、Struts設定ファイルの<action>要素のそれぞれの属性に対応し、「@struts.action-forward」タグは、<action>要素内の<forward>要素に対応し、「name」、「path」それぞれの属性が<forward>要素の「name」、「path」属性に対応していることが容易に推測できるはずだ。ActionFormクラスの場合と同様に、XDocletはビルドの際に、ActionクラスのソースコードとJavadocコメントに記述されたXDoclet独自のタグを読み取り、Struts設定ファイルの<action>要素を生成する(※2)。

fig003.gif

図2■action要素の生成例。使うことのできるXDocletタグは、次ページの表2を参照にしてほしい



※2)例外処理の<exception>要素に対しては、「@struts.action-exception」タグが用意されており、Struts設定ファイルに記述する<exception>要素に設定する属性とまったく同一の属性が用意されている。

前のページ | 1 2 3 4 5 6 7 8 | 次のページ

[阿島哲夫,ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.