Struts2はWeb層に特化したMVCフレームワークで、動的なHTMLの出力に対してJSP以外にもVelocity、FreeMarkerなどのテンプレートエンジンを利用したUIコンポーネントを提供します。
Web層の実装に特化しているため、旧来のStruts1やその他同時期に出ていたWebアプリケーションフレームワークより凝っていたのが、メッセージ出力レベルの定義、ロケールによる表示の振り分け、バリデーションに加え、リリース当時は珍しかったAjaxを利用した非同期Valicationの機能も提供していました。
SpringFrameworkはいわゆるDI/AOPコンテナの機能を中心として、さまざまな機能をSpringのサブプロジェクトとして提供しているので、これをいくつか組み合わせることでアプリケーションが構築できます。例えばWebアプリケーションはSpringMVC、バッチアプリケーションはSpringBatch、データベース用にSpring-JDBCやMybatis-Springなど。
余談ですが、Struts2もSpringFrameworkもDIコンテナとしての最低限の機能は提供されていますので、これを逆手にとり、Struts2のDIコンテナの機能をSpringFrameworkに丸ごと切り替えて、Struts2の設定はそのままにして動作させることが可能です。