Spring is a lot of things. Struts is primarily a web application framework. It is not unusual to use both in the same application. Which framework is "best" depends on your requirements. You have to look at the features provided by each (including the possibilities of mixing and matching frameworks to create an application stack) and see which matches your requirements best (the same goes with all the other technologies you mention).