Java で書かれた Web アプリケーションフレームワーク ~ Wicket

2018年2月18日

この記事は最初の投稿日から18年経過しています。内容が古い可能性があります。

最近、Webアプリケーション記述言語としては押され気味(という気がする)の Java 言語。

その Java言語による Wicket という Web アプリケーションフレームワークがあります。

Wicket とは・・・・・

と、能書きを垂れたいところですが、まだその域まで理解が達していません。

1つ言えるのは、Java で記述したクラス + 普通の HTML だけでアプリケーションが動かせるという点です。

jsp なし。複雑な設定を記述するための xml なし。

シンプルです。

どんなことができて、どんなことができないのかを知りたく、最初の一歩を踏み出してみることにしました。

まずは、ダウンロードから初めて Wicket を使った HelloWorld の Webアプリケーションが動くまで。(環境はWindows)

JDKのダウンロード/インストール

screenshot

http://java.sun.com/j2se/1.5.0/ja/download.html

JDK 1.5.0_07 を使用。

ダウンロードした後、粛々とインストーラの指示にしたがってインストール。

Tomcatのダウンロード/インストール

screenshot

http://tomcat.apache.org/

5.5 を使用。

ダウンロードした後、粛々とインストーラの指示にしたがってインストール。

eclipse + Web Tools Platform をまとめてダウンロード

screenshot

http://download.eclipse.org/webtools/downloads/

ダウンロードした zip を適当なディレクトリに展開して終了。

eclipse.exe を起動し、workspace として C:\eclipse を選択。

eclipse でプロジェクト作成
  • File→New→Project…→Web/Dynamic Web Project を選択
  • Project Name は、「HelloWorld」
  • Target runtime: は、Apache Tomcat v5.5。選べなければ、「New」をクリックして作成。
  • Finish をクリック

せっかくなので、プロジェクトとして、Dynamic Web Project というのを選んでみました。

Wicketのダウンロード

screenshot

http://wicket.sourceforge.net/Download.html

1.2 を使用。

ダウンロードして適当なディレクトリに解凍します。

lib/wicket-1.2.jar を、先ほど作った eclipse のプロジェクトの、WebContent/WEB-INF/lib にコピーします。

HelloWorld アプリケーションの作成

package helloworld で作りました。

src/helloworld/HelloWorldApplication.java を作成

最初、Wicket のページに載っているサンプル通りに作りました。(2006/05/30現在のサンプルソースです。)

Each Wicket application is defined by an Application object. This object defines what the home page is, and allows for some configuration.

package wicket.examples.helloworld;
import wicket.protocol.http.WebApplication;
public class HelloWorldApplication extends WebApplication
{
public HelloWorldApplication()
{
getPages().setHomePage(HelloWorld.class);
}
}

ところが、「Abstract なメソッドが定義されていない」、「getPages() なんてメソッドは存在しない」というコンパイルエラーがでます(涙)。

いきなりつまづきました。

探してみると、Wicket の Wiki に以下のように載っていました。

NOTE: Beginning with release 1.2 the homepage is set by overriding getHomePage(). Therefore the above becomes:

package mypackage;
import wicket.protocol.http.WebApplication;
public class HelloWorldApplication extends WebApplication
{
public Class getHomePage()
{
return HelloWorld.class;
}
}

どうやら、release 1.2 から変わってしまったようです。ちょうど過渡期にあたってしまったみたいで・・・。

ということで、以下のようになりました。

package helloworld;
import wicket.protocol.http.WebApplication;
public class HelloWorldApplication extends WebApplication {
public Class getHomePage() {
return HelloWorld.class;
}
}
src/helloworld/HelloWorld.java を作成

以下のように作成。

package helloworld;
import wicket.markup.html.WebPage;
import wicket.markup.html.basic.Label;
public class HelloWorld extends WebPage
{
public HelloWorld()
{
add(new Label("message", "Hello World!"));
}
}
src/helloworld/HelloWorld.html を作成

以下のように作成。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>Wicket HelloWorld</title>
</head>
<body>
<span wicket:id="message">Message goes here</span>
</body>
</html>
WebContent/WEB-INF/web.xml を作成
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Wicket HelloWorld</display-name>
<servlet>
<servlet-name>HelloWorldApplication</servlet-name>
<servlet-class>wicket.protocol.http.WicketServlet</servlet-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>helloworld.HelloWorldApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldApplication</servlet-name>
<url-pattern>/helloworld</url-pattern>
</servlet-mapping>
</web-app>

実行

eclipse から Tomcat を実行できますが、まずは Tomcat 単独起動で動かしてみることにしました。

Web アプリケーションのファイルをコピー
  • Tomcat インストールディレクトリ下の webapps ディレクトリ下に、helloworld というディレクトリを作成。
  • eclipse のプロジェクトディレクトリの WebContent/WEB-INF ディレクトリを helloworld 下にコピー
  • build/classes を、helloworld/WEB-INF 下にコピー

最終的には、

webapps/
helloworld/
WEB-INF/
web.xml
classes/
helloworld/
HelloWorld.class
HelloWorld.html
HelloWorldApplication.class

というファイル構成になります。

Tomcatの設定

Tomcat インストールディレクトリ下の、conf/server.xml を編集。

とりあえずは、

  • Tomcat 自身が http の要求を受け付けて
  • /HelloWorld という Context path でアプリケーションを動かす

ということ「だけ」ができるように、不要なものをざっくり削除。

<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="/HelloWorld" docBase="helloworld" debug="0"
reloadable="true" crossContext="true">
</Context>
</Host>
</Engine>
</Service>
</Server>
Tomcat 起動
  • スタートメニューから「Monitor Tomcat」を起動
  • Start service

ブラウザで接続してみると。

以下のURLをブラウザで叩く。

http://localhost:8080/HelloWorld/helloworld

Hello World!

と表示されました。

とりあえず、最初の一歩はここまで。

Dev,Wicket

Posted by toshyon