Boa Noite pessoal, estou indo para o mundo web java, como não conheço muito o mercado de trabalho web, queria saber qual das duas começar a estudar primeiro para conseguir um emprego de programador Java JR, e qual das duas tem mais vagas no mercado de trabalho.
Mercado Java é uma zona, vai encontrar de tudo. Mas no momento de escolher um framework, vá de Spring MVC, JSF limita muito o conhecimento de quem pretende se tornar desenvolvedor web de verdade, sem se prender a componentes server em Java.
Antes de usar um framework, é importante aprender a base: HTTP, Servlet, HTML, JS, CSS.
Bom, vamos lá! Primeiramente é necessário ter ciência que o mercado Java é de fato uma bagunça, como mencionado pelo amigo logo acima. Dificilmente vc chegará numa empresa que trabalhe só com Spring, só com JSF, só com Struts, só JSP e servlet. É importante se preparar para tudo e se especializar num de sua preferência.
Esta briga do Spring e JSF é antiga, mas vou tentar destacar alguns pontos que acho legal, ok?!
JSF
Utiliza a metodologia de component-based, ou seja, basicamente você usará componentes já desenvolvidos pela biblioteca. Existem várias bibliotecas que complementam a camada visual do JSF, como o Primefaces e o RichFaces.
Existe a possibilidade de criar componentes customizados por composição.
JSF é uma especificação do JEE
Um dos principais objetivos é maximizar a produtividade do desenvolvedor, uma vez que os componentes já prontos possuem uma gama de funcionalidades para uso extremamente simplificado.
Ainda no quesito de facilidade, validações se tornam bem mais tranquilas!
Curva de aprendizado relativamente menor do que a atmosfera Spring.
Não subestime pela facilidade de entendimento de alguns pontos, pois existem outros bem complexos, como por exemplo o ciclo de vida do JSF.
Precisa de outras bibliotecas para injeção de dependência.
Por ser uma especificação JEE, os Java EE containers já o implementam nativamente.
Para uso básico, pouca configuração.
HTML pouco flexível por ser gerado automaticamente pelo framework.
Pode encontrar dificuldade em manipulação de código javascript
Gera “lixo” no html com alta complexidade para manipulação e entendimento.
A falta de contexto em alguns componentes, como validadores e conversores, era uma dor de cabeça até a versão 2.2.x para injeção de dependências.
Spring
Conhecido principalmente pelo seu mecanismo de injeção de dependências.
Baseado em ações.
Total controle do que acontece no front-end
Facilidade de integração com bibliotecas no front-end
Comunidade muito ativa
Existe uma gama de componentes na família spring SData, SSecurity, SAOP, entre outros.
Configuração muito chata, até pouco tempo atrás era baseada em xml. Atualmente muitas coisas, se não tudo, pode ser feito via Annotations.
Por ter muito pontos de extensão, ao meu ver, a curva de aprendizado é um pouco maior do que o JSF.
Cada caso é um caso, mas entre o JSF e o Spring eu fico com o Spring, porém, entre o Spring e o JEE, eu fico com o JEE.