Well, with a middle tier based on Spring and Hibernate, you can basically put any web MVC framework on top. The web controllers just need access to your Spring-managed business objects, which is easy enough if the controllers have access to the ServletContext.
Of course, I consider Spring's own web MVC division as a clean and elegant implementation of web MVC, more flexible and less intrusive than Struts. But I'm biased, I guess ;-) We also have people using Tapestry and WebWork2 with a Spring-managed middle tier.
A Hibernate SessionFactory just gets instantiated once for each application. In a Spring-managed middle tier, there is typically a LocalSessionFactoryBean definition with singleton status. All data access objects then just reference the SessionFactory that this bean exposes.
Have a look at the docs at the Spring website (
http://www.springframework.org/documentation.html), in particular the article "Web MVC with the Spring Framework", for an overview of web tier options with Spring.
Juergen