Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

Common Lisp/External libraries/Hunchentoot

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

Hunchentoot is a web application server written in Common Lisp. Quick start Installing with ASDF Installing Hunchentoot on ASDF-enabled systems. The next command installs Hunchentoot and all dependencies. (require 'asdf-install) (asdf-install:install 'hunchentoot) Generating a simple Web page (asdf:oos 'asdf:load-op :hunchentoot) (defpackage :testserv (:use :cl :hunchentoot) (:export :start-server)) (in-package :testserv) ;; Add a simple prefix dispatcher to the *dispatch-table* (setq *dispatch-table* `(,(create-prefix-dispatcher "/hello-world" 'hello-page))) ;; Handler functions either return generated Web pages as strings, ;; or write to the output stream returned by write-headers (defun hello-page () "<html><body>Hello World!</body></html>") (defun start-server (&key (port 4242)) (start (make-instance 'easy-acceptor :port port))) Start the server: (testserv:start-server :port 4242) The generated image is available on http://localhost:4242/hello-world. Serving dynamic graphics This example shows how to generate PNG images with Vectohttp://xach.com/lisp/vecto/ and serve them with Hunchentoot. First step: load external dependencies (asdf:oos 'asdf:load-op :hunchentoot) (asdf:oos 'asdf:load-op :vecto) Second step: declare a package (defpackage :testserv (:use :cl :vecto :hunchentoot) (:export :start-server)) (in-package :testserv) Add a simple prefix dispatcher to the *dispatch-table*: (setq *dispatch-table* `(,(create-prefix-dispatcher "/img" 'img-page))) The img-page function expects HTTP parameter height containing an integer value and generates a PNG image height pixels height. If the parameter is not specified a default value of 150 is used. (defun img-page () (setf (content-type*) "image/png") (let ((out (send-headers)) ; send-headers returns the output flexi-stream (bar-height (or (and (parameter "height") (parse-integer (parameter "height"))) 150))) (with-canvas (:width 10 :height bar-height) (rectangle 0 0 10 bar-height) (set-gradient-fill 0 0 0 1 1 1 0 bar-height 1 0 0 1) (fill-and-stroke) (save-png-stream out)))) ; write the image data to the output stream obtained from send-headers Start the server: (testserv:start-server :port 4242) The generated image is available on http://localhost:4242/img. Try to change the height: http://localhost:4242/img?height=350 References See also http://weitz.de/hunchentoot/ — Hunchentoot homepage http://www.cliki.net/hunchentoot — Common Lisp Wiki entry for Hunchentoot LispCast: Writing a simple Reddit clone in Common Lisp