Cada projeto pode pedir um tipo de arquitetura diferente.
Aqui na empresa temos alguns aplicativos Web que usam a seguinte arquitetura:
JSP -> Struts Action -> Business Class (Pojos singleton) -> DAO/Hibernate ou em alguns casos Web Services
As camadas se comunicam através de TO, e alguns JavaBeans especificos.
No caso dos JSP´s, usamos somente JSTL.
Essa arquitetura pode parecer bem simples e propositalmente ela é!
A ‘manutenabilidade’ era um requisito não funcional muito forte, pois as aplicações iriam sofrer constante evolução.
Hoje vemos que foi a escolha certa, os novos requisitos funcionais são implementados rapidamente. A performance é excelente.
Nesses aplicativos, a adoção da arquitetura mais simples, porém compacta mostrou-se ideal.
Mas como falei no ínicio, cada projeto é diferente, por isso temos também sistemas com arquiteturas bem complexas: Integração com sistemas legados, EJB´s, etc…
O legal é que os nossos aplicativos ‘light’ conversam numa boa com esses sistemas usando webservices. Assim conseguimos dividir e estruturar bem os aplicativos, temos por exemplo um aplicativo de vendas da area administrativa se comunicando um um sistema ‘barra pesada’ de engenharia da area de produção.
Espero ter ajudado!
Abraços!