Ayuda en Tecnologias Web java EE

llevo algun tiempo programando aplicaciones de escritorio usando java SE, ahora me he metido a aplicaciones web, pero me esta
costando un poco entender bien como se debe de usar hibernate, struts , spring, si alguien me puede ayudar, agredeceria para
conocer mejor cuando usar cada una, y si me pudieron recomentar algun libro o tutorial seria genial.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Distintos problemas, distintas soluciones

Estás mencionando frameworks que solucionan distintos tipos de problemas (bueno y uno en particular que intenta solucionar TODO tipo de problemas).

Hibernate: Es un ORM (Object-Relational Mapper), la idea es que con esto ya no tienes que usar SQL sino que en vez de leer registros de tablas usando JDBC, lees objetos directamente (Hibernate se encarga de generar el SQL necesario en el momento). En vez de hacer un UPDATE, INSERT o DELETE en SQL, le pides a Hibernate que actualice un objeto o que lo borre. En vez de abrir una conexión a base de datos, crear un PreparedStatement, correrlo, obtener un ResultSet y recorrerlo, le pides a Hibernate que te devuelva los objetos que cumplen con ciertos criterios (por ejemplo usuarios que su nombre empiece con E). Hibernate te devuelve una lista que contiene instancias de la clase que hayas configurado para mapearse contra tu tabla. Por lo tanto este framework se usa en la capa de manejo de datos, si usas el patrón DAO ya solamente lidias con Hibernate dentro de tus DAOs y debe ser transparente (o casi transparente) para las otras capas y componentes de tu aplicación (sea web, de escritorio, de linea de comando, etc).

Struts: Este framework sigue un poco el patrón MVC (Model-View-Controller) y se encarga de manejarte las partes de Vista y Controlador (Vista siendo las páginas web). Puede manejarte el flujo de una página a otra, por ejemplo si llenas una forma y faltan datos o llenaste ciertos tipos de datos te lleva a una página y si le pones datos distintos te puede llevar a otra.

Spring: Hace un poco de todo. Se volvió muy popular por su ApplicationContext, con el que implementas el patrón IoC (Inversion of Control, también conocido como inyección de dependencia). Pero ahora además tienen una parte para Manejar MVC en web, tienen soporte para usar JDBC de manera más sencilla e incluso poder implementar un poco de ORM sencillo; tienen soporte para Hibernate, Struts y otros frameworks. En general creo que es más fácil usar un framework en conjunto con Spring que usando el puro framework solo (particularmente Hibernate en mi opinión se simplifica mucho en conjunto con Spring).

La referencia de Spring es muy completa, hay en formato PDF y HTML, no la tienes que leer toda (es una referencia) y en su página también hay varios ejemplos. En la página de Hibernate hay ejemplos también y en la de Struts seguramente habrá algunos ejemplos y un tutorial o algo. Pero es más fácil si ya sabes lo que hacen.

Agredezco tu ayuda,

Agredezco tu ayuda, me has dado una vision general , la cual me da un buen punto de partida para empezar a desarrollar aplicaciones con estos
frameworks.