Wicketとは
WicketはApache Software Foundationで開発されている,Webアプリケーション開発用のフレームワークです。フレームワークにもさまざまなものがあり,それぞれ用途が異なります。Wicketの行うことは,ブラウザからのリクエストを受け付け,処理を振り分け,ページを生成してブラウザにレスポンスを返すことです。位置づけとしては,Apache Strutsと同じと考えれば良いでしょう。
Wicketの特徴
Wicketには他の多くのWebフレームワークとは異なる,大きな特徴があります。多くのWebフレームワークが,リクエストからレスポンスまでのフロー(流れ)をどのようにコントロールするか,という方針で作られているのに対して,Wicketは「Webページをページというオブジェクトとして扱い,オブジェクトを組み立てることでアプリケーションを構築する」という考え方に基づいてデザインされています。フローをコントロールするタイプのフレームワークは考え方としてサーブレットに近いものですが,Wicketの考え方は,むしろデスクトップ・アプリケーションに近いでしょう。
オブジェクト指向で作るWebアプリケーション
多くのWebフレームワークでの典型的なページの作り方は,Servletに当たるプログラムが処理を実行し,表示する値を準備して,JSPのようなHTML生成用言語がそれらの値をHTML化する,というものです。
一方,Wicketでは,ページは「WebPage」というクラスから作られたオブジェクトです。ページに表示されているフォームやボタンは,それぞれ「Form」や「Button」といったクラスから作られます。
ボタンがクリックされた時の動作は,ButtonクラスのonClick()というメソッドの中に書かれています。プログラマは,ブラウザ上のボタンクリックがどうやってButtonオブジェクトのonClick()メソッド呼び出しに変換されるのか,その詳細を知る必要はありません。デスクトップ・アプリケーション作成において,ボタンクリックがボタンオブジェクトのメソッド呼び出しに変換されるように,ブラウザ上のボタンクリックは,WicketによってButtonクラスのonClick()メソッド呼び出しに変換されます。
Wicketは,デスクトップ環境であたりまえだったそのようなプログラミングスタイルを,Webアプリケーションでも実現するのです。
Wicketが縁の下で支えてくれる
たとえば,Wicketではページからページへ情報を渡すために,HttpSessionを使ってやりとりをする必要すらありません。ページはオブジェクトですから,ページのメソッドを使って情報を渡すことができます。
リスト1 次のページに情報を渡す仮コード
WebPage nextPage = new MyNextPage(userName, inputData);
setResponsePage(nextPage);
上記の例では,次に表示するページを表すMyNextPageオブジェクトを作るときに,コンストラクタ引数を使用して,userNameとinputDataという情報を渡しています。setResponsePage()メソッドによってブラウザにページが表示されます。
何を当たり前のことを,と思うかもしれません。しかしこの当たり前のことができなかったのが,Webアプリケーション開発の現実だったのです。Webアプリケーションにおいて,あるページと別のページとは,違うリクエストによって扱われる、お互いをまったく知らない存在です。前のリクエストで用意した情報は,次のリクエストが来たときには消えてなくなっています。なんとかリクエスト間で情報を引き渡す必要がありました。そのために,HttpSessionに一旦情報を格納することでリクエストをまたがって情報を使えるようにしたり,一旦データベースに情報を記録して,別のリクエスト処理時にはデータベースから情報を再取得したりする必要があったのです。
Wicketでは違います。Wicketでは,従来のプログラミング手法が使えます。情報を引き渡したいのであれば,オブジェクト間で情報のやりとりを行えばよいのです。そのために必要な操作,たとえばHttpSessionを使った情報の保存などは,すべてWicketが勝手に処理してくれます。プログラマが考えるべきことは,情報の引き渡し方ではなく,処理すべきプログラムそのものになります。
Wicketが縁の下で,オブジェクト指向の世界を維持してくれるのです。
そのため,Wicketを使ったアプリケーション開発は,サーブレット,あるいはサーブレットに近い構造を持つフレームワークとは,大きく異なったものになります。Webアプリケーションというよりは,むしろ,Swingを使ったデスクトップ・アプリケーションに近い印象を受けるでしょう。
この特集では,Wicketを使ってAjax対応のアプリケーションをつくることで,数回に分けてWicketの使い方を紹介していきます。
設定よりもプログラミングで処理する
Wicketは,設定ファイルに埋もれたJavaのWebアプリケーション作成を,再びJavaによるオブジェクト指向プログラミングの世界に戻すことを目標としています。
Wicketは,サーブレット・コンテナが必要とするweb.xmlを除いて,設定ファイルを一切使用しません。設定ではなく,すべてをプログラムでコントロールします。
設定ファイルはプログラムのように,状況に応じて自由に内容を変えることができません。また,設定ファイルは結局のところ,書いていて楽しいものでもありません。Wicketは設定ファイルとして追い出されてきたものを,ふたたびプログラムの世界に戻しました。
アプリケーションの動作定義やURLの設定,ページ遷移など,すべてがプログラムの中でコントロールできます。プログラマがもっとも得意とする世界でアプリケーションをコントロールするのが,Wicketの方法です。

