ソースコードから理解する技術-UnderSourceCode

手を動かす(プログラムを組む)ことで技術を理解するブログ

Wicket(10)wickt-exmamplesを解析する(helloworld)

Wicket (9)wicket-examplesをTomcatに導入してみるEclipseに取り込んだ
Wicketのサンプル「wicket-examples」を解析してみます。

今回は「helloworld」exampleです。

1.web.xml
menu画面の「helloworld」リンクの遷移先URLは、「...\helloworld」になっています。
このURLをweb.xmlから検索すると、以下の記述があります。


<filter-mapping>
<filter-name>HelloWorldApplication</filter-name>
<url-pattern>/helloworld/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>

「helloworld」というURLがリクエストとしてくると、「HelloWorldApplication」フィルタが
実行されることがわかります。

次に「HelloWorldApplication」フィルタの定義を探すと、以下の記述があります。


<filter>
<filter-name>HelloWorldApplication</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>org.apache.wicket.examples.helloworld.HelloWorldApplication</param-value>
</init-param>
</filter>

このフィルタの実行時に最初に起動するアプリケーションクラスは「HelloWorldApplication」
パッケージは「org.apache.wicket.examples.helloworld」だとわかります。

2.ソース構成
web.xmlに定義されていたパッケージのフォルダを見てみます。
フォルダのパスは「Eclipseのワークスペース\wicket-examples\src\main\java\パッケージのパス」です。
ソース構成は以下の通りです。

[\org.apache.wicket.examples.helloworld]
    +- HelloWorld.html
        HelloWorld.java
        HelloWorldApplication.java

このうち「HelloWorldApplication.java」が、リクエストがあると最初に起動するクラスです。

3.HelloWorldApplication.java


(省略)
public class HelloWorldApplication extends WicketExampleApplication
{
(省略)
@Override
public Class getHomePage()
{
return HelloWorld.class;
}
}

Wicketのアプリケーションクラスは「WebApplication」クラスを継承する必要がありますが
このサンプルでは「WicketExampleApplication」クラスが「WebApplication」クラスを継承しており
各アプリケーションクラスは「WicketExampleApplication」クラスを継承しています。

getHomePage()メソッドで、レスポンスとして返却するクラスとして「HelloWorld」クラスを定義しています。

4.HelloWorld.java


(省略)
public class HelloWorld extends WicketExamplePage
{
(省略)
public HelloWorld()
{
add(new Label("message", "Hello World!"));
}
}

Wicketのページクラスは「WebPage」クラスを継承する必要がありますが
このサンプルでは「WicketExamplePage」クラスが「WebPage」クラスを継承しており
各ページクラスは「WicketExamplePage」クラスを継承しています。
「WicketExamplePage」クラスは、このサンプル内のページクラスで共通する定義を実装しています。

コンストラクタでLabelをページに追加しており、表示するメッセージ「Hello World!」も設定しています。

5.HelloWorld.html


(省略)
<body>
<span wicket:id="mainNavigation"/>
<span wicket:id="message" id="message">Message goes here</span>
</body>
(省略)

タグに「wicket:id=」をつけて、wicketのコントロールとして定義します。
wicket:=id="message"」の定義があるタグに、HelloWorld.javaはメッセージを設定しています。