O exemplo do Elvis do modelo 1 ainda é bastate simples e comum… tem gente que ainda fica abrindo conexoes com o banco de dados direto no JSP… arghh…
Quando estamos aprendendo MVC, é bastante comum acharmos complicado ter que ficar separando as camadas, controller pra ca, view helper pra la, sem falar em Command ( Sim, pq com MVC voce acaba usando varios outros Patters em conjunto ).
Mas, a media que o sistema vai crescendo, as vantagens sao evidentes. Voce demora um pouco mais para planejar o sistema e criar a base deles, mas depois eh so alegria.
Como o Elvis mostrou usando JSP implementado na camada de View, vou mostrar um que usa Velocity. O que queremos fazer é colocar uma relacao de itens em um ArrayList e mostrar tais itens em uma tabela. Primeiro vem o exemplo em JSP “normal”, e logo depois mudado para modelo 2, com Velocity ( ps: nao manjo de JSP, entao pode ter algum erro no codigo hehe ).
Codigo JSP: HTML e Java misturados
<h3>Listagem de usuários</h3>
<%
ArrayList lista = new ArrayList();
// Colocamos 20 nomes na lista
for (int i = 0; i < 20; i++) {
lista.add("Pessoa "+ i);
}
// Agora Mostramos tudo na tela
%>
<table>
<tr><th>Nome do fulano</th></tr>
<%
for (int i = 0; i < 20; i++) {
%>
<tr><td><%= lista.get(i);%></td></tr>
<%
}
%>
Este é um codigo bastante comum de acontecer no dia-a-dia. Imagine agora a situacao: o designer, como toda a sua esperteza, vai la querer mexer nas cores das colunas… porem, nada impede dele tambem mexer no codigo que cria o ArrayList, de colocar mais html direto no meio de codigo jsp, ou alguma outra coisa relacaionada…
E quem eh o culpado quando da pau? sim, o programador.
Agora, mudando isso para o modelo 2, nos precisamos encapsular o codigo que cria o ArrayList em um .java normal, e entao - no nosso exemplo - usar o Velocity para fazer a apresentacao. Note que, SE o designer mexer em alguma coisa, sera apenas no codigo do template, que eh bastante simples. Maiores danos nao ocorrerao.
// Pessoas.java
public class Pessoas
{
public ArrayList criaPessoas()
{
ArrayList list = new ArrayList();
for (int i = 0; i < 20; i++) {
list.add("Pessoa "+ i);
}
return list;
}
}
Servlet
public class MeuServlet extends VelocityServlet
{
public Template handleRequst(HttpServletRequest req,
HttpServeltResponse res,
Context context) throws IOException
{
Pessoas p = new Pessoas();
ArrayList listaPessoas = p.criaPessoas();
Tempalte t = null;
// Coloca a lista de pessoas no contexto do template
context.put("pessoas", listaPessoas);
// Pega o arquivo de template
t = getTemplate("listagem_pessoas.html");
return t;
}
}
E o arquivo de template
<h3>Listagem de Pessoas</h3>
<table>
<tr><th>Nome do Fulano</th></tr>
#foreach ($p in $pessoas)
<tr><td>$p</td></tr>
#end
Viu? nada complicado.
Logicamente tivemos que criar mais arquivos, o que leva a a pensar que é muito trabalho para fazer uma cosia tao simples. Mas foi simples pq o exemplo eh simples. Quando o sistema fica maior, as vantagens sao muito mais evidentes.
Basicamente é isso. Vale a pena estudar a fundo isso tudo!
Rafael