## PLT Web Server: Servlet Interface

Instead of serving files from a special directory verbatim, the Web server executes the contained Scheme code and serves the output. By default, the special directory is named "servlets" within the "default-web-root" of the "web-server" collection directory. Each file in that directory must evaluate to a servlet.

A servlet is a `module` that provides three values: an `interface-version`, a `timeout`, and a `start` procedure:

> `

>     	    (module servlet mzscheme
>     	    (require (lib "servlet.ss" "web-server"))
>     	    (provide interface-version timeout start)
>     	    (define interface-version 'v1)
>     	    (define timeout +inf.0)
>     	    (define (start initial-request)
>     	    ...))

> `

The `start` procedure should produce a response to an HTTP request. Please refer to the documentation available via the Help Desk for more information about working with these values and programming servlets.

### Special URLs

The Web server caches passwords and servlets for performance reasons. Requesting the URL

> `http://my-host/conf/refresh-passwords`

reloads the password file. After updating a servlet, loading the URL

> `http://my-host/conf/refresh-servlets`

causes the server to reload each servlet on the next invocation. This loses any per-servlet state (not per servlet instance state) computed before the unit invocation.

The Web server's garbage collect may be invoked at the URL:

> `http://my-host/conf/collect-garbage`

Examples of Servlets

Powered by