Мне интересно, как мое приложение, написанное на Common Lisp, будет обслуживать страницы для веб-клиента.
Hunchentoot обслуживает все, что находится в его *dispatch-table*
, который является просто списком обработчиков отправки.
Самое простое, что нужно сделать, это обработать статический файл. Типичным примером будет файл CSS:
(push (create-static-file-dispatcher-and-handler "/example.css"
"example.css")
*dispatch-table*)
Для веб-приложения вы, скорее всего, захотите динамически создать веб-страницу. Вы делаете это, определяя функцию, которая возвращает страницу в виде строки (например, с CL-WHO), затем создавая обработчик для этой функции:
(defun foo ()
(with-html-output-to-string ; ...
))
(push (create-prefix-dispatcher "/foo.html" 'foo)
*dispatch-table*)
Вы можете избавиться от большого количества шаблонов с помощью макросов, например:
(defmacro standard-page ((title) &body body)
`(with-html-output-to-string (*standard-output* nil :prologue t :indent t)
(:html :xmlns "http://www.w3.org/1999/xhtml"
:xml\:lang "de"
:lang "de"
(:head
(:meta :http-equiv "Content-Type"
:content "text/html;charset=utf-8")
(:title ,title)
(:link :type "text/css"
:rel "stylesheet"
:href "/example.css"))
(:body
,@body))))
(defmacro defpage (name (title) &body body)
`(progn
(defmethod ,name ()
(standard-page (,title)
,@body))
(push (create-prefix-dispatcher ,(format nil "/~(~a~).html" name) ',name)
*dispatch-table*)))
Найденных вами примеров должно быть достаточно, чтобы начать, а если вы столкнетесь с проблемами, прочитайте руководство и задайте конкретные вопросы.