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アプリだろうが使い方は一緒。
便利な世の中になったものだ。