The official documentation covers virtually everything. The official website also has a series of great tutorials in video and text formats. There are links to Github repositories for Spring sample applications and there are also a lot of third-party tutorials out there for the fact that Spring MVC is so widely used by many experienced developers.
Updating your project is manageable if you’re already familiar with the framework and the project itself, but if you’re just diving in it can be a little overwhelming and hard.
Spring MVC architecture although simple has a lot of layers and abstractions which can be hard to debug if problems arise. It is also highly dependant on the Spring core.
It's an old and mature framework that has numerous amount of ways to extend and configure it – and this actually makes it fairly complex.
While actually very good and with a very complete and rich feature set to develop and maintain code on the server side, it still doesn't provide any rich framework for building good user interfaces.
Being the oldest and most used JVM web framework, means that Spring MVC has a massive community of followers who are very helpful and have provided numerous tutorials and answers on SO.
Spring even holds an annual conference called SpringOne. The Spring forums and SO are great places to ask and get help about anything Spring related. The website blog and newsletter keep developers informed on every news related with the framework.
Spring is convoluted and XML-ridden. Deploying things on the JVM has always been a pain in the nipple and nothing has changed much since the 90s. All things Java-related are wordy, verbose, and a waste of developer time.
If you are looking to build a quick prototype fast and easy, Spring isn't going to help much. It's very large and quite hard to grasp if you are just beginning with it.
Applications are meant to scale as the framework is used in large-scale applications worldwide. Components like EhCache are used to scale memory cache and it also contains components used for parallel processing.
Batch enables processing of large volumes of records and job processing statistics.
It is based and is dependent on the Spring Framework, therefore it benefits from tools like for example Roo and Spring Tool Suite and many more tools included in the Spring Framework. All Maven dependencies are available in a public Maven repository.
There are also 3rd-party solutions for Spring, such as MyEclipse which includes scaffolding capability for Spring MVC.
You can use the event bus to distribute the "message" both in the same server or in other instances. This alleviates the need for a messaging software like RabbitMQ most of the times.
Play has quite a large community which provides numerous tutorials and videos related to developing with Play.
The Play official documentation covers many things, such as the framework itself but also specific stuff such as Akka, SBT and Netty.
There are also many big companies that base their main sites around Play, one of them is LinkedIn which provides third-party documentation on a regular basis.
Play framework's convention over configuration methodology makes most Play projects have a very similar structure. This means that the code written for the framework is very readable. This enables a developer to switch between applications without having to relearn the ecosystem for every project. The built-in templating system also helps with code and makes it possible to have a very low count of lines of code.
Play is very simple to get started. The documentation is very helpful for beginners and advanced users alike and the official website has a great "Getting Started" tutorial to begin developing with Play.
The jump from Play 1 to Play 2.x caused a lot of confusion. While it is important to have some kind of evolution, sometimes it causes backward incompatibility which can create some problems. It makes tutorials or modules made for the old version obsolete. This can make it hard for beginners to find useful resources. The template engine which used Groovy now uses Scala.
Play uses Akka for concurrency, Scala for a templating engine, Netty as a client-server framework and SBT (Simple Build Tool) for building. And they all come out of the box.
Play also comes with the option to scaffold your applications. Play is an all-embracing ecosystem designed to increase developer productivity and shorten development times.
Grails is an abstraction over Spring and Hibernate. This makes Grails applications fast and scalable. This is because both Spring and Hibernate are themselves scalable.
Grails is a full-stack web framework, not just MVC. It contains a lot of stuff out of the box, but it doesn’t enforce it. It contains over 900 plugins which provide a Groovy API for a lot of useful and well-known Java libraries. And what is more important is that they are super easy to install!
Setting up a new project is quite fast and code generation (scaffolding) saves you a lot of time. It also uses a convention over configuration principle which helps you bypass all the configuration trouble.
Grails also comes with a reloading mechanism out of the box.
Grails is designed to be a rapid development framework with a straight learning curve. It advocates convention over configuration. Extensibility is very simple when using plugins (there is a lot of them). One command in the console – and all the dependencies and configurations are managed for you.
Grails is a pretty heavy piece of software. It's functionality is covered by GORM (Grails' Object Relational Mapping) which is a facade for hybernate and by Spring MVC.
Everything is glued by core Spring and furthermore, Grails adds another level of abstraction on top of all this. These things may create some trouble down the road when debugging.
If you're a big fan of the JVM and have mastered all its goofy quirks, Grails might be a good choice, but there are other frameworks out there that are more straightforward and easier to use.
Do you need something advanced in the UI? You can either create it in GSP with an addon of CSS/JavaScript or you can find a plugin that will do the work for you. Plugins include integration with Bootstrap, jQuery, Yeoman and much more.
The Documentation section is actually a wiki, which can be modified by any logged in user. It has an official manual, tutorials, screencasts, a sample app and much more. If that does not do it for you, then there are countless third-party tutorials, more than 12k questions on SO and much much more
By far the easiest web framework to have up and running. Once dependencies like maven are installed it is up and running in minutes with one simple command.
Vaadin has a 'design mode' which allows developers to drag and drop components into a canvas and then provide the logic for every component. There are also a lot of third party tutorials and guides which help with the initial learning curve.
The book of Vaadin is a must have for every developer that uses Vaadin to make web apps. It is an excellent reference manual and all around a great tool for every Vaadin related need. You can find and download the pdf online or get it for free in almost any Vaadin sponsored conference.
The online documentation is also very good. It has some tutorials and video guides.
There is also a vibrant community which sorround Vaadin, for any problem you may have there is a big chance that someone has already asked and answered that question on StackOverflow or in the Vaadin forums. If not, it will probably be answered quickly if you ask it.
Vaadin comes with the Valo Theme, a Sass-based theme and engine that calculates styles based on configurable variables and making it easy to define a completely new theme with a few lines of SCSS.
Vaadin has what is called the Vaadin Directory which is a repository of downloadable Vaadin components which can be easily used for development. To use something from the repository, you need to download the JAR file and add it to the project.
Since Vaadin stores the UI state and logic in the server, this means that for every user interaction a request needs to be sent to the server and the client needs to wait so it can know how to react. This leads to higher traffic and load times.
Luminus is built on a stack of composable libraries that can be easily swapped to make the application fit the needs of the user. The applications are generated using Leiningen templates and can be initialized with a specific set of features, such as database connections, needed for a specific application.
Luminus is small and flexible. It's geared towards interactive development using the REPL. You can see your changes as you're working without having to restart the application.