An earlier release of Tapestry was called "yet another web application framework, whatever that means" by Cafe Au Lait.

I guess in a world that is crowded by the likes of JavaServer Pages, Freemarker, WebMacro, Turbine (etc.) there doesn't seem to be a need for "yet another".

However, that makes the assumption that Tapestry is just another framework for generating dynamic HTML from a template. That's a significant part of it, but far, FAR from all.

First, Tapestry applications are built from components ... and these components communicate by getting (and occasionally setting) JavaBeans properties. By contrast, a JSP developer must be concerned with the character-by-character generation of the HTML.

Second, the Tapestry framework is built around a "round trip" concept. When generating HTML, applications create "potentials": links that may later by clicked, or forms that may be submitted. Under JSP, these "potentials" are the responsibility of the application developer ... who must construct URLs that reference other servlets or JSPs within the application (as well as encode any parameters).

Tapestry leverages its component object model to take care of potentials itself. It generates appropriate URLs and responds when those URLs are triggered in a later request ... the application provides delegates that are notified when the corresponding component is triggered.

Tapestry does a huge number of other things: it manages localization, facilitates re-use of components, manages server-side client state, supports load balancing and fail over within the application server and a host of other things.

Tapestry is heavily documented, both in Javadoc and as Word/PDF, including tutorials and examples including a full J2EE application (The Primix Virtual Library).