[gambit-list] Web design with gambit question
Marc Feeley
feeley at iro.umontreal.ca
Wed Nov 25 12:47:32 EST 2009
On 2009-11-25, at 12:31 AM, Alfonso Urroz wrote:
> Marc, I know you have answered this before, but I just wanted to know, where is the web application file or files on Gambit Scheme?
I posted the following message to comp.lang.scheme not too long ago with the code for a barebones HTTP server.
Marc
Here's a barebones HTTP server for Gambit. It should be fairly
obvious how to extend this to your specific requirements, such as
handling forms. If you need something more general check out the
examples/web-server directory in the Gambit source code distribution.
Marc
;;; File: "simple-http-server.scm"
(define http-server-address "*:8000") ;; "*:80" is standard
(define (http-server-start)
(let ((accept-port
(open-tcp-server (list server-address: http-server-address
eol-encoding: 'cr-lf))))
(let loop ()
(let ((connection (read accept-port)))
(if (not (eof-object? connection))
(begin
(http-serve connection)
(loop)))))))
(define (http-serve connection)
(let ((request (read-line connection)))
(if (string? request)
(let* ((r
(call-with-input-string
request
(lambda (p)
(read-all p (lambda (p)
(read-line p #\space))))))
(method
(car r)))
(cond ((string-ci=? method "GET")
(http-get connection (cadr r)))
(else
(println "unhandled request: " request)))))
(close-port connection)))
(define (http-get connection document)
(print port: connection
"HTTP/1.0 200 OK\n"
"Content-Type: text/html; charset=ISO-8859-1\n"
"Connection: close\n"
"\n"
"<pre>\n"
"document requested: " document "\n"
"</pre>\n"))
(http-server-start)
More information about the Gambit-list
mailing list