minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

Struts2 はWebに特化したフレームワークなので
通常は他のJavaフレームワークと組み合わせて使う。
今回は、Spring と一緒に使ってみる。

必要なjarファイルは以下の二つ。

あとは設定ファイル。
まずはweb.xml。

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

こんな感じで、listener にSpringのコンテキストローダを追加。
あとはプロパティでこのように指定すると、WEB-INF配下に置いたxmlファイルを
設定ファイルとして読み込むようになる。
ワイルドカード指定なので、複数のファイルに分けることが可能だ。
通常は用途に応じて分ける。

applicationContext-action.xml
applicationContext-dao.xml

ここら辺は自由なので、お好きなように。
そしたら struts.xml に次の一文を追加。

<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />

あとは、アクションの定義をSpring経由に変更する。

struts.xml

<action name="main" class="org.limy.lrd.web.LrdAction">
    <result type="velocity">/index.vm</result>
</action>

例えば今までこのようになっていたら、これを以下のようにする。

struts.xml

<action name="main" class="lrdAction">
    <result type="velocity">/index.vm</result>
</action>

applicationContext-action.xml

<bean id="lrdAction" class="org.limy.lrd.web.LrdAction"
        singleton="false">
</bean>

こうすると、struts.xml で指定した action#class はただのクラスではなく
Spring Bean に早変りする。
singleton="false" とするのはお約束。
Spring ではBeanのデフォルト設定が singleton なのだが
ウェブでは普通 non-singleton にする。
大昔の言い方で言えば、SingleThreadModel だ(知ってる人いるのか)。

Spring についての詳しい説明は、他のサイトに譲ることにする。
「Bean管理するヤツ」とでも理解しておけばいい。
実際、それさえ知っておけば何とかなる。

これで Struts2 から Spring Bean が使えるようになった。
後は通常の Spring 開発同様に作業ができる。
例えばDAOを使いたければ iBatis のようなDBフレームワークが使える。
これらは全てSpring経由で使えるので、Webアプリだろうが使い方は一緒。
便利な世の中になったものだ。