コントローラServletは、あなたの必要とするマッピングをどうやって得るのでしょうか?それは、単にActionMappingのインスタンスを新たに作り、適切な全てのセッターメソッドを呼ぶような、小さなJavaのクラスを記述する事で可能です(が単調です)。
このプロセスをより容易にするために、StrutsはDigesterモジュールを含んでいます。これは適切なマッピングのXMLベースの記述を読み込み、適切なオブジェクトを生成することができます。Digesterに関する詳しい情報は、APIドキュメント を参照してください。
開発者が行う事は、struts-config.xmlという名前のXMLファイルを作成し、アプリケーションのWEB-INFディレクトリに置く事です。
このドキュメントのフォーマットは、"struts-config_1_0.dtd"に定義が規定されています。最も外側のXML要素は、<struts-config> でなければなりません。
<struts-config>要素の内部に、アクションのための2つの重要な要素を記述します
<form-beans>
このセクションは、フォームBeanの定義を含みます。
それぞれのフォームBeanに<form-bean>要素を適用する場合、下記の属性が重要です。
-
name:このBeanに対するユニークな識別子で、対応するアクションマッピングの中で、それを参照するために使用されます。
通常、このフォームBeanが格納されるリクエストまたはセッション属性の名前でもあります。
-
フォームBeanの完全修飾されたJavaクラス名。
<action-mappings>
この章の内容は、アクションの定義です。
各アクションを <action>要素を用いて定義します。
それぞれのアクション要素は下記の属性の定義を要求します
-
path: アクションのアプリケーションコンテキスト相対パス
-
type: アクションクラスの完全修飾されたJavaクラス名
-
name: このアクションで使う<form-bean>要素の名前
サンプルアプリケーションのstruts-config.xmlは、“ログオン”機能のための下記のマッピングエントリを含んでおり、これを使って要件を説明します。
注:他の全てのアクションへのエントリーは省きました
<struts-config>
<form-beans>
<form-bean
name="logonForm"
type="org.apache.struts.example.LogonForm" />
</form-beans>
<global-forwards
type="org.apache.struts.action.ActionForward" />
<forward name="logon" path="/logon.jsp"
redirect="false" />
</global-forwards>
<action-mappings>
<action
path="/logon"
type="org.apache.struts.example.LogonAction"
name="logonForm"
scope="request"
input="/logon.jsp"
unknown="false"
validate="true" />
</action-mappings>
</struts-config>
はじめに、フォームBeanを定義します。基本的な"org.apache.struts.example.LogonForm"クラスのBeanは、論理名"logonForm"としてマップします。
この名前は、フォームBeanをセッションまたはリクエスト属性で使う時の名前です。
"global-forwards"セクションは、一般的に用いられるJSPページの論理名マッピングを作る場合に使います。
これらの各フォワードは、アクションマッピングインスタンスへの呼び出しによって利用可能となります。すなわち、actionMappingInstance.findForward("logicalName")です。
ここに示したように、マッピングはパス/logonにマッチします
(実際には、サンプルアプリケーションでは、拡張子マッピングを使っています。
JSPページ内で指定する要求リクエストURIは/logon.doで終わるでしょう)。
このパスとマッチするリクエストが届いた時、
LogonActionクラスのインスタンスが作られ(初回のみ)、そして使用されます。
コントローラServletは、キーlogonFormで、
セッションスコープ内のBeanを探し、もし必要なら指定されているクラスのBeanを作成し保存します。
オプションですがとても有用なのは、ローカルな"forwardエレメントです。
サンプルアプリケーションでは、多くのアクションがアクションマッピングの一部として、ローカルな"success"または"failure"のフォワードを含んでいます。
<!-- Edit mail subscription -->
<action path="/editSubscription"
type="org.apache.struts.example.EditSubscriptionAction"
name="subscriptionForm"
scope="request"
validate="false">
<forward name="failure" path="/mainMenu.jsp"/>
<forward name="success" path="/subscription.jsp"/>
</action>
これら2つの特別なプロパティを使えば、
サンプルアプリケーションのActionクラスは、
ページデザイナーが用いるJSPページの実際の名前には、ほとんど依存しません。
ページは、(たとえば)再デザインの間にリネームが可能であり、
Actionクラス自身はまったくその影響を受けません。
もし、"next"という名前のJSPページがActionクラス内に直接記述されていたとしたら、
それら全てのクラスに変更が必要になるでしょう。
もちろん、アプリケーションのためのローカルフォワードプロパティを何でも定義可能です。
もう1つの有用なセクションは<data-sources>で、アプリケーションで使用するデータソースを指定します。
これは、アプリケーションの基本的なデータソースをstruts-config.xmlの中に指定するやり方です。
<struts-config>
<data-sources>
<data-source
autoCommit="false"
description="Example Data Source Description"
driverClass="org.postgresql.Driver"
maxCount="4"
minCount="2"
password="mypassword"
url="jdbc:postgresql://localhost/mydatabase"
user="myusername"/>
</data-sources>
</struts-config>
データソースの探し方の情報は、
Accessing Relational Databasesを参照してください。