2007-05-30

すぐに始める Struts2

これは、Struts2を動かす最短の動作をメモしたもの。
スターターパッケージのようなものを使わず、最小限の構成を手で作ることによってStruts2を理解することを目標にしている。
Struts2の設定は CLASSPATH上のstruts.xmlに書くことになっているが、下記の例では無くても一応動作する。
物事の関連がわかりやすいよう、各所に色を付けておいた。

/WEB-INF/libに入れるもの

freemarker-2.3.8.jar
ognl-2.6.11.jar
struts2-core-2.0.6.jar
xwork-2.0.1.jar

/WEB-INF/web.xmlに書くこと

<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>your.action.package.here</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

作るクラス

/WEB-INF/classes/your/action/package/here/SimpleAction.class

(ソース)
package your.action.package.here;

import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;

@Results({
@Result(name="success",value="simple.jsp"),
})
public class SimpleAction {
private String myProperty = "My Property String";
public String getMyProperty()
{
return myProperty;
}
public String execute() throws Exception
{
return "success";
}
}

作るJSPファイル

/simple.jsp

(ソース)
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<body>
<h1>Simple</h1>
<s:property value="myProperty" />
</body>
</html>

コールするURL

http://yourhost:port/appname/simple.action

表示されるHTML

<html>
<body>
<h1>Simple</h1>
My Property String
</body>
</html>

解説

struts2はサーブレットフィルタとして動作する。フィルタのinit-paramに actionPackagesというパラメータをセットすると、そこで指定されたパッケージ以下にある *Action.classを探し出して全てをアクションクラスとして登録してくれる(*の部分がアクション名になる)。これは「設定より規約」のムーブメントを意識した機能だと思われるが、現在の所Experimentalな機能という扱いのようだ。

Struts2のアクションクラスは何らかの基底クラスを継承することを義務づけられていない(が、ActionSupportなどのサポートクラスを継承しても良い)。Struts2は、アクションに対応するURLがリクエストされるとアクションクラスをインスタンス化し、setterメソッドを使用して入力パラメータをセットしたのちに execute()メソッドをコールする。Spring-MVCのControllerクラスは基本的にシングルトンで、パラメータは関連づけられたCommandクラスのオブジェクトによって渡されるのに対し、Struts2ではアクションクラスのオブジェクトがリクエスト毎に Instantiateされるため、いわゆるフォームBeanの役割を兼ねることが出来る。(このあたりのモデルはS2Strutsに近い、どちらが先なのかは知らないが)

execute()メソッドの返す結果文字列に対応するビューの名前は Resultアノテーションを使ってセット出来る。従来なら外部の設定ファイルで別に定義されていたものが、Struts2ではソースコードの中に統合できることになる。アクションクラスのモジュール独立性を考慮するならこれは無条件に賛成を得られる方式ではないが、どうせWebアプリケーションのControllerなど作り捨てで再利用などしようはずもないという現実主義に基づくのであれば有用である。
(誤解のないように言っておくと、ここではControllerとModelを的確に分離するように設計ができていることが前提になっているのであって、コンポーネントの再利用自体を諦めているわけではない)

JSPファイル中では /struts-tags タグライブラリを用いることでコントローラ(アクション)オブジェクトの持つプロパティにアクセスすることが出来る。

ラベル:

0 件のコメント:

コメントを投稿

<< ホーム