Webアプリケーションの作成
では、Wicketを利用したWebアプリケーションを作成してみましょう。1から作成してもよいのですが、ここではEclipse IDE for Java EE Developersを使って作成をしていくことにしましょう。
Wicketは、一般的なWebアプリケーションに、必要なライブラリを追加するだけで使えるようになります。ここでは動的Webプロジェクトとして新しくプロジェクトを作成することにしましょう。プロジェクト名は「wic_sample」としておきます。そして作成後、WebContent/WEB-INF/lib内に、Wicket本体と先ほどのログ関連の3ファイルをコピーします。これで、必要なファイルは用意できました。
では、WicketをWebアプリケーション内で使えるようにしましょう。これは、web.xmlに、Wicketのフィルタを設定するだけです。<web-app>内に、次のようにフィルタを追加するタグを記述してください。
<filter>
<filter-name>wickletFilter</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>jp.tuyano.WicSample</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>wickletFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
見れば分かるように、Wicketは、org.apache.wicket.protocol.http.WicketFilterというフィルタとしてすべてのアクセスを横取りして処理するようになっています。また、<init-param>で、applicationClassNameというパラメータを用意していますが、これはWicketで必要になる「アプリケーションクラス」の名前を設定するものです。ここでは、jp.tuyano.WicSampleというクラスにしてあります(アプリケーションクラスについては後述します)。
WebApplicationクラスを作成する
では、簡単なサンプルを作成してみましょう。ここでは、ごく単純なテキストを表示するページを作成してみます。まず最初に作成するのは「WebApplicationクラス」です。これは先ほど、applicationClassNameでアプリケーションクラスとして指定したクラスのことです。
WebApplicationクラスはWebアプリケーションを管理するコンポーネントとなるものです。Wicketでは、Webアプリケーションはまずアプリケーションクラスが用意され、そこに使用するページの数だけページクラス(各ページを管理するコンポーネント)が用意されます。AWTやSwingなどでは、まずアプリケーションとなるメインクラスを用意し、そこで必要に応じてフレームクラスを作成していきます。これと同じように、Wicketではアプリケーションクラスとページクラスを使って全体を管理すると考えると良いでしょう。
では、「src」内にjp.tuyanoというパッケージを用意し、そこに「WicSample.java」というファイルを作成して「WicSample」アプリケーションクラスを作りましょう。
package jp.tuyano;
import org.apache.wicket.Page;
import org.apache.wicket.protocol.http.WebApplication;
public class WicSample extends WebApplication {
@Override
protected void init() {
super.init();
this.getRequestCycleSettings().setResponseRequestEncoding("UTF-8");
this.getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
}
@Override
public Class<? extends Page> getHomePage() {
return IndexPage.class;
}
@Override
public String getConfigurationType() {
return WebApplication.DEVELOPMENT;
}
}
ここでは、3つのメソッドが用意されています。それぞれの役割と行っていることを順に整理していきましょう。
initgetHomePagegetConfigurationType
これは、アプリケーションクラスの初期化を行うためのものです。WebApplication継承クラスでは、コンストラクタでは初期化処理は行いません。コンストラクタ実行時にはまだコンポーネントの準備が完了していないため、このinitで初期化処理を行います。初期化は、まずsuper.initでスーパークラスのinitを呼び出した後、必要な作業を行います。ここでは、レスポンスエンコーディングと、マークアップエンコーディングの2つのエンコードをUTF-8に設定する処理を呼び出しています。この2行はエンコーディングを設定するための基本として「initで必ずこう書いておく」と理解しておくと良いでしょう。
これは、このWebアプリケーションのホームページとなるクラスを返すメソッドです。ここでは、IndexPage.classを返しています。この後に作成をしますが、このIndexPageが、Webアプリケーションにアクセスしたときに表示されるページを管理するクラスになります。
これは、アプリケーションの設定タイプを指定するものです。WebApplication.DEVELOPMENTという値を返していますが、これは現在、開発中であることを示す値です。開発が完了し正式リリースする際には、WebApplication.DEPLOYMENTにしておきます。
