Hello Brian,
Struts, spring and hibernate are three totally different frameworks. Since this is the struts forum, let's start with it. Struts is a web application framework that implements the front controller design pattern. Basically, there is a
servlet which gets the users' requests, and decide which java class should handle this request (a struts action), and according to the result of this class' processing, which
JSP should be processed to return output to the user. The front controller (the servlet) decides what to do according to a configuration file (typically called struts-config.xml). This is of course the most basic idea, but struts is much bigger than that. It has a validation framework to aid you validate the data entered by the users, and the tiles framework which helps you create custom complex layouts for your web application using simple JSPs glued together. Many more features are present.
Hibernate is an object relational mapping framework, meaning that instead of working with relational databases using
JDBC, result sets, and all this complexity, you will be working with plain old java objects, without the need of writing a single SQL command. You map your database tables to your domain objects using XML mapping files. Using the configuration file, you can tell hibernate which SQL dialect to generate, as well as which data source.
Spring is, IMHO, the BEST enterprise framework ever. The core of spring is an inversion of Control (IoC) container, which helps you follow one of the best design principles, and that is to code to interfaces and not concrete classes. Spring has many modules, and one of the best features it has is that it can integrate with nearly any other framework it may need. It also provides some great templates to help you reduce the unnecessary code you write, and concentrate more on your application logic. You want JDBC? Use the JDBC template so that you don't have to create a connection, open it, then close and release it after you're done. You want hibernate? Use the hibernate template so that you don't have to create a session, open it, create a transaction, commit the transaction and close the session after you're done. Transaction management? You got it. Mail? No problem. You would practically find anything you might need in the spring framework, or at least you would find integration with the framework of your choice, with lots of utilities to make your life easier.
Hope this clarifies things for you, and sorry for the long post.