Hunchentoot
Hunchentoot ist ein Webserver und -Framework, das komplett in Common Lisp geschrieben wurde, unter einer freien, BSD-ähnlichen Lizenz steht, und ähnliche Ziele wie das inzwischen inaktive Projekt AllegroServe verfolgt. Mit Hunchentoot ist es möglich, dynamische Webseiten in der Programmiersprache Common Lisp herzustellen, weiterhin bauen wichtige Frameworks für diese Sprache, zum Beispiel das Webframework UCW und das Ajax-Framework HT-Ajax darauf auf.
Funktionsweise
Hunchentoot kann als autonomer Webserver fungieren, hinter einem Webserver einbindbar, der als Proxy fungieren kann, und mithilfe des Apache-Mods mod lisp auch direkter in Apache eingebunden werden. In jedem dieser Fälle muss allerdings eine komplette Common-Lisp-Session am Laufen sein.
Portabilität und Verbreitung
Hunchentoot ist unter den meisten verbreiteten Common-Lisp-Implementationen lauffähig (wenn auch teilweise mit Einschränkungen) und ist einer der wichtigsten Webserver für Common Lisp. Somit kann er auf den meisten unixartigen Systemen eingesetzt werden.
Allerdings ist er bislang wenig verbreitet, was an der mangelnden Bekanntheit der modernen Lisp-Dialekte liegen könnte. Möglicherweise lassen sich potentielle Anwender auch durch die genutzte Garbage-Collection oder die Tatsache, dass eine Common-Lisp-Session permanent laufen muss, abschrecken. Zudem existieren für kommerzielle Nutzer Alternativen wie AllegroServe und das Webserver-Framework von LispWorks.
Programmierung
Im Zusammenhang mit Hunchentoot und anderen Webservern für Common Lisp wird häufig die Ausdrucksstärke und Flexibilität dieser Sprache genutzt, um HTML-Seiten mittels Markup-Bibliotheken zu generieren. Das folgende sehr rudimentäre Codebeispiel erstellt eine einfache „Hallo Welt“-Seite und benutzt dazu die Markup-Bibliothek cl-who.
;Einbinden der Bibliotheken, Paket definieren
(require :hunchentoot)
(require :cl-who)
(defpackage hallo-welt (:use :cl :hunchentoot :cl-who))
;In das Paket wechseln
(in-package :hallo-welt)
;Seite definieren
(defun http-seite ()
(with-html-output-to-string (out)
(:html (:head (:title "Hallo-Welt-Seite"))
(:body (:h1 "Hallo Welt")))))
;Webseite veroeffentlichen und Server starten
(setf *dispatch-table* (list (create-prefix-dispatcher "/hallo-welt" 'http-seite)))
(defvar *server* (start-server :port 8000))
Die Webseite ist nun unter
http://hostname:8000/hallo-welt
zu erreichen, wobei hostname den Hostname des Servers bezeichnet. Mit Root-Rechten funktioniert dieses Beispiel natürlich auch mit dem Port 80. Hunchentoot bietet auch noch ein eigenes Session-System und die Nutzung von Cookies. Auch SSL-Verbindungen werden unterstützt.
Trivia
Der Name Hunchentoot ist dem Werk des US-amerikanischen Komponisten und Gitarristen Frank Zappa entlehnt. Hunchentoot ist dort Titelfigur eines (unveröffentlichten) Musicals, von dem Fragmente Eingang in Zappas 1979 erstmals erschienenes Album Sleep Dirt fanden.[1]
Weblinks
Einzelnachweise
- Barry Miles: Zappa, Rogner & Bernhard, Berlin 2005. ISBN 3-8077-1010-8, S. 263.