[Common Lisp][UCW] UnCommon Web で Hello World
先日はサンプルを動かすところまでだった UCW(UnCommon Web)ですが、今回は Hello Wold アプリを作成してみます。
ソースは次のとおりです。5行目の load の引数は UCW のインストール先にあわせて変更してください。
おおまかには次のような感じになっています。
- cookie-session-application のインスタンス生成でアプリケーションを作成。
- register-application でアプリケーションのデフォルトサーバに登録。
- defentry-point でエントリポイントの作成。
- defcomponent でページを定義。
- 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 "ハローワールド"))
次回はページ遷移をしてみましょう。