#1
Lo primero decirte que te han enseñado una tecnología ya desfasada.
Struts 2 es un framework MVC para Java EE. Spring es otro framework, pero no sólo para MVC, sino que ofrece otro conjunto de servicios como inyección de dependencias (lo que le hizo famoso), autentificación, messaging, etc.
Hibernate por el contrario nos permite mapear objetos a bases de datos y utilizar un lenguaje de consultas basado en los objetos del modelo sustituyendo así los DAOs y consultas SQL a pelo. Esto permite evitar la duplicidad de modelos (objetos y datos) y además favorecer la portabilidad pues las consultas serán independientes del SGBD que utilicemos.
Los chicos de Java, como siempre, cada vez que se encuentran un framework decente, lo copian y después lo estandarizan, así pues, hoy en dia imperan:
- JSF: en detrimento de Structs o el MVC de Spring
- CDI: para la inyección de dependencias (copiado de Spring)
- JPA: copia de hibernate
- JPQL: copia de hql (hibernate query language)
- Bean Validation
- JMS
- etc
Mi consejo es:
Si ya dominas Struts, Spring, Hibernate, etc. No tendrás mucho problema para pasarte al estándar porque prácticamente es un fork de esos framework.
La tendencia actual es que para los nuevos desarrollos se utilice el estándar, aunque si alguna vez te toca trabajar manteniendo aplicaciones es seguro que tocarás struts o spring, pues ahora mismo sobre el 70% de aplicaciones Java EE existentes deben basarse en alguno de estos frameworks. De hecho en mi curro aún estamos manteniendo aplicaciones con Struts 1 (que es puro amor comparándolo con JSF).
Si quieres leer algo sobre lo actual te recomiendo este libro:
- Beginning Java EE 7 de Antonio Goncalves
Está en Inglés pero se entiende perfectamente si dominas medianamente el idioma.