書籍管理ウェブサービス / SpringStruts


書籍管理ウェブサービス

SpringとStrutsの連携について

今回の開発では、StrutsのActionクラスにおいても、 SpringのDI機能を享受する為に、 若干面倒な手順を踏むことになる。

Actionクラス

通常は、Actionであるとか、 LookupDispachAction?であるとかのクラスを拡張してActionを作成する。 Springを使う場合は、 Springの機能を使いやすくするために、 ActionSupport?LookupDispachActionSupport?といった、 サポート機能付クラスを拡張して、 Actionを作ることになる。

内容を作りこむうえで、 これらのクラスに影響を受けることはさほどないと思う。

だがそれとは別に、 WebサービスをDIしてもらうために、 WebサービスのBeanを受け取るための、 インタフェースを用意しておく必要がある。

今回の開発では、 このメソッド名のつけ方のルールとして、 そのサービスのインタフェース名をそのままつけることにする。

たとえば、UserManager?というサービスだとすると、

public void setUserManager(UserManager userManager) 

というようなメソッドを作っておく。

struts-config.xmlとaction-definition.xml

通常、Actionを作るときには、 struts-config.xmlに以下のような記述を行う。

<action path="/checkLogin" type="jp.co.nskint.wsrg.bookshelf.action.LoginAction"
        name="loginForm" validate="true" input="/login.do"/>

Springの場合は、以下のようになる。

<action path="/checkLogin" name="loginForm" validate="true" input="/login.do"/>

見てのとおり、typeが無い。 pathとActionを結びつけるのは、 Struts側ではなくSpring側で行われるからである。

それに伴い、pathとActionを結びつける設定が、 別途必要となる。 この場合以下のようになる。

<bean name="/checkLogin" class="jp.co.nskint.wsrg.bookshelf.action.LoginAction">
 <property name="service">
  <ref bean="userManager"/>
 </property>
</bean>

beanタグのname属性にpathの値である"/checkLogin"、 class属性にtypeの値であった"jp.co.nskint.wsrg.bookshelf.action.LoginAction?"を記述している。

またここで、beanタグの内容として、

 <property name="userManager">
  <ref bean="userManager"/>
 </property>

と書かれている。 これは、LoginAction?のuserManagerプロパティ(setUserManager?メソッド)に、 userManagerというbeanがセットされるという意味である。

まとめ

上記の内容を実際に実装例として提供する。 *1


*1 ビジネスロジックの類は実装していない