With so many Java based web development frameworks available today, which one to select and which one not to, can be really tough at times. Even though there are well established frameworks available today, there can be some specific requirements which can make us feel that the chosen framework was not the best one.
I have tried to come up with factors that come into play while deciding or locking upon a given web framework.
Control over customization of URLs
No website is complete in itself if that is not listed on the first few pages of the search engine. URLs play a very important role in determining your site's rank on the search engine. Framework should ideally support meaningful urls. For e.g. no long parameter names and no long parameter values. Also, url should mean the content it is pointing to. In cases where we want the website to have search-engine friendly URLs, a great lot of control is needed on the URLs of the website and frameworks totally control the way you define them. Framework that doesn't give you (as a developer) a good control over the customization of URLs of the website is not worth considering for development.
A good number of java based frameworks are based on MVC pattern. Some of these frameworks require considerable plumbing for tying up varous layers / components together. Configuration can take a toll on the development / maintenance time especially for a small websites. For example, for adding a new error message can sometimes impact 3-4 different files in some frameworks. Conventions definitely help in such cases. Not to forget, for large websites, configuration can prove useful when compared with convention, because it gives you a good control when debugging the various layers because there is no magic happening behind the scenes ( and that's what you configured).
It's complementary of configuration. For small websites, convention can help you speed up the development. Whereas it can be of little use for large websites, because conventions can give you a impression of magic happening behind the scenes which can seriously impact the debugging of issues.
Support for implementing cross cutting concerns
Analyzing events, tracking user behaviour, securing certain parts of the website, playing around with URLs are some of the features that are much needed in any website today and especially in branding websites. Implementation of such requirements in a website can easily lead to a cluttered, clumsy and redundant code without the support of interception of http requests. Any frameworks that provides good support for intercepting http requests can help in writing a more maintainable code.
Ideally speaking, no framework should ever be selected on the basis of its IDE support. But that's practically false. IDE support for a framework can improve the developer productivity to a good extent.
Active Development Community
Framework development teams sometimes have a good backup to keep up the good work whereas sometimes they don't. There are frameworks developed by a one-man-army as well. If the framework development team is not that active, then it may lead to a situation where the framework is not able to keep up the pace and hence there is no support of much needed features as the website grows. To avoid such situations, it is must that framework is backed by an active development team.
Integration with Template engine
Instead of defining your own view layer in jsp / html, it is helpful sometimes to use a template engine such as free marker, velocity. However, a translation layer is needed in between to make the model accessible to the template engines. Frameworks that has these translation layer readily available can be helpful to leverage the benefits of the template engine quickly.
Integration with CMS
CMS plays a very important role in managing the content of a website. Any framework that supports the integration with CMS or makes the integration easy can be a real boost in development.
Formatting dates, formatting numbers, pagination and various other concerns are almost common in any website today. Some frameworks have tag libraries for handling such concerns effectively in the view layer.
Support for Web Services
Web services can be useful in many cases such as integration with third parties, exposing the functionality as a web service etc. Frameworks that can handle repetitive or common concerns and other infrastructural issues in the implementation of web services efficiently can have a upper hand on other frameworks that lack that support.
Support for ORM framework
There is a lot of boilerplate code that comes into picture while implementing data access layer for any website. Even though this boiler plate code can be implemented effectively so as to avoid redundancy, but there's no point in re-inventing the wheel. Some frameworks do have support for integrating with ORM framework effectively.
Frameworks should not only ease out the implementation but also ease out the testability of that implementation. Frameworks which puts the testability of the website at risk is not worth considering.
Support for Localization and Internationalization
To make your website accessible to as many users as possible, localization and internationalization are now inevitable features for any website. And frameworks do play an important role in implementing them effectively.