You have struts (old, but still used), JSP, JSF (on top of JSP), Facelets (because JSF on top of JSP is problematic), JSF 2.0 (soon), GWT, Tapestry etc… You have specs and application servers, web containers with their soap opera relationships with specs. J2EE 1.4 or J2EE 5? Tomcat or JBoss, if so which version? Java 5 or 6?
By the way, why not think about different implementations of the same standard? MyFaces or Sun’s reference implementation of JSF? Oh, I forgot to mention, J2EE 5 makes application servers provide their own implementation, so you may need to figure out how to replace defaults with your library.
While you think about this, endless libraries and frameworks are born and an equal amount of them is dying. It is like the universe with stars and planets. Only for Ajax in JSF you have at least four options, some of them being relatives of others. GWT, Ajax4JSF, RichFaces, GWT4JSF….
And what about the glue type of frameworks? Spring and/or Seam for your web application would be nice, don’t you think so?
I am just trying to come up with a set of reliable and productive tools and technologies, and for Java and web based development, I do not feel like I’m winning. Seriously, things are getting out of control in this domain. The problem is I am in a position where I have to build a set of tools that will support web based development, but in such a fragmented domain, how can I target the combination with largest set of users? I don’t know, I really do not know.