Hunchentoot

aus Wikipedia, der freien Enzyklopädie

Hunchentoot ist ein Webserver und bzw. -Framework, das komplett in Common Lisp geschrieben wurde. Hunchentoot verfolgt ähnliche Ziele wie das inzwischen inaktive Projekt AllegroServe und steht unter einer freien, BSD-ähnlichen Lizenz. Mit Hunchentoot ist es möglich, dynamische Webseiten aus der Programmiersprache Common Lisp zu generieren. Weiterhin bauen wichtige Frameworks für diese Sprache, zum Beispiel das Webframework UCW und das Ajax-Framework HT-Ajax darauf auf.

Funktionsweise

Hunchentoot kann entweder als autonomer Webserver fungieren oder in einen als Proxy fungierenden Webserver eingebunden sein. Zur Einbindung in den Apache-Webserver muss das Modul mod_lisp per Apache-Konfiguration geladen werden. In jedem Fall muss permanent eine Common-Lisp-Session laufen.

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 permanent eine Common-Lisp-Session 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

  1. Barry Miles: Zappa, Rogner & Bernhard, Berlin 2005. ISBN 3-8077-1010-8, S. 263.