2007/07/29

[Common Lisp][UCW] UnCommon Web で Hello World

先日はサンプルを動かすところまでだった UCW(UnCommon Web)ですが、今回は Hello Wold アプリを作成してみます。
ソースは次のとおりです。5行目の load の引数は UCW のインストール先にあわせて変更してください。
おおまかには次のような感じになっています。


  1. cookie-session-application のインスタンス生成でアプリケーションを作成。

  2. register-application でアプリケーションのデフォルトサーバに登録。

  3. defentry-point でエントリポイントの作成。

  4. defcomponent でページを定義。

  5. defmethod render でページの表示の仕方を定義。


UCW は継続ベースです。URL が各ページに1対1に対応しているわけではありません。エントリポイント(入口)を定義する必要があります。今回は1ページだけなので、全然イメージができないかもしれませんが…

;; ucw がロードされていなければロードする。
(eval-when (:load-toplevel :compile-toplevel :execute)
(unless (find-package :ucw)
;; UCW の start.lisp をロードする。
(load "/home/ancient/letter/lisp/ucw/ucw-boxset/start.lisp")))

;; ucw のユーザ用パッケージ。
;; 簡単なアプリケーションならこのパッケージを使うのが簡便。
(in-package :it.bese.ucw-user)

;; アプリケーションの作成。
(defvar *hello-world-application*
(make-instance 'cookie-session-application
;; http://localhost:8080/hello/ でこのアプリケーションの
;; アクセスできるようにする。
:url-prefix "/hello/" ; / で終ること
))

;; アプリケーションをサーバに登録する。
(register-application *default-server* *hello-world-application*)

;; エントリポイントの作成。
;; http://localhost:8080/hello/index.ucw で
;; hello-world-window の render メソッドが呼ばれる。
(defentry-point "index.ucw" (:application *hello-world-application*)
()
(call 'hello-world-window))

;; hello-world-window の定義。
;; simple-window-component を継承する。
(defcomponent hello-world-window (simple-window-component)
()
(:default-initargs :title "ハローワールド")) ; title の設定。

;; 表示用のメソッドの定義
(defmethod render ((hello hello-world-window))
(<:p "ハローワールド"))

次回はページ遷移をしてみましょう。

0 件のコメント: