Hatena::ブログ(Diary)

fna日記

2009-08-01

Wicket奮闘記 第3回 QuickStartでWicket始めよう編

どうも、こんばんわ〜

QuickStartでWicket始めようという第3回です。Wicketを始める際にQucickStartプロジェクトを使用して、簡単にWicketの基本をソースコード等も記載して紹介させて頂きます。

まずは、XMLを使用せずに作成することがWicketの大きな特徴の一つであるが、一つだけ例外がある。それは、Wicketを使用する場合、JavaEEのWebアプリケーション設定ファイル(Web.xml)の中でフィルターの設定が必要となっている。Quickstartを使用して開始する場合は設定を変更する必要などもないし、知らなくてもWicketプログラムすることは可能だと思う。でも、知っておきたい。以前のバージョンではこのweb.xmlにて、サーブレットの指定とサーブレットマッピングを指定を行っていたが、現在は下記のようにフィルターを使用している。

Web.xml

<web-app>

中略

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

中略

</web-app>

この設定をすることで簡単に説明すると、このWebアプリケーションURLにアクセスされたものは全てこのフィルターを使用すると設定している。つまり、この設定をすることでWicketを必ず実行するように設定しているのである。このフィルター設定以外のJavaEEAPIなどを、Wicketプログラムする場合、(まだあまり自信がない部分だけど・・)あまり使用せずに作成する方針となっている。

WicketではServletを代表するようなそれまでの手続きを記していくやり方ではなく、オブジェクト指向で作成することができ、私たちが作成したプログラミングServletコンテナで動くように変換をしてくれる。そのため、他のWEB層のフレームワーク(StrutsJSF等)だけでなく通常のJSP/Servlretを使用して作成したWebアプリを一緒に動かすこと、連携させることは難しいと思う。「混ぜるな。キケン」状態wだが、DIコンテナ等はむしろ積極的に組み合わせていきたい。SpringやGuice等が代表的。XMLなしでできることもあり、Guiceが人気の模様。軽くて早いことも魅力の一つかもしれない。

URLにアクセスされるとフィルターが反応し、WebApplicationクラスを継承したクラスがWicketで一番初めに実行される。

WicketApplication.java

import org.apache.wicket.page;
import org.apache.wicket.protocol.http.WebApplication;

public class WicketApplication extends WebApplication{    
  
  /**
   * Constructor
   */
  public WicketApplication(){ }
  
  /**
   * @see wicket.Application#getHomePage()
   */
  @Override
  public Class<HomePage> getHomePage(){
    return HomePage.class;
  }
}

Wicketでは他のフレームワークXMLで行っている設定などをメソッドを使って行っている。getHomePage()メソッド、これは非常に重要なメソッドです。なぜならこのメソッドで遷移先を決定しているため。このメソッドの戻り値はクラス(もしくはその共変戻り値)を指定し、returnを使用して遷移先のページを作成しているクラスを返すことで作成したページへと遷移させる。Struts等ではXMLにて指定をしていた部分をプログラムで行っているため、時間帯に合わせてページを切り替えたりすることが可能となる。例えば深夜2時から4時までDBバックアップを行っている場合をイメージしてみて欲しい。その時も時間を取得するプログラムを書いてこのメソッドの中で2時から4時の間のアクセスの場合はメンテナンスページを表示する。ような変更も簡単にできる。ステキだ。さらにこのクラスの中で各種設定をメソッドを使用することで設定することができる。特に必要のない場合は、作らなくてもいい。

実際に遷移するページを作成する時には注意点がある。それはjavaのファイル名とHTMLのファイル名を同一にする必要があるということ。Wicketではページ用のJavaファイルとHTML拡張子以外を同じにすることで、XMLを使用せずにページクラスが使用するHTMLページを設定しているのです。HTMLに完全にテンプレートとしてデザインを移し、このwicket:idの部分にJavaプログラミングした処理で置き換えると指定している。wicket:idの部分を追加したとしてもHTMLとしては全く壊れていない。JSPだとHTMLとしては使用できなくなり、Servletコンテナなしでは画面の確認もできないが、このWicketで作成しているhtmlページはそのまま使用できる。Webデザイナーの成果物を尊重しており、プログラマーデザイナーの分業をスムーズに行えるようになっている。この特徴はWicketの売りにもなっている。

Homepage.java

import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.WebPage;
 
/**
 * Homepage.java
 */
public class HomePage extends WebPage {
 
  private static final long serialVersionUID = 1L;
 
  // TODO Add any page properties or variables here
 
  /**
   * Constructor that is invoked when page is invoked without a session.
   * 
   * @param parameters Page parameters
   */
  public HomePage(final PageParameters parameters) {
 
    // Add the simplest type of label
    add(new Label("message", "If you see this message wicket is properly configured and running"));
    // TODO Add your page's components here
  }
}

Homepage.html

<?xml version="1.0" encoding="UTF-8"?>
<html
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:wicket="http://wicket.apache.org/">
    <head>
        <title>Wicket Quickstart Archetype Homepage</title>
    </head>
    <body>
        <strong>Wicket Quickstart Archetype Homepage</strong>
        <br/><br/>
        <span wicket:id="message">message will be here</span>
    </body>
</html>

ページを構成するJavaクラスはWebPageクラスを継承して作成する。コンストラクタにはadd(new Label("message", "If you see this message wicket is properly configured and running"));addで追加をしているのはSwingと非常に似たやり方です。このHomePageクラス自体をコンポーネントとして捉え、そのHomePageコンポーネントへadd(new Label());新しく生成したラベルコンポーネントを追加している。labelの第1引数に"message"ここで指定した内容をwicket:id=○○の○○に入っている場合に実行される内容。第2引数の文字列をwicket:idで指定された内容と置き換える処理が行われている。

実行結果

Wicket Quickstart Archetype Homepage

If you see this message wicket is properly configured and running

まとめ

WicketはWeb.xmlのフィルター設定をすることで使用することができる。

・WicketApplicationクラスがはじめに実行される。メソッドを使って設定はここでするよ。

・ページはHTMLと同じ名前のJavaファイルの2つをセットで使うこと

wicket:idの場所にプログラムの処理が入るよ。しかもHTMLJSPと違って壊れないよ。

Wicketではadd()メソッドの引数コンポーネントを入れることで使うよ。

まとめなのにあまりまとまってない・・(汗 まだはじめだから重要で覚えるポイントが多いからだよ。きっと・・と、言い訳をしてみる。コンポーネントの使用法などは次回以降もどんどんやっていく予定ですよ。ではまた〜

2009-07-26

Wicket奮闘記 第2回 環境設定編

Wicletいいよ(挨拶)

Wicketの環境作成をする第2回でございます。

とりあえず前回にも書きましたがWicket本を見ながら環境を作る事に。どうやらJettyを使う模様。Mavenを使用して数行コマンドプロンプトから実行すればできるとのと、これは簡単そうだ。早速、Mavenインストール、サクっと終了。動作確認もOKさあ、ようこそ、Wicket。動かすべくコマンドを実行。

・・・・エラーが出ました(汗

えーなんでーと結構焦りつつもコマンドの内容が間違っていないか等を確認し直す。問題なさそう。ディレクトリ構成を変えてもう一度実行してみる。またエラーになる。とりあえず、Jettyの起動に失敗していることはわかるんだけど・・試行錯誤しつつ本をペロっと次のページに動作確認用のURLが・・http://localhost:8080/quickstart/ん?ん?ちょっ・・まさか・・8080ってことは・・

Tomcatとポート番号かぶってたー(汗 Tomcatのサービス上がったまま忘れていました・・とりあえずTomcatのサービスを落としてから再実行。サクっと正常にいってくれました。はじめましてWicket、これからヨロシクみたいな。

Tomcatが既に入っている人は要注意ってこんなミスしている人、ググっても出てこなかったのであまりいないのかも。同じ失敗をしていた同士募集(ぇ

最初Mavenの設定とかの問題かと思って調べたけど、Maven触ったのは初めてで調べるポイントも見当外れが多かった。ただ動いて思った事はMavenは便利で使いこなせたら確実に作業効率は上がるはずだ。他にも知らないだけでプラスは多そう・・Antもだけどビルドツール系の知識が少ないことは今後ことを考えると厳しいし、覚えた方が良さそうだ。そんな感じでMavenも勉強するか、とか思っていると勉強する内容がどんどん増えていく・・Javaやってるとそういうの凄く多いwでもだからこそやりがいを感じるし、成長を感じる瞬間も多くて楽しい。

でも優先度的にはWicketMavenかな。やりたいことが多いし、ワクワクしてるから、でもMavenもやれる限りどんどんやっていこう。

ってかなりWicket以外の話が盛り沢山に・・ナッテコッタ 次回からは実際にソースも載せていこうかと思っています。

2009-07-25

Wicket奮闘記 第1回Wicketとの出会い編

Wicketいいよ。

初っ端からなんなんだという感じですが、はい、Javaが好きなプログラマーを夢中にしてしまう(?)噂のWicketを学習した内容などをつらつらと書いていく予定の第1回です。基本的には駄文、かつ、てきとうな感じですけど、Wicketは凄く好きなのでどんどん書いていきますよ。

まずはWicketとの出会いから

Wicketを知ったきっかけは1年位前にJavaNewsか何か忘れてしまいましたが、Swing開発者が作っているWebアプリケーションフレームワークほにゃららみたいなニュースを見た事で知りました。ただ当時はJavaのWebアプリ開発の基本JSPServletの学習に力を入れていたので、まだ早いと、とりあえずスルー(もっと早くやっていればと今は少し後悔しています。)

3ヶ月位前からStruts系の企業様作成フレームワークを使用してWebアプリケーションを作成をしていまして、Strutsと同様XMLの設定ファイルが邪魔だなぁとか、JSPをどんどん嫌いになっている自分を発見w

で、ふとWicketってXMLなしだったよなあ、確か・・と記憶の中からふと思い出してちょっと見てみるかといった軽い気持ちでGoogleで検索すると、たくさんの方がWicketについてブログで書かれている。拝見させて頂きましたが特にid:t_yano様のJavaプログラマーの胸が躍るような紹介に惹かれ、オブジェクト指向を取り戻すとかステキすぎるよ。さらに自分が思っていた不満が指摘されており、その不満を解消できている事に驚きました。やっぱり同じような不満を持っている人は多かったのね・・みたいなw

JSPXMLがない、それだけでもWicketが眩しく見えて仕方がなくなり、id:t_yano様ご執筆の本があることを知り、↓の本です。

オープンソース徹底活用WicketによるWebアプリケーション開発

オープンソース徹底活用WicketによるWebアプリケーション開発

現在も日本語唯一の本だそうです。ちょっとこれは買わなくてはと、意気揚々と書店に行き見てみて、まず帯にびっくり、まだStrutsでいいんですか?とwなんて挑戦的な・・思わず笑ってしまいました。

購入前にペラペラと少し見るだけでも予想以上に濃い内容の模様。機能の紹介が非常に多く、文面も丁寧で、ソースコードも多数載っているし、良書の香りがw思わずニヤけ顔になりながら颯爽と購入。購入したWicket本の感想などは後日改めて書きますよ。

最後にWicketいいよ。大事な事なので2回言いました(ぇ

というわけで続きは次回に。

2009-07-19

ブログはじめました。

どうも、フナです。

これからJavaを中心にIT系の技術を勉強した内容等をノート代りに書いていきます。

IT系の資格取得も目標としているのでそちらも誰かの参考になればいいなぁ

では皆様、宜しくお願いします。

Connection: close