UnCommon Web

Features

Linear Page Flow Logic

UnCommon Web provides developers with the illusion that web pages are nothing more than function calls. This characteristic allows developers to write the page flow control logic as if it was a "regular" sequence of function calls. Developers can now ignore all of the accidental complexities introduced by the stateless HTTP protocol, the browser's "back" button and window cloning and concentrate on creating complex web applications.

Component Oriented UI

Components are CLOS objects which are used for representing both the "look and feel" of an application and the presentation logic. This component oriented system allows both the graphical elements and the presentation logic to be easily reused and adapted.

UnCommon Web provides a library of standard components which applications can tailor to their specific needs. This library includes, among others: a tabbed pane widget, a generic login form, a "select from options" component and a range view component.

Adaptability

The core request->eval->response loop is written in terms of a well defined protocal based on generic functions. Extending or modifying the core can be accomplished by simply redefining generic functions and defining classes. Modifications to the UI generation or i18n sub-systems can be made with the same ease.

Dynamic HTML Generation

UnCommon Web provides a programmer friendly HTML generation library which uses intuitive HTMLish macros and compiles to efficent text generation code. UnCommon Web also provides a designer friendly HTML templating system.

Both of these HTML generations systems are available in an independent library yaclml.

Portable

UnCommon Web has been ported to various Common Lisp implementations: OpenMCL, CMUCL and SBCL, CLISP and Allegro.

UnCommon Web is able to use multiple HTTP server backends: Apache + mod_lisp, aserve (and portableaserve), or araneida. UnCommon Web also contains a small pure lisp http server.

Normal Web App Fare

UnCommon Web, like most web frameworks, also provides: transparent session management (url rewriting or cookie based); logging (via the arnesi library); interactive error handling based restarts and, for non interactive sessions and production environments, web based inspectable backtraces and customizable "user friendly" 501 error pages.