De fato não há nada de errado em se escrever código java em JSPs, muito menos isso represeta uma falha de segurança.
O que acontece é que a anos se sabe que não se deve misturar lógica de negócios dentro de uma view (padrão MVC) como se fazia na época em que o desenvolvimento de sistemas web em java erá JSP centric. Infelizmente ao longo dos anos essa idéia foi sendo destorcida até um ponto em que se passou a acreditar que escrever código java em um JSP é ruim.
Na verdade muitos frameworks populares como o RubyOnRails usam código da linguagem (nesse caso Ruby) nas views.
É importante perceber a diferença entre lógica de negócios e de apresentação. A lógica de apresentação são essas decisões que fazemos na view como:
//
// Isto é pseudo-código. Não é Java nem JSP.
//
if (usuario.isLogado()) {
mostrarBotaoLogout();
}
else {
mostrarPainelLogin();
}
Esse tipo de lógica naturalmente pertence a view e é la que ela deve estar.
De qualquer forma, em JSP é possivel fazer a mesma coisa com TagLib e custom tags.
O acesso à base de dados feito diretamente de um JSP tão pouco é um problema tão abominavel quanto alguns artigos ou mesmo livros tentam fazer parecer. Como programadores nós precisamos ser pragmáticos pois a adesão irrestrita à certos dogmas cria mais problemas que resolve. È evidente que eu não estou defendendo o uso de scriptlets para espalhar código JDBC por todo um JSP. Ao invés as taglibs possuem tags como sql:query que podem simplificar consideravelmente a taréfa de criação de tabelas de dados por exemplo.
hummm, to qrendo fazer do modo correto, nao misturando cod java com jsp, mas to começando agora em desenvolvimento web via jsp, ja baixei uma apostila, mas mesmo assim apanho bastante…
da uma olhada nesse cod pra ver se to no caminho correto:
Este ultimo código está bem melhor mas é ideal evitar a mistura de sql com código de lógica. De uma olhada no pattern DAO. Para o seu caso o uso da tag sql:query pode simplificar o seu código consideravelmente e provavelmente eliminar a necessidade da Servlet.
PS.: A tag sql:query pode ser util para criar selects e tabelas mas eu não aconselharia o uso das demais tags <sql: pois isso provavelmente iria violar o encapsulamento espalhando lógica de persistência na view.
Na boa, taglib pra acessar banco de dados é tão pernicioso quanto usar scriptlet pois ignora que a visão não deve acessar diretamente banco.
Além de ser um inferno pra dar manutenção pois eu já passei por isso :evil:, esse tipo de pragmatismo pra mim é bom pra quem faz e uma puta de uma gamb pra quem ter que manter.
Com relação a lógica de apresentação concordo plenamente.
Hoje em dia não há desculpa de não usar servlet pois se configura com annotation , tranquilo.