Waffle is a Java web framework that makes the process of developing Java based web applications easier. It was built to support enterprise level web-based business applications, but with the least possible number of source lines to achieve that.
Waffle is different from the multitude of web frameworks that exist today, in that Waffle:
* has no mandatory XML configuration files (beyond a minimalist web.xml required by any J2EE-compliant webapp)
* is interoperable with best-of-breed UI templating technologies
* does not have a base controller class to extend or interface to implement
* has controller classes that can support multiple actions, each a single method rather than a sequence of initialiation/settter/execute methods
* has a small learning curve
Application built upon Waffle only need to be aware of three things:
1. Controllers - in Waffle a Controller class is simply a plain old Java object (POJO), ie it does not need to extend or implement any specific class or interface.
2. Action Method - in Waffle an Action Method is simply a method defined in your Controller class (and optionally annotated with @ActionMethod). Any method can be used regardless of its signature or return type. Waffle will react differently depending on what is returned from the ActionMethod, see Action Methods for further details.
3. Registrar - the Registrar class is where the Controllers, and other components your application depends on, are registered. Typically, most web frameworks require your applications to create special XML file(s) for this, but int Waffle Registrars are Java objects that allow you to implement your business logic more efficiently. Of course, Waffle does allow - but does not mandate - a Registrar to read a configuration from a file, be it XML or a scripting language.
Additionally, Waffle provides:
* Transparent REST functionality for controllers.
* Transparent JSON functionality for controllers.
Choices of markup language
As Waffle does not come with a HTML markup technology, it plays well with other 'best practice' and established solutions, such as:
* JSP - with or without supplied taglibs
* Freemarker
* Velocity
* Ruby's ERB