Wicket Quick Start っぽいものを作ってみる(後編)

準備ができたので、実際にソースコードを書いていきます。大抵のサイトでは「Maven を使おう」と書かれていますが、そんな初心者泣かせなことはやりません。だいたい Maven 使うならそもそも必要なライブラリをわざわざ先に用意する必要がないw*1

web.xml の編集

WEB-INF/web.xml を編集します。プロジェクトを作るときに「Generate web.xml deployment descriptor」にチェックを入れておけばひな形はできているので、必要なところを編集するだけです。

<?xml version="1.0" encoding="utf-8"?>
<web-app
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <display-name>WicketQuickStart</display-name>

    <filter>
        <filter-name>wicket.WicketQuickStart</filter-name>
        <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
        <init-param>
            <param-name>applicationClassName</param-name>
            <param-value>jp.mydns.akanekodou.WicketApplication</param-value>
      </init-param>
    </filter>
 
    <filter-mapping>
        <filter-name>wicket.WicketQuickStart</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

applicationClassName のところは、後で作る WicketApplication クラスの場所をパッケージ名付きで記述します。ここでは jp.mydns.akanekodou というパッケージを作成してそこに作ることにしますが、違うパッケージ名でも構いません。

HomePage.html の作成

プロジェクトの「Java Ressources」の src フォルダの下に jp.mydns.akanekodou パッケージを作り、その中に HomePage.html を作ります。ここは Wicket の肝なので間違えないように。

<!doctype html>
<html>
    <head>
        <title>Wicket Quickstart Archetype Homepage</title>
    </head>
    <body>
        <h1>Wicket Quickstart Archetype Homepage</h1>
        <p wicket:id="message">message will be here</p>
    </body>
</html>

(Maven を使って作った際に実際に用意されるものとは若干違います)

wicket:id という見慣れない属性がありますね。これは次に作る HomePage クラスが HTML ファイルを操作するときに使われます。「そんな属性ねーよ」って警告が出ると思いますが無視して構いません。

HomePage.java の作成

HomePage.html を操作するための HomePage クラスを作成します。クラス名は HTML ファイルの名前に一致させてください。*2

package jp.mydns.akanekodou;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;

public class HomePage extends WebPage {
    private static final long serialVersionUID = 1L;

    public HomePage() {
        add(new Label("message", "If you see this message wicket is properly configured and running"));
    }
}

WicketApplication.java の作成

package jp.mydns.akanekodou;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.protocol.http.WebApplication;

public class WicketApplication extends WebApplication {
    @Override
    public Class<? extends WebPage> getHomePage() {
        return HomePage.class;
    }

    public void init() {
        super.init();
    }
}

動かしてみる

以上のソースコードを作り終えたら eclipse で作った Tomcat サーバにプロジェクトを追加してサーバを起動しましょう。無事起動できたら

http://localhost:8080/(プロジェクト名)/

にブラウザでアクセスしてみましょう。先ほど HomePage.html を作ったときに "message will be here" と入力していたところに "If you see this message wicket is properly configured and running" という文章が表示されていたら、Wicket は正しく動いています。

で、これは一体何をやっているの ? ということなのですが、HTML の中で wicket:id 属性の属性値が message である要素を探してそこに "If you see this message wicket is properly configured and running" という文字列(厳密にはそのような文字列を内部の値として保持する Model クラスのオブジェクト)を表示するような Label クラスのオブジェクトを生成し、add メソッドで実際に追加することで HTML のソースを書き換える、ということをやっています。

ここで着目すべきは、操作の対象となる view のファイルは従来の JSP ではなく HTML ファイルであるということです。JSP はそのままでは見た目を確認できませんが、HTML だったらブラウザで開いて表示させることができます。Web アプリケーション開発において、view を確認しながら作業ができるのは大きなことです。

また Struts のように設定ファイルを新たに作る必要はなく、Java プログラマが慣れ親しんだオブジェクト指向をフル活用してプログラミングに専念できます。過去の Java フレームワークは「プログラマの負担を減らす」と謳いつつも、その実体はちょっとした仕様変更があるたびにプログラム本体だけでなく 設定ファイルなども書き換えなければならず、むしろプログラマの負担は大きいものでした。Wicket は、Web アプリケーションに必須の web.xml ただ一つを除いて、その他の設定ファイルを一切排除することに成功し、その負担を軽減することに成功したと言えます。

Web プログラミングにオブジェクト指向を。新たなフレームワークWicket の世界をあなたも体験してみませんか。今回は Quick Start という基本しか取り上げませんでした。Wicket も 1.5 系統になり仕様がかなり変わっているため、私もまだそれほど詳しくはないのですが、Wicket の世界に足を踏み入れようとしている皆さんとともに、少しずつ覚えていきたいと思っています。

*1:Maven はプロジェクトを作るときに必要なライブラリは全部ダウンロードしてくれる

*2:ここも Wicket の肝です。クラス名と HTML ファイル名が同じ、という規則によって両者をひもづけることによって設定ファイルを不要にしたのです。