Amigo, minha opnião:
Para fazer Web, penso que html+css+javascript, é o que da maior flexibilidade, pois é disso que a Web é feita.
Em relação a produtividade, vejo que o material disponivel é tanto (quando se adota o html para view), pois pode pegar html puro, gerado por programas de design, gerado por sistemas php, etc etc, ou seja, eu discordo quando dizem que fazer html na unha é improdutivo… eu acho até mesmo mais produtivo que muito framework (tipo struts 1 que mais atrapalha do que ajuda).
Mas então falando de html e css… você pode utilizar qualquer editor para criar o layout do site e facilmente consegue adaptar o mesmo para JSP, usando JSTL e para as regras mais complexas criar suas próprias taglibs (eu acho isso simples)! Já trabalhei com designers que faziam o serviço de layout no dreamweaver e depois o estagiário enxugava o HTML, limpava e identava o código e preparava a JSP com JSTL. As taglibs eu costumo deixar pro final.
Escrevendo javascript usando algo como jquery (meu preferido), o trabalho de JS também é bem facilitado! (Neste caso concordo que javascript é meio chato de trabalhar e não tão produtivo quanto java, mas por isso que abstraio muita coisa via AJAX e para fazer a parte de AJAX… eu gosto do DWR!
Ja fiz diversos sistemas usando a combinação: HTML+CSS+JASVACRIPT (JSP) + JSTL + TAGLIBS + DWR e não tive problemas (não posso falar a mesma coisa com alguns outros frameworks baseados em componente, pois no caso de websites, eu vejo eles como limitadores sim, ou no minimo, quando tem algum problema sério e precisa gerar seus próprios componentes… a sua produtividade ganha no começo do projeto vai toda por agua abaixo). Sei la… JSF para web, tem algumas combinações bizarras de SO + Browser que costumam dar problemas em alguns componentes, sem dizer que é tanto AJAX que os sistemas feitos com estas tecnologias costumam não funcionar direito em conexões lentas (tipo discada)! Por isso vejo que é importante analisar o que precisa ser feito para escolher a tecnologia.
Para o Controller, só considero o uso de Servlets se tiver poucas coisas ou se implementar o pattern de Front Controller e abstrair algumas coisas básicas da aplicação!
Caso contrário, acho que tanto faz usar Spring MVC, VRaptor, entre outros… será mais uma questão de gosto mesmo!
Eu penso… se é web (site)… quase sempre adoto JSP+JSTL+DWR e uso Spring ou implemento Fronto Controller.
JSF vejo como uma coisa melhor para intranets e aquilo que roda na rede local, embora para este tipo de solução, muitas vezes é vantagem utilizar Swing e/ou SWT, ou até mesmo um cliente desktop em .NET (quando precisa rodar em maquinas lentas com 256Mb de memória).
Boa sorte no projeto