First of all you should decide what kind of web framework are you looking for, action-based or component-based, or else.
Action-based means that the web application is fundamentally page-oriented, where HTTP requests are dispatched to a specific controller and then responded.
Component-based means that the web application is more about components than pages. You develop your web application similar to developing desktop GUI applications and Flex RIAs.
Service-oriented web applications are those that provide REST APIs and generally consume and produce JSON, XML, or Atom... not HTML. This kind of applications will be discussed in another post (remind me, please!) :-)
Here are the frameworks that I recommend you should review.
Action-based Java Web frameworks
- Spring MVC (part of Spring Framework). View technology: JSP, Velocity, Freemarker.
- Struts 2
- JRuby on Rails
Component-based Java web frameworksThanks to JSF 2.0, the choice in this category is simpler. JSF 2.0 comes with built-in AJAX support, which means you not only have a choice in component libraries but can mix-and-match them if you want.
- "Pure" JSF 2.0
- JSF 2.0 + IceFaces 2.0
- JSF 2.0 + RichFaces 4.0
- JSF 2.0 + PrimeFaces 2.0.
A unique feature is TouchFaces, a component library for mobile and touch devices.
- JSF 2.0 + Apache Trinidad 2.0
- Apache Wicket
For the JSF 2.0 implementation you have several choices: Mojarra, Apache MyFaces.
- JBoss Seam 3 (not yet released) since it has JSF 2.0 support.