Apache Struts(アパッチ・ストラッツ)は、Apacheソフトウェア財団のApache Strutsプロジェクトにて開発されているオープンソースのJava Webアプリケーションフレームワークである。

概要 元々はの作成したソフトウェアであり、2000年5月にApacheソフトウェア財団に寄付された。当初はJakarta Projectに位置しており、Jakarta Struts(ジャカルタ・ストラッツ)と呼ばれていた。2005年にApacheのトップレベルプロジェクトに昇格した。

Apache Tomcatなどのサーブレットコンテナ上で動かすことができる。サーブレットとJSPによる開発環境下に登場したStruts1は広く受け入れられ、2005年頃にはJava Webフレームワークのデファクトスタンダードと呼ばれるほどの普及を見せていた。しかしソフトウェア技術の進歩とともに欠点も多く指摘されるようになり、2007年にリリースされたStruts2ではそれまでの仕組みを捨て、WebWork2として開発されていた別のフレームワークをベースとしたものへと置き換えられている。

フレームワークにはModel View Controllerアーキテクチャが適用されている。類似したフレークワークとしてJSF (Java Server Faces) や Spring MVCフレームワークがある。

特徴 (Struts1) 整備されたJSPカスタムタグによってJavaコードはJSPファイルと分離され、従来のJSPのようにHTMLタグの中に<%と%>で囲まれたスクリプトレットであるJavaソースコードを混在させる必要なく読みやすく洗練されたコーディングができるようになっていた。

主なStrutsのタグライブラリ HTML HTMLのフォーム部分で利用する Logic 条件分岐や繰り返しなどの制御ロジックを提供 Beans Modelで定義されたJavaBeansにアクセスする機能を提供 Nested 属性名の記述を省略可能にする Tiles 複数のJSPで利用する記述を共通化するテンプレート機能を提供

またStrutsでは ActionServlet が用意されており、画面の遷移をコントロールする設定ファイル (struts-config.xml) を変更するだけで容易に遷移先を変えることができる機能を提供していた。 アクションサーブレットでは画面で入力された内容を検査する Validator の機能が用意されており、設定ファイル (validator-rules.xml) を変更するだけで入力チェックの仕様を変更することが可能であった。入力チェックするデータは一旦アクションフォームと呼ばれるBeansに格納された。

最終リリースは2008年10月4日の1.3.10で、2013年4月5日にサポート終了を迎えた。2014年現在でも多くのサイトがStruts1を使用しているが、同年4月には深刻な脆弱性も発見されている。

特徴 (Struts2)

Struts2では、Struts1と比べて下記のような改善がなされている。

アノテーションや設定より規約による設定ファイルの削減 依存性の注入 (DI) POJO

また、OGNL (Object-Graph Navigation Language) と呼ばれる式言語が搭載されており、これにより動的なパラメータを扱うことを可能としている。一方、この機能ではたびたび深刻なセキュリティホールが発見されており、利便性の反面セキュリティ面の脆弱さも指摘されている。

セキュリティーホール Struts2の多数のセキュリティーホールが攻撃対象になり、多数の被害を出している。 GMOペイメントゲートウェイ(東京都 ・住宅金融支援機構) - クレジットカード番号36万件流出井上英明「日経 xTECH 猛威振るうStruts2脆弱性への攻撃、どうすれば防げたか」、日経BP社、2017年3月22日 JETRO - メールアドレス2万件流出 日本郵便 - メールアドレス2万件流出 ぴあ - クレジットカード番号3万件流出 国土交通省土地総合情報システム - 不動産取引価格アンケート回答4,335件、所有権移転登記情報194,834件が流出した可能性あり

派生版 Super Agile Struts (SAStruts) Seasarプロジェクトが公開している、Struts1と独自のDIコンテナであるSeasar2をベースに、より素早い開発を行うことを目指したフレームワーク。 TERASOLUNA Server Framwork for Java NTTデータが公開している、Struts1とSpring, iBATISをベースに、独自の拡張を行ったサーバサイドフレームワーク。

競合するMVCフレームワーク Strutsは、よくドキュメント化され成熟し普及した、フロントエンドのフレームワークであるが、「軽量」フレームワークとして分類される、Spring MVC, Stripes, Apache Wicket, Play Framework, Apache Tapestry といったものがある。

StrutsからスピンオフしたWebWorkフレームワークは、Strutsオリジナルと同じアーキテクチャを保持したうえでの強化と洗練を目的としていたが、StrutsとWebWorkは再びマージされ、Struts2としてリリースされた。

その他のJavaベースのMVCフレームワークとして、WebObjectsやGrailsもある。

脚注

関連項目 JavaServer Faces (JSF) WebWork Spring Framework

外部リンク

Apache Struts Super Agile Struts (SAStruts) TERASOLUNA Server Framework for Java