Struts!

Revised: 30th/Nov./2002

strut

Struts とはなんだろうか

Struts は、Web アプリケーションのフレームワークです。開発しているのは、Jakarta プロジェクトというところです。ここは、HTTP サーバで有名な Apache Software Foundation 内のプロジェクトの一つで、専ら Java 関係のサーバ技術を開発しています。Tomcat というアプリケーション・サーバを開発しているところでもあります。Jakarta では、Tomcat、Struts、Turbin、Ant、Alexandria など、25個のサブプロジェクトが走っています(2003年1月現在)。

フレームワークとはなんだろうか

Struts フレームワークは、ウェッブ・アプリケーションとして共通の機能をまとめたパッケージです。アプリケーション開発者は、それらの提供される機能の枠組みの中で、必要な部分だけを開発することになります。フレームワークはパッケージの集合、クラスとインタフェースの集合であるという点では、クラス・ライブラリと同じなのですが、大きく違う点が一つあります。それは、全体として一つのアプリケーションとして機能するように、相互の連携が緊密になっているということです。

フレームワーク内のクラスたちは、なるべく独立するように API が設計されているのですが、各々の役割/責任が、全体の枠組みの中で明確且つ相互補完的になっているのです。これを、モジュール強度が高いと表現します。一言で言えば、フレームワークとは不完全なアプリケーションのことであり、開発者はそれを完成させることで、一つのアプリケーションを開発することになります。

よくできたデザインのフレームワークに則ることによって、ウェッブ・アプリケーションを開発する度に、何度も同じように必要となるような、"Boring" な作業を減らせます。また、スキルのない開発者でも、開発製品の品質を高めることができます。

Struts を使うことによって、デリバリ(納期)を短縮し、クオリティ(品質)を高めることができると期待されます。また、工程が減らせるので、コスト(原価)を抑えることにも繋がります。今、Struts を使ったアプリケーション開発が注目されています。

Servlet/JSP と MVC モデル

MVC とは何か

Struts は MVC モデルに則っています。そもそも MVC 自体は、ソフトウェアを、データの実体であるモデル、ユーザインタフェースであるビュー、全体の制御を司るコントローラの三つに分割して考えるデザイン・パターンであり、古くからある良く知られた概念です。これは専ら GUI アプリケーションの設計概念で使われており、 Java でも Swing も MVC モデルに則って設計されています。

サーブレット登場

サーバサイドの Java はサーブレットから始まりした。サーブレットは CGI のようなマルチプロセスで起動/終了を繰り返すようなヘビーなものではなく、マルチスレッドでサーバに常駐する形で動作するため、サーバへの負荷低減に貢献し、すぐに広く使われるようになりました。しかし、 HTML の出力で println() を繰り返す面倒で退屈な作業は、ダブル・クオーテーションをバックスラッシュでエスケープする必要がある、 HTML の階層構造が一見して分かりにくいなどのバギーな問題も含んでいました。

JSP 全盛

これに応える形で JSP が登場するや、今度はサーバサイドのアプリケーションは JSP 中心に開発されるようになりました。 JSP は HTML 文書の中に、スクリプトレットという仕組みで Java のコードを挿入することが可能であり、実行時には自動的にサーブレットに変換してくれます。JSP はあたかも JavaScript のようなお手軽感が受けて大いに使われるようになったのです。

JSP の限界

しかし、 JSP にスクリプトレットを埋め込んでコーディングすると、文書の見栄えを変更しにくいという問題が生じます。HTML 側では、描画機能を持つ要素や属性は廃止して、 CSS を使うようになり、 HTML 文書は提示したい文書の意味を要素構造で表現することに専念できるようになっています。一方、複数の要素を間に挟むような、大域的で複雑なスクリプトレットが含まれていると、いざ文書の要素構造を変更したくとも、新規に JSP の設計段階から開発し直す必要も生じてきます。最後の最後に、クライアントから「なんかダサいなー」といわれても、もはや開発しなおすだけの時間も予算も人間も割けない・・・ということも珍しくありません。

アプリケーションに求められる機能要件が複雑化するに従い、 JSP 中心の開発は行き詰ります。現在のコスト/分業体制では、頻繁に更新の必要がある HTML 部分をいちいち変更できるだけの人員を、SEとして調達することは不可能だからです。一方、今まで HTML の更新に当たっていたヴィジュアル・デザイナに、複雑/高度な JSP の HTML 部分だけ選り分けて編集させるのも酷というものです。第一、 JSP は多くの HTML オーサリングツールでは編集できず、HTML のソースコードを編集しなければならないかもしれません。

MVC の必要

そこで、サーバサイドの Java でも MVC モデルを使うようになりました。 MVC はそれぞれ、ビーン、JSP、サーブレットに割り当てます。JSP は限りなく HTML に近づけて、プレゼンテーション・ロジックは特別な要素による呼び出しで実装し、ビジネス・ロジックはサーブレットに丸投げします。ビジネス・ロジック、処理対象のデータへのアクセス、セッションの管理など、個別の機能はビーンで提供し、それらの間で制御の流れを管理するのがサーブレットです。サーブレットは、JSP のフォームから要求を受け取り、必要な機能を持ったビーンを呼び出し、処理結果を JSP に渡します。モデル(ビーン)とビュー(JSP)はコントローラー(サーブレット)を介して独立しているので、モデルの汎用性を高め、ビューの変更が容易になります。

サーバサイド Java の MVC モデルを Model 2 と呼び、 JSP centric の設計と区別することがあります。

MVCモデル
図:MVC モデル

Struts とはなんだろうか

Strutsとは、 Apache Jakarta プロジェクトが開発しているフレームワークです。もう言ったか。では、 Struts とは MVC モデルにのっとったウェブ・アプリケーション用のフレームワークであり、フレームワークとは……。これももう言いいましたね。では MVC モデルとは、 Model-View-Control の概念に……。これも言いました。要するに、 Struts とは、 MVC モデルに則ったウェッブ・アプリケーションなのです。

Struts のサイトでは、Struts が従うオープン・ソース・ライセンスである Apache Software License、利用上のドキュメントが公開されています。

Struts の概要

既に聞き飽きているとおり、 Struts は MVC モデルに基づいたフレームワークです。ウェッブ・アプリケーションで必要な MVC の骨格が提供されています。

モデル層では、フォームデータを格納するフォーム・ビーンを提供、ビュー層ではタグ・ライブラリを提供、コントロール層ではアクション・クラス、アクション・マッピングを提供しています。特に、アクション・マッピングではコンフィギュレーション・ファイル (struts-config.xml) を使って、 Java のオブジェクト・モジュールから分離しているので、柔軟な実装が可能となっています。

実は、Struts で提供されているクラス群が厳密に MVC に適合しているかというと、そうでもありません。開発者の設計思想に応じて、特定のモジュールに M の仕事をさせたり、 C の仕事をさせたりということが発生します。しかし、全体として MVC モデルに従っていることは間違いないことであり、重要なことは、アプリケーションの規模や特性に応じて、一貫した設計思想に基づき、 Struts を利用することにあります。



Copyright © 2002 SUGAI, Manabu. All Rights Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送