doc.txt

WEB (planet "web.scm" ("soegaard" "web.plt" 2 0))

------------------------------------------------------------------
  WEB              (planet "web.scm" ("soegaard" "web.plt" 2 0))      
------------------------------------------------------------------

This module provides all exports from the modules below. That is
from:

  - binding.scm
  - cookie.scm
  - default.scm
  - doctype.scm
  - response.scm
  - request.scm
  - servlet.scm

furthermore the bindings from

  - (lib "xml.ss" "xml")
  - (lib "servlet.ss" "web-server")

are provided.

------------------------------------------------------------------
  COOKIES       (planet "cookie.scm" ("soegaard" "web.plt" 2 0))
------------------------------------------------------------------

This module provides a convenient interface to the cookies.

The following functions are available:

  - make-cookie       to create cookies
  - request-cookies   to extract cookies from a request
  - cookie-value      to extract a value stored in a cookie
  - cookie-values     to extract values stored in a cookie
  - output-cookie     to add a cookie to current-output-cookies

Furthermore two parameters are provided:

  - current-cookies          holds the cookies received in the current request
  - current-output-cookies   holds the cookies which will be sent out in the
                              response to the current request

The current-cookies parameter is to be set in the servlet's start functions.
The list of cookies in current-output-cookies is to be included in
in the response returned from the servler's start function.


 > (make-cookie  name val #:key (comment #f) (domain #f) (max-age #f) (path    #f) (secure #f) (version #f))

Return a cookie where name is associated with val.
If a keyword argument is present with a non-false value
then the corresponding cookie field is set.

Example:
   (make-cookie "time" (number->string (current-seconds)) #:max-age 3600)
   (make-cookie "id" "soegaard")


> (request-cookies request)
request-cookies : request -> bindings

Extract the cookie bindings from a request.


> (cookie-value name #:optional (on-not-found #f))
cookie-value : string -> (union string #f)

Return the first value associated with name.
If none exists, the optional keyword argument
on-not-found is returned - it defaults to #f.


> (cookie-values name)
cookie-values : string -> (list string)

Returns a list of the values associated with name.


> (output-cookie cookie)
output-cookie : cookie -> #void

Add cookie to current-output-cookies. They are to
be sent out eith the response to the current request.


------------------------------------------------------------------
  RESPONSE      (planet "response.scm" ("soegaard" "web.plt" 2 0))
------------------------------------------------------------------

This module provides a convenient interface to generating
responses to a web-server request.

The function

  - make-response   to generate a response

and the parameters

  - current-response-code      defaults to 200
  - current-response-message   defaults to "Okay"
  - current-response-seconds   defaults to (current-seconds)
  - current-response-mime      defaults to (string->bytes/utf-8 "text/html")
  - current-response-extras    defaults to '()

  - current-redirect-permanently   defaults to #f  ; 301 Moved Permanently
  - current-redirect-temporarily   defaults to #f  ; 302 Moved Temporarily
  - current-redirect-see-other     defaults to #f  ; 303 See Other

are available.


 > (make-response document #:key
 >               (code    (current-response-code))
 >               (message (current-response-message))
 >               (seconds (current-response-seconds))
 >               (mime    (current-response-mime)))

Make-reponse generates a response whose body is document.
If a keyword argument is not present, the corresponding
parameter is used. Cookies are taken from the parameter
current-output-cookies. The parameter current-response-extra
is appended to the cookie associations and used as the
extra field of make-reponse/full [see doc for this funtion].

If any of the redirect parameters are assigned an url (as a string)
then a redirect repsponse is sent instead of a normal response.


------------------------------------------------------------------
  REQUEST      (planet "request.scm" ("soegaard" "web.plt" 2 0))
------------------------------------------------------------------

This module contains the parameter

 - current-request    holds the the current request

further more the function

 - make-test-request  generates a test request

is available.

> (make-test-request
>              #:key
>              (method        'get)
>              (uri           (string->url "http://localhost/"))
>              (headers/raw   '())
>              (bindings/raw  '())
>              (post-data/raw #f)
>              (host-ip       "127.0.0.1")
>              (host-port     80)
>              (client-ip     "127.0.0.1"))

The contracts for the various arguments are:

  method          symbol?
  uri             url? 
  headers/raw     (listof header?)
  bindings/raw    (listof binding?)
  post-data/raw   (or/c false/c bytes?)
  host-ip         string? 
  host-port       number?
  client-ip       string?

Returns a request that can be used to testing purposes. 
The default values are seen above.


------------------------------------------------------------------
  SERVLET      (planet "servlet.scm" ("soegaard" "web.plt" 2 0))
------------------------------------------------------------------

This module provide the servlet syntax to conveniently define
a servlet.

> (servlet body ...)           : syntax

Evaluates to a function that receives a request and returns a 
response. It is intended to be used as the start procedure
in a module based servlet:

(module my-servlet mzscheme
  (provide interface-version timeout start)
  (require (planet "web.scm" ("soegaard" 1 0)))

  (define interface-version 'v1)
  (define timeout 6000)
 
  (define start
    (servlet 
      `(html (head (title "A title"))
             (body "A simple servlet"))))
)

The servlet receives the request and sets the parameters:

  - current-request
  - current-cookies
  - current-output-cookies
  - current-bindings
  - current-response-seconds

Then the body expressions are evaluated in order from left
to right. The last body expression must evaluate to an xexpr.
The response is generated by calling make-response with
the xexpr in question. 

Tip: Use

  (servlet 
    (with-errors-to-browser 
      send/finish
      dispatch-on-action))

to see web-server errors directly in the browser
during developing.


------------------------------------------------------------------
  BINDING      (planet "binding.scm" ("soegaard" "web.plt" 2 0))
------------------------------------------------------------------

Provides the parameter

  - current-bindings   holds the bindings of the current request

and these exports from Jay McCarthy's with-binding.ss:

  - with-binding
  - with-bindings
  - with-binding/default-values
  - with-bindings/defaults

> (with-binding bindings (single-name ...) body ...)

Evaluates the body expressions in an environment, where each 
  single-name is bound the value associated with single-name
              in bindings, if single-name is not present in
              bindings, it is bound to #f


> (with-bindings bindings 
                 (bool-name ...) 
                 (single-name ...) 
                 (multiple-name ...) 
                 body ...)

Evaluates the body in an environment where each
  bool-name      is bound to #t, if bool-name is present in bindings
                 and #f otherwise
  single-name    is bound the value associated with single-name
                 in bindings, if single-name is not present in
                 bindings, it is bound to #f
  multiple-name  is bound to a list of the values associated to
                 multiple-name in bindings, (if no bindings are
                 present, it is bound to the empty list)


> (with-bindings/default-values bindings 
    (bool-name ...) 
    ((single-name single-default) ...) 
    ((multiple-name multiple-default) ...) 
    body ...)

Evaluates the body in an environment where each
  bool-name      is bound to #t, if bool-name is present in bindings
  single-name    is bound to the value associated with single-name
                 in bindings, if single-name is not present in
                 bindings, then it is bound to the corresponding
                 single-default
  multiple-name  is bound to a list of the values associated to
                 multiple-name in bindings, if no bindings are
                 present, it is bound to the corresponding
                 multuple-default

> (with-bindings/defaults bindings 
    (bool-name ...) 
    ((single-name single-default-thunk) ...) 
    ((multiple-name multiple-default-thunk) ...) 
    body ...)

Evaluates the body in an environment where each
  bool-name      is bound to #t, if bool-name is present in bindings
  single-name    is bound to the value associated with single-name
                 in bindings, if single-name is not present in
                 bindings, then it is bound to the result of
                 calling single-default-thunk
  multiple-name  is bound to a list of the values associated to
                 multiple-name in bindings, if no bindings are
                 present, it is bound to the result of calling
                 the multiple-default-thunk

------------------------------------------------------------------
  DOC TYPE      (planet "doctype.scm" ("soegaard" "web.plt" 2 0))
------------------------------------------------------------------

Contains definitions of all doctypes listed at

    <http://www.w3.org/QA/2002/04/valid-dtd-list.html>

the 16th feb 2006.

The following doctypes are exported:

   doctype-HTML-4.01-Transitional
   doctype-HTML-4.01-Frameset
   doctype-XHTML-1.0-Strict
   doctype-XHTML-1.0-Transitional
   doctype-XHTML-1.0-Frameset
   doctype-XHTML-1.1
   doctype-HTML-2.0
   doctype-HTML-3.2
   doctype-MathML-1.01
   doctype-MathML-2.0
   doctype-XHTML+MathML+SVG
   doctype-SVG-1.0
   doctype-SVG-1.1-Full
   doctype-SVG-1.1-Basic
   doctype-SVG-1.1-Tiny
   doctype-XHTML+MathML+SVG-Profile--XHTML-host
   doctype-XHTML+MathML+SVG-Profile--SVG-host

For example doctype-HTML-4.01-Strict is bound to 

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

Futhermore the parameter 

  - current-doctype   holds the current doctype

is provided. The current-doctype is used as default by make-response.

The default doctype is XHTML-1.0-Strict.


------------------------------------------------------------------
  DEFAULTS            
------------------------------------------------------------------

These functions are undocumented on purpose, since they may
disappear in the next version.

> (define-default name val)
> (override-default stx)
> (with-defaults body ...)

They are an attempt to solve the sevlet/parameter problem
described in this thread:

<http://list.cs.brown.edu/pipermail/plt-scheme/2006-February/011828.html>




------------------------------------------------------------------
  Keywords            
------------------------------------------------------------------

Keywords: _web_ _cookie_ _cookies_ _response_ _request_ _servlet_
          _doctype_