Eu fui um dos alunos que se esforçaram muito para manter uma ótima média e realmente aprender, no meu projeto final percebi que a faculdade havia me enganado! Quem já foi corajoso o bastante para fazer um projeto com Servlet e Jdbc em MCV entende o que estou falando. Graças a um amigo que me cantou a pedra, eu parei de fazer o meu projeto da maneira que a faculdade ensinou, e acreditem, tive tempo de aprender Vraptor e Hibernate enquanto fazia o projeto. Cara essas ferramentas facilitam tanto que deu tempo para aprender e terminar meu projeto em menos de quatro meses!
Eu criei este tópico mas gostaria que só fosse comentado quando eu postasse a última mensagem, este tópico será como um artigo, e sempre vou atualizando até chegar a resolver nosso mini projeto da maneira ideal.
Como será:
Este material tem o objetivo de ajudar na compreensão da plataforma, melhor dizendo, especificação JEE. Vamos ao seguinte cenário, precisamos criar um sistema para manter um cadastro de alunos, usaremos primeiro Servlet e JDBC, depois vamos melhorando até utilizar um framework MVC e Hibernate para a persistência.
Vamos ver como um controle deve se parecer, vamos chegar num ponto em que vamos desconectar da plataforma web, o nosso controle ficará parecido com uma classe Java ordinária.
package modelo;
import java.io.Serializable;
@SuppressWarnings("serial")
public class Aluno implements Serializable{
private long id;
private String nome;
private String matricula;
... Vou omitir os getters and setters, mas você deve criá-los.
package servlet;
import ...
@SuppressWarnings("serial")
public class AlunoServlet extends HttpServlet {
private DaoFactory dao;
private AlunoDao alunoDao;
Algumas pessoas vão imediatamente criticar o fato de eu instanciar o dao no método init, mas logo vou apresentar uma opção mais aconselhável. Não vou ensinar a criar o dao, use seu próprio dao, mas vou disponibilizar todos os arquivos no meu site, use meu dao se você quiser.
public void init() throws ServletException {
dao = DaoFactory.getBanco(1);
Olha que bela oportunidade de explicar o que é wrapper, muita gente nunca ouviu falar disso! O método init só lança ServletException e estamos presos à sua assinatura, não podemos mudar, mas meu dao lança ClassNotFoundException, SQLException, e agora? Fácil vamos "embrulhar" a exceção dentro de ServletException e lançar! Obs.: tratei as duas como Exception para facilitar o entendimento.
try {
alunoDao = dao.getAlunoDao();
} catch (Exception e) {
// Fácil né, até eu sei fazer isso rsrsrsrs
throw new ServletException(e);
}
}
public void destroy() { super.destroy(); }
public String getServletInfo() { return "Servlet Aluno"; }
Omiti a assinatura completa do doGet para melhorar a visibilidade
public void doGet(... {
Aluno aluno = new Aluno();
Logo veremos que encher Pojos é muito chato, mas não precisa ser assim existem maneiras de se automatizar essa tarefa chata (imagine 50 atributos).
aluno.setNome(request.getParameter("nome"));
aluno.setMatricula(request.getParameter("nome"));
try {
alunoDao.adiciona(aluno);
} catch (Exception e) {
throw new ServletException(e);
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println(" <HEAD><TITLE>Aluno</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" Aluno: "+aluno.getNome()+"<br>");
out.print(" Matrícula: "+aluno.getMatricula()+"<br>");
out.print(" Salvo com sucesso! ");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(... {
doGet(request,response);
}
}
NOSSO WEB.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app >
<servlet>
<servlet-name>AlunoServlet</servlet-name>
<servlet-class>servlet.AlunoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AlunoServlet</servlet-name>
<url-pattern>/AlunoServlet</url-pattern>
</servlet-mapping>
</web-app>
Agora é só criar nosso formulário e rodar nossa aplicação, mas lembrando que se analisarmos bem, algumas responsabilidades estão misturadas, nosso servlet está agindo como controle e view, isso está errado. Deveríamos utilizar servlet para controle, jsp para view e uma camada independente para persistência. Mas sempre tenha na sua cabeça, jsp é um servlet!
[color=red]CONTIUA... espere o final para comentários e respostas![/color]
Site:http://www.jorgeluis.eti.br
Blog:http://blog.jorgeluis.eti.br
E-mail:[email removido]