gpt4 book ai didi

common-lisp - 如何将 Web 应用程序连接到 Hunchentoot

转载 作者:行者123 更新时间:2023-12-04 22:53:29 25 4
gpt4 key购买 nike

我正在编写一个需要 hunchentoot 网络服务器的网络应用程序。我几乎没有关于 hunchentoot 或任何 Web 服务器的工作知识,我想知道我用 Common Lisp 编写的应用程序如何将页面提供给 Web 客户端。我见过一些很好的例子(例如 Hunchentoot Primer , Lisp for the Web)尤其是。 Hunchentoot 页面上列出的那个。你知道我在哪里可以找到更多这样的例子吗?
谢谢。

最佳答案

I am wondering how my app written in Common Lisp would serve pages to a web client.



Hunchentoot 服务于其 *dispatch-table* 中的所有内容,这只是调度处理程序的列表。

最简单的方法是提供一个静态文件。一个典型的例子是一个 CSS 文件:
(push (create-static-file-dispatcher-and-handler "/example.css"
"example.css")
*dispatch-table*)

对于 Web 应用程序,您很可能希望动态创建网页。为此,您可以定义一个将页面作为字符串返回的函数(例如使用 CL-WHO),然后为此函数创建一个处理程序:
(defun foo ()
(with-html-output-to-string ; ...
))

(push (create-prefix-dispatcher "/foo.html" 'foo)
*dispatch-table*)

顺便说一下,您可以通过宏消除很多样板:

(defmacro 标准页 ((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 "德"
:lang "德"
(:头
(:meta :http-equiv "内容类型"
:content "text/html;charset=utf-8")
(:标题,标题)
(:link:type "text/css"
:rel "样式表"
:href "/example.css"))
(: body
,@ body ))))

(defmacro defpage (name (title) &body body)
`(程序
(定义方法,名称()
(标准页 (,title)
,@ body ))
(push (create-prefix-dispatcher ,(format nil "/~(~a~).html"name) ',name)
*调度表*)))

您找到的示例应该足以让您入门,如果遇到问题,请阅读手册,然后提出具体问题。

关于common-lisp - 如何将 Web 应用程序连接到 Hunchentoot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1022462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com