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