Olá, Bruno!
A diferença entre Spring e JSF é comumente explicada como MVC Push / Action based em contraste com MVC Pull / Component based.
O Spring é o MVC Push, também conhecido Action Based. As requests HTTP chegam no Front Controller (a DispatcherServlet
no caso do Spring) e, de acordo com a URL, é repassado para o @RequestMapping
adequado de um @Controller
.
Esse Controller, interage com outros objetos (Model) e busca os dados. Esses dados são repassados para a View, a JSP
.
Esse termo MVC Push, vem do fato dos dados serem "empurrados" do Controller para a View. A View não busca dados, os dados são oferecidos para a View.
O termo Action Based, vem do fato de cada request é uma ação do usuário, que dispara uma lógica no Servidor. A maioria dos frameworks, inclusive de outras linguagens, usa esse modelo: VRaptor, Ruby On Rails, Laravel, Django, etc.
Já o JSF, usa um modelo diferente. A ideia é que a View (o xhtml
) vai buscar os dados do Controller (o @ManagedBean
). O @ManagedBean
vai interagir com outros objetos (Model) para obter os dados solicitados pela View.
O termo MVC Pull vem do fato de a View "puxar" os dados do Controller.
Já o termo Component Based, vem do fato de a maioria desses frameworks terem componentes mais ricos para a View, como datatables, gráficos, dashboards, etc. Como os componentes são mais complexos, eles buscam os dados que precisam.
Frameworks MVC Pull / Component Based são mais raros. Conheço o JSF e o Wicket. De outras linguagens, me lembro apenas do antigo ASP.NET Web Forms, que tentava simular o modelo de programação Desktop (componentes stateful) só que para aplicações Web.
Referência:
http://blog.caelum.com.br/entenda-os-mvcs-e-os-frameworks-action-e-component-based/