Java で書かれた Web アプリケーションフレームワーク ~ Wicket
最近、Webアプリケーション記述言語としては押され気味(という気がする)の Java 言語。
その Java言語による Wicket という Web アプリケーションフレームワークがあります。
Wicket とは・・・・・
と、能書きを垂れたいところですが、まだその域まで理解が達していません。
1つ言えるのは、Java で記述したクラス + 普通の HTML だけでアプリケーションが動かせるという点です。
jsp なし。複雑な設定を記述するための xml なし。
シンプルです。
どんなことができて、どんなことができないのかを知りたく、最初の一歩を踏み出してみることにしました。
まずは、ダウンロードから初めて Wicket を使った HelloWorld の Webアプリケーションが動くまで。(環境はWindows)
JDKのダウンロード/インストール
http://java.sun.com/j2se/1.5.0/ja/download.html
JDK 1.5.0_07 を使用。
ダウンロードした後、粛々とインストーラの指示にしたがってインストール。
Tomcatのダウンロード/インストール
5.5 を使用。
ダウンロードした後、粛々とインストーラの指示にしたがってインストール。
eclipse + Web Tools Platform をまとめてダウンロード
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のダウンロード
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!
と表示されました。
とりあえず、最初の一歩はここまで。