AllegroServeのインストール
Commonlisp(今後CL)にはasdfというパッケージシステムがあるそうです。
(require 'asdf)
(require 'asdf-install)
(asdf-install:install 'aserve)
asdfをrequireしてasdf-install:installするとwebから取って来て、依存関係を含めてコンパイルしてインストールしてくれる。
CLiki : ASDF-Installここに書いてあるパッケージを見てインストールしてくれるみたいです。
RubyでいうとGitHub RubyGemsみたいなもんなのかな?
下記の依存パッケージも入りました。
- acl-compat
- cl-ppcre
- cl-unicode
- flexi-streams
- trival-gray-streams
- puri
- htmlgen
何か便利そうなのいっぱいありますね。
aserveの起動
(require 'aserve)
(net.aserve:start :port 8888)
上記で起動。
(net.aserve:publish
:path "/"
:content-type "text/html; charset=utf-8"
:function
#'(lambda (req ent)
(net.aserve:with-http-response
(req ent)
(net.aserve:with-http-body
(req ent)
(net.html.generator:html
(:html
(:head (:title "Hello World!"))
(:body "Hello World!")))))))
foo:barっていうのはメソッドかな? net.aserve:publishというのでリクエストと関数をマッピングするそうです。
「rackかsinatraみたいだ!」
と一瞬思いますが、そもそもプリミティブなHTTPってこういうもんですよね。
が、ブラウザからアクセスするとエラーが。まったくイミフですが、こちらに解決策を載せてくださってるのでそのまま実行。
長いのでファイルに保存して読み込むとか出来ないのかな?と思ってやってみました。
foo.lispという拡張子はSLIMEがSLIMEのモードとして開いてくれるらしく、C-M-xで評価できて凄く便利!
~/code/cl/boot-aserve.lisp というファイルに保存しました。
(load "code/cl/boot-aserve")
で読み込めるみたいです。
(net.aserve:publish
:path "/"
:content-type "text/html; charset=utf-8"
:function
#'(lambda (req ent)
(net.aserve:with-http-response
(req ent)
(net.aserve:with-http-body
(req ent)
(net.html.generator:html
(:html
(:head (:title "Hello World!"))
(:body "Hello World!"
:br
(JPN "へろー"))))))))
上記を実行してブラウザのlocalhost:8888にアクセス。
出た。
JPNというマクロで日本語がちゃんと出るようになってるみたいです。webサーバーの方で対応したいな。他にいいwebサーバーないのかしら?
参照: