1. Spring is an **IoC container** (at least the core of Spring) and is used to wire things using dependency injection. Spring provides additional services like transaction management and seamless integration of various other technologies.
2. Struts is an action-based **presentation framework** (but don't use it for a new development).
3. Struts 2 is an action-based **presentation framework**, the version 2 of the above (created from a merge of WebWork with Struts).
4. Hibernate is an object-relational mapping tool, a **persistence framework**.
5. JavaServer Faces is component-based **presentation framework**.
6. JavaServer Pages is a view technology used by all mentioned presentation framework for the view.
7. Tapestry is another component-based **presentation framework**.
So, to summarize:
- Struts 2, JSF, Tapestry (and Wicket, Spring MVC, Stripes) are **presentation frameworks**. If you use one of them, you don't use another.
- Hibernate is a **persistence framework** and is used to persist Java objects in a relational database.
- Spring can be used to wire all this together and to provide declarative transaction management.
I don't want to make things more confusing but note that Java EE 6 provides modern, standardized and very nice equivalent of the above frameworks: JSF 2.0 and Facelets for the presentation, JPA 2.0 for the persistence, Dependency Injection, etc. For a new development, this is IMO a **serious** option, Java EE 6 is a **great** stack.
### See also
- [Choosing a Java Web Framework now?][1]
- [Java - JDBC alternatives][2]
- [JEE6 vs. Spring 3 stack][3]
- [What to learn for making Java web applications in Java EE 6?][4]
[1]:
[To see links please register here]
[2]:
[To see links please register here]
[3]:
[To see links please register here]
[4]:
[To see links please register here]