{- | Module : Happstack.Server Copyright : (c) Happstack.com 2010; (c) HAppS Inc 2007 License : BSD3 Maintainer : Happstack team <happs@googlegroups.com> Stability : provisional Portability : GHC-only, Windows, Linux, FreeBSD, OS X Happstack.Server provides a self-contained HTTP server and a rich collection of types and functions for routing Requests, generating Responses, working with query parameters, form data, and cookies, serving files and more. A very simple, \"Hello World!\" web app looks like: > import Happstack.Server > main = simpleHTTP nullConf $ ok "Hello World!" By default the server will listen on port 8000. Run the app and point your browser at: <http://localhost:8000/> At the core of the Happstack server we have the 'simpleHTTP' function which starts the HTTP server: > simpleHTTP :: ToMessage a => Conf -> ServerPart a -> IO () and we have the user supplied 'ServerPart' (also known as, 'ServerPartT' 'IO'), which generates a 'Response' for each incoming 'Request'. A trivial HTTP app server might just take a user supplied function like: > myApp :: Request -> IO Response For each incoming 'Request' the server would fork a new thread, run @myApp@ to generate a 'Response', and then send the 'Response' back to the client. But, that would be a pretty barren wasteland to work in. The model for 'ServerPart' is essential the same, except we use the much richer 'ServerPart' monad instead of the 'IO' monad. For in-depth documentation and runnable examples I highly recommend The Happstack Crash Course <http://happstack.com/docs/crashcourse/index.html>. -} module Happstack.Server ( -- * HTTP Server module Happstack.Server.SimpleHTTP -- * Request Routing , module Happstack.Server.Routing -- * Creating Responses , module Happstack.Server.Response -- * Looking up values in Query String, Request Body, and Cookies , module Happstack.Server.RqData -- * Create and Set Cookies (see also "Happstack.Server.RqData") , module Happstack.Server.Cookie -- * File Serving , module Happstack.Server.FileServe -- * HTTP Realm Authentication , module Happstack.Server.Auth -- * Error Handling , module Happstack.Server.Error -- * I18N , module Happstack.Server.I18N -- * Web-related Monads , module Happstack.Server.Monads -- * Proxying , module Happstack.Server.Proxy -- * Output Validation , module Happstack.Server.Validation -- * HTTP Types , module Happstack.Server.Types -- * Other , module Happstack.Server.Client -- , module Happstack.Server.Internal.Monads ) where import Happstack.Server.Client import Happstack.Server.SimpleHTTP (simpleHTTP , simpleHTTP' , simpleHTTP'' , simpleHTTPWithSocket , simpleHTTPWithSocket' , bindPort , bindIPv4 , parseConfig , waitForTermination ) import Happstack.Server.FileServe import Happstack.Server.Monads import Happstack.Server.Auth import Happstack.Server.Cookie import Happstack.Server.Error import Happstack.Server.I18N import Happstack.Server.Response import Happstack.Server.Routing import Happstack.Server.Proxy import Happstack.Server.RqData import Happstack.Server.Validation import Happstack.Server.Types -- import Happstack.Server.Internal.Monads