情報が少ないStruts2.1

現在、当たり前のようにシステム開発で利用されているSpringFrameworkやHibernateなどのオープンソース・フレームワーク。それらオープンソース・フレームワークの先駆けとなったStrutsは、クレイグ・マクナラハンがビーチサイドで原案を書き上げ、バージョン1.0として公開されてから、今年で早くも10年が経とうとしています。そして約10年を経てもなお、Strutsは開発者からの衰えない人気を保っています。

しかし、国内でのStruts人気は、最初に発表されたStrutsの系譜を引き継ぐバージョン番号に1を冠するStruts1系に対するものであり、WebWork2と合体したバージョン番号に2を冠するStruts2系の人気は今ひとつないように思えます。最近では、Struts2系の最新バージョン2.1.6も発表され、Struts1系よりも随分と簡単に便利になりましたが、国内ではあまり話題になっていません。

本稿では、いまだに情報の少ない最新のStruts2系であるStruts2.1(2.1.6)のエントリレベルの読み物として、Struts1系の経験者を主な対象に、Struts1系と比較しながらStruts2.1の特徴である、POJO(Plain Old Java Object)ベースのアクションクラスやアノテーション、定義ファイルを最小化するConventionプラグイン、Spring2.5との連携などを解説します。

Struts2.1の構造

まず最初に、図1をご覧下さい。基本的にはStruts1系もStruts2.1もこの図1で構造の概略を表すことが可能です。

図1: Strutsの構造

Struts1系とStruts2.1は、その違いだけが大きくクローズアップされますが、図1を参照して分かるように、Webアプリケーションを作成するための、フロントコントローラ型のフレームワークと捉えれば、Struts1系とStruts2.1は全然違う訳ではないことが分かります。

もちろん違いもあります。図1で「Struts」と書かれている部分が、Struts1系ではサーブレットである「ActionServlet」だったのに対し、Struts2.1ではFilterである「StrutsPrepareAndExecuteFilter」に変わっています。その影響を受けて、Struts2.1のweb.xml(リスト1)の設定はFilterの設定をおこなうように変わっています。しかし、大きく捉えれば、Struts1系とStruts2.1の違いは、その部分だけなのです。

リスト1: Struts2.1のweb.xml

……
<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareA  ndExecuteFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
……

なお、Struts2.0では「StrutsPrepareAndExecuteFilter」ではなく「FilterDispatcher」を使用していましたが、Struts2.1では「FilterDispatcher」は非推奨になっています。ただし、「StrutsPrepareAndExecuteFilter」を利用した場合に日本語の文字化けが確認されています。非推奨の「FilterDispatcher」でも動かない訳ではないので、当面は非推奨の「FilterDispatcher」を利用することも考えましょう。