I have just finished building my first Grails/Groovy web application, and I have to say that it was quite enjoyable.
Croovy is a programming language built on Java, using a pre-compiler model like Objective-C. The Groovy source is parsed and compiled into Java classes that conform to the Groovy programming model.
What is great about the model is that it follows some of the design principles of truly dynamic languages. I don’t have to know the type of an object in order to manipulate it. And everything is an object. Groovy auto-boxes primitive types like integers and strings. Even code is an object, using closures. And, anything that supports the desired properties can be used in the appropriate context. For example, I can create mocked up objects using a map with bindings for the appropriate properties.
Grails adds a web application framework onto the underlying Groovy, so that is extremely simple to create your application simply by defining the properties and behaviors of your domain objects. Grails uses a model-view-controller (MVC) architecture for the application.
Application behavior is built in controller classes, each of which has closure properties that represent the actions that can be performed by that controller. Views are rendered from the controller by Groovy Server Pages (GSP), which are like JSPs that can access the Groovy objects. The dynamic content for the page rendering is provided by a map returned from the controller action. Grails automatically associates the proper page to render, based on the controller and action. Custom tags are simple to create, and tend to keep the GSPs clean.
On top of all of that, Grails uses injection for behavior encapsulated in service classes, handles all of the i18n nonsense, provides for filters, data sources, war deployment, unit and integration tests, libraries, page templates, CSS, etc.
Spent the day with my nephew’s robotics team. They placed in the 30s but learned a bunch. 