Bom dia, estou estudando servlet pela apostila da Caelum, eu ouvi fala que é errado usar scriptlets jsp na view do sistema isso procede?
Dei uma pesquisada sobre o thymeleaf ele seria uma alternativa ao jsp?
Errado, não. Desaconselhável, sim. Porém, quando você trabalha com jsp e servlet, puros, acaba tendo que colocar uns <%%> no meio do código e isso é ruim.
Alternativas? Sim, desde 2000 rola JSTL + EL para substituir o scriptlet.
Existem frameworks como o Struts 2, vraptor, play!, o próprio jsf e Spring MVC.
Se quer ir além, estude RESTful WS, alguma biblioteca JS (jQuery) ou vá de angular 2 (typescript é fantástico) e spring boot ou jersey mesmo.
Opa, muito obrigado pelas dicas, vou estudar essas tecnologias e ver qual a mais adequada para a minha necessidade, obrigado.
Voltando um pouco, para entender o escopo geral. O que é JSP? É uma template engine. Arcaica e estranha, mas é.
Uma template engine é, de forma geral, um mecanismo para se gerar documentos com conteúdo dinâmico. Funciona mais ou menos assim:
- Você diz para a engine qual o template que você quer renderizar (nesse caso, a página jsp)
- Você passa parâmetros para a engine, para que ela disponibilize esses parâmetros para serem usados no template (nesse caso, através da session ou do objeto da resposta do servlet)
- A engine pega os parâmetros, disponibiliza para o escopo do template e o renderiza (nesse caso, gerando conteúdo html)
O problema é que JSP, como foi uma das primeiras engines, tem uma abordagem condenada hoje em dia. Não é muito manutenível você encher o template de código. A ideia é que o template possua apenas a lógica de apresentação, e nada de lógica de negócio (o que é possível fazer com o código java ali dentro). Além disso, tem questões como reaproveitamento das templates para gerar páginas diferentes, criação de componentes, etc.
Como melhorar o JSP? Estão tentando responder isso até hoje. Não existe melhor solução universal, mas essa área tem evoluído bastante nos últimos anos. O sucessor do JSP é o JSF, que é usado até hoje. A ideia do JSF é a utilização de extensões ao XHTML, criando tags diferenciadas para você utilizar dentro do template. Faz tempo que eu não mexo com JSF, mas imagine que você quer gerar uma lista (<ul>...</ul>
) no HTMl final, certo? No JSP você faria algo assim (me perdoe pelos erros, faz MUITO tempo q eu não lido com JSP):
<html>
...
<ul>
<%
List<Item> listaDeItens = response.pegaListaDeItens();
for( Item i : listaDeItens) {
print("<li>" + i.toString() + "</li>");
}
%>
</ul>
....
</html>
Em JSF, você teria um componente especializado em gerar listas (tem várias bibliotecas prontas). Poderia utiliza-lo assim:
<html>
...
<lista fonteDeDados='#{bean.listaDeItens}'/>
....
</html>
Dessa forma, você pode utilizar a lógica de gerar listas com muito mais facilidade, o código fica bem mais limpo e inteligível. Tem uma série de vantagens, mas eu não sei elenca-las aqui para ti, perdão.
A tempalte engine JSF faz exatamente a mesma coisa do JSP: recebe o template (o arquivo com as tags diferenciadas), recebe as tags (componentes) de alguma forma, e os parâmetros, e gera o html. A essência é a mesma, mas tu consegue perceber a melhoria?
Você citou o Thymeleaf. Eu nunca utilizei, mas vi aqui no Google que também é uma template engine. Com certeza vai ter melhorias comparado ao JSP, mas como te falei, existem trocentas engines diferentes hoje, cada uma com uma abordagem um pouquinho diferente, mas com a mesma essência. Só a experiência vai te mostrar qual te serve melhor.
A produção de páginas html, como o @drsmachado citou, não precisa ser feita apenas dessa maneira, no lado do servidor. Há algum tempo, vem se popularizando uma abordagem um pouco diferente. A ideia é que o servidor seja responsável apenas pela lógica de negócio, consumo e produção de dados. A responsabilidade de se gerar a view vai para o cliente (browser, ou app mobile, ou qualquer coisa com acesso à Internet). Por isso, começaram a surgir template engines para JavaScript! Dois exemplos famosos são AngularJS e ReactJS.
A ideia das template engines em JS é exatamente a mesma. O browser busca uma página html, por exemplo, junto com os scripts JS. A biblioteca vai ler o HTML procurando as tags específicas e vai transformá-las em html, de acordo com o que o programador especificar (como no JSF, por exemplo). A única diferença aqui é que o browser vai mandar requisições HTTP para o web service para adquirir os dados, ao invés de pegar da sessão ou diretamente por parâmetros disponibilizados pela engine, como acontece no caso do JSP ou JSF. A vantagem dessa abordagem é que a view fica (quase) totalmente desacoplada do servidor, e você pode aproveitar o mesmo web service para gerar conteúdo para múltiplos clientes diferentes, e não só HTML
Cara fantástica a sua explicação, realmente existem trocentas alternativas ao JSP, vou estudar elas para ver qual eu vou usar, o JSF parece muito bom. Também quero fazer uns testes com Angular JS ou outra biblioteca js que possa cuidar da parte do front-end, muito obrigado pela resposta, att.