WebWorkとStrutsはよく似たフレームワークです。以下の機能は両者に共通するものです。
・リクエストされたURIと設定ファイルに基づいて適切なActionに処理を転送する。
・HTTPリクエストパラメータを利用しやすい形のオブジェクトに変換してActionに引き渡す。
・必要に応じてHTTPリクエストパラメータの検証を行う。
一方、以下の点ではWebWorkはStrutsと異なっており、独自の特色を打ち出しています。
1.ServletAPIへの依存性が低い
WebWorkはXWorkという汎用的なコマンドパターンのフレームワークをベースにしています。StrutsでのActionクラスにあたる部分は完全にXWorkの中になります。XWorkはServletのAPIに依存していません。WebWorkというのは、大雑把にいうとこのXWorkをServlet経由で呼び出せるようにしたものです。
2.Actionクラスのライフサイクル
WebWork(正確にはXWork)にもStrutsのAcitonクラスに相当するActionインターフェースというのが存在しますが、これはリクエスト毎にインスタンス化されます。StrutsでActionクラスのインスタンスが使い回されているのは主にパフォーマンス上の理由だと思われますが、これに対してWebWorkは、どうせServletコンテナはリクエスト毎に山のように一時オブジェクトを作るのだから、もう一個余計に作ったところでどうってことねぇよというスタンスをとっているようです。この割り切りによって、StrutsのようにActionが必要とするデータの全てを引数として受け取る必要がなくなり、Actionインターフェースは以下の通り随分シンプルな作りになっています。
別に話を簡単にするためにメソッドを省いている訳ではなく、本当にこれだけなのです。あとは便宜的に定数がいくつか定義されているだけです。引数が4つもあるStrutsのexecuteメソッドとは対象的ですよね?
眠くなったので、続きはまた明日。
・リクエストされたURIと設定ファイルに基づいて適切なActionに処理を転送する。
・HTTPリクエストパラメータを利用しやすい形のオブジェクトに変換してActionに引き渡す。
・必要に応じてHTTPリクエストパラメータの検証を行う。
一方、以下の点ではWebWorkはStrutsと異なっており、独自の特色を打ち出しています。
1.ServletAPIへの依存性が低い
WebWorkはXWorkという汎用的なコマンドパターンのフレームワークをベースにしています。StrutsでのActionクラスにあたる部分は完全にXWorkの中になります。XWorkはServletのAPIに依存していません。WebWorkというのは、大雑把にいうとこのXWorkをServlet経由で呼び出せるようにしたものです。
2.Actionクラスのライフサイクル
WebWork(正確にはXWork)にもStrutsのAcitonクラスに相当するActionインターフェースというのが存在しますが、これはリクエスト毎にインスタンス化されます。StrutsでActionクラスのインスタンスが使い回されているのは主にパフォーマンス上の理由だと思われますが、これに対してWebWorkは、どうせServletコンテナはリクエスト毎に山のように一時オブジェクトを作るのだから、もう一個余計に作ったところでどうってことねぇよというスタンスをとっているようです。この割り切りによって、StrutsのようにActionが必要とするデータの全てを引数として受け取る必要がなくなり、Actionインターフェースは以下の通り随分シンプルな作りになっています。
public interface Action extends Serializable { String execute() throws Exception; }
別に話を簡単にするためにメソッドを省いている訳ではなく、本当にこれだけなのです。あとは便宜的に定数がいくつか定義されているだけです。引数が4つもあるStrutsのexecuteメソッドとは対象的ですよね?
眠くなったので、続きはまた明日。