What java framework(s) to use for web application programming?
Java not in vain considered to be the language of frameworks.
Cayenne, iBatis and of course Hibernate for O/R mapping.
Spring, Guice and what else for Dependency Injection.
Spring MVC, Struts, JSF and a few dozen else for MVC.
GWT for RIA applications.
Some new thing in java programming world: Domain Driven frameworks.
This class of frameworks contains: OpenXava, Spring Roo, Naked Objects, Roma Framework and few more.
Who are in a position in this deal? What framework(s) to use?
Standard de facto is to use Spring, Hibernate and some MVC framework. From them (MVC) possible to say Struts the most widely used in the past. JSF pretend to be a standard. And Spring MVC simply the best.
Recently become popular Wicket and his little brother Click.
But this kind of software development though very flexible, powerful and scalable, seems to be really overkill for 80 % of web applications, that more effectively can be implemented with some so called Domain Driven frameworks like Spring Roo, Naked Objects or OpenXava.
Read Java Domain Driven Frameworks Review for comparison and basic knowledge about such frameworks.
If your application must be RIA use GWT. It may be 1-2% of all web applications.
And the rest can be implemented with traditional trio: Spring, Hibernate and MVC* framework of your choice.
*Some experts notes that Wicket is not MVC framework, but to not come in redundant complexity in this simple article let think about that it is MVC or something like and can plays his role in web application.