Really wish you had contributed a little more then just asking a question, but oh well.
You don't break the choices down quite right.
First you've got to decide if you want to go with a full blown application server or not. Examples include Enhydra with its XMLC markup language, but there are others as well. (BEA for example) With an application server you get a number of fancy features, connection pooling, object-relational mappings, caches, etc. All useful features for building a large website, and all features which you can find elsewhere, but sometimes its nice to have them bundled for you.
Struts clocks in at something less complex then an app server, but more complex then anything else you've mentioned. Struts has some nice design patterns, and utilities that you'll find yourself recreating in any large servlet/jsp based applications.(How many people here have written a method to populate a bean from a request object, raise your hand) However I find its emphasis on taglibs a little awkward, and hard to feel comfortable with. So I would reccomend against Struts, but that is based on my shallow interactions with it.
Then it sounds like you are unsure if you want to use JSPs, or a template system, there are pros, and cons to both. The pros to JSP are its a standard, this means:
the cons are that JSP is not perfect, and often encourages a mixing of presentation and middle layer. Javaworld has a good article on the cons of JSPs, that is also an introduction to my favorite of the templating soltuions, FreeMarker
- you can find people who know it
- you can find good books on it
- you can find people to steal code from
- its actively being maintained and improved by the industry
A couple of other technologies you might look at our: Resin as a super fast servlet container, and JBoss or ExoLab for opensource J2EE implementations.