Ol\u00e1 Amigos,
\n Hoje criaremos um projeto completo com as tecnologias java: JSP + JSTL + Servlet + JDBC + PostgreSQL.
\n Claro que iniciaremos com uma breve descri\u00e7\u00e3o de cada uma delas.<\/p>\n
<\/p>\n
Este exemplo come\u00e7a uma p\u00e1gina inicial index.jsp que exibe as informa\u00e7\u00f5es de funcionamento do projeto. Ao clicar na imagem principal \u00e9 exibido o menu.jsp.
\nEsta p\u00e1gina tem a op\u00e7\u00e3o de listagem de alunos ou realizar a manuten\u00e7\u00e3o (Inclus\u00e3o, altera\u00e7\u00e3o, consulta ou exclus\u00e3o de um Aluno). Se escolhermos a op\u00e7\u00e3o de cadastro ser\u00e1 exibida a tela de manuten\u00e7\u00e3o.
\nVeja os campos dispon\u00edveis.<\/p>\n
<\/a> Para maior facilidade as classes e p\u00e1ginas tamb\u00e9m foram comentadas para auxiliar no entendimento e estudo do c\u00f3digo.<\/p>\n Script de cria\u00e7\u00e3o da tabela no Banco de dados:<\/p>\n \u00c9 criado o comando que gera a tabela caso ela ainda n\u00e3o exista.<\/p>\n <\/a><\/p>\n Nela temos o nome do projeto (AcademicNetWeb) Para criar o projeto, no Eclipse, acesse o menu File >> Other…>> Na tela que aparece escolha Web >> Dynamic Web Project. Para saber mais sobre cria\u00e7\u00e3o de projeto web no Eclipse Clique Aqui<\/a><\/p>\n Vamos criar a classe de entidade Aluno. O conte\u00fado deve ser o seguinte:<\/p>\n A Classe DAO \u00e9 a classe que utilizamos para conectar como Banco de Dados PostgreSQL.<\/p>\n A classe AlunoDAO<\/b> \u00e9 respons\u00e1vel por realizar todas as opera\u00e7\u00f5es com Banco de dados. AlunoServlet<\/b> a principal classe do nosso projeto. Ela \u00e9 a controladora da navega\u00e7\u00e3o. Todas as requisi\u00e7\u00f5es de acesso ao banco de dados, controle de navega\u00e7\u00e3o, leitura de dados da tela ou envio para o destino de erro ou sucesso \u00e9 responsabilidade desta classe. Seguindo o padr\u00e3o MVC ela \u00e9 o Contoller.<\/p>\n index.jsp<\/b> P\u00e1gina inicial do nosso projeto. Utilizamos aqui conte\u00fado HTML5 puro. Uma p\u00e1gina simples, sem conte\u00fado din\u00e2mico e que possui os links para o menu da aplica\u00e7\u00e3o quando clicamos na imagem.<\/p>\n menu.jsp<\/b> P\u00e1gina que conter\u00e1 as op\u00e7\u00f5es de cadastros no nosso sistema. Tamb\u00e9m uma p\u00e1gina simples, sem conte\u00fado din\u00e2mico e que possui os links para o menu da aplica\u00e7\u00e3o quando clicamos nos links. O primeiro chamar\u00e1 a p\u00e1gina aluno.jsp. O Segundo chamar\u00e1 o Servlet AlunoServlet com a op\u00e7\u00e3o de listar todos os usu\u00e1rios cadastrados no Banco de Dados.<\/p>\n aluno.jsp<\/b> P\u00e1gina que cont\u00e9m c\u00f3digo din\u00e2mico. Quando encontramos a marca\u00e7\u00e3o “${…}” significa que \u00e9 um conte\u00fado que deve ser recebido pela p\u00e1gina e que ser\u00e1 exibido. Nos campos de texto recebemos os dados de aluno, veja o exemplo: value=”${aluno.nome}” que recebe o campo nome do aluno.<\/p>\n Nesta p\u00e1gina utilizamos HTML5. Ent\u00e3o podemos ver no campo matr\u00edcula a palavra required<\/i>. Isso informa que este campo \u00e9 obrigat\u00f3rio. N\u00e3o ser\u00e1 poss\u00edvel enviar os dados ao servidor sem o preenchimento dele.<\/p>\n Na linha abaixo definimos que o m\u00e9todo de envio dos dados para o servidor ser\u00e1 “post” e o destino no servidor ser\u00e1 a nossa Classe Servlet: “AlunoServlet”<\/p>\n
\n img 1 – Vis\u00e3o macro do nosso projeto<\/p>\n\r\n Voc\u00ea dever\u00e1 ter conhecimento pr\u00e9vio de Aplica\u00e7\u00e3o Web Java e utiliza\u00e7\u00e3o do Tomcat. \r\nCaso ainda n\u00e3o tenha, acesse os links informados no final deste artigo.\r\n<\/pre>\n
2 . Cria\u00e7\u00e3o da tabela no banco de dados <\/H2><\/p>\n
\r\nCREATE TABLE IF NOT EXISTS tbaluno(\r\n matricula bigint NOT NULL, \r\n nome character varying(255),\r\n telefone character varying(255), \r\n email character varying(255),\r\n datacadastro date,\r\n CONSTRAINT tbaluno_pkey PRIMARY KEY (matricula)\r\n);\r\n<\/pre>\n
3 . Constru\u00e7\u00e3o do projeto <\/H2>
\n Para come\u00e7ar vamos construir a estrutura do nosso projeto. Ao final deste tutorial o seu projeto deve estar como mostrado na imagem abaixo:<\/p>\n
\n Abaixo os n\u00f3s mais importantes s\u00e3o:
\n -> Java Resources (src) (Aqui teremos os c\u00f3digos fontes arquivos .java)
\n -> WebContent (Aqui ficam os arquivos web JSPs, imagens, JavaScript).<\/p>\n
\nD\u00ea o nome de “AcademicNetWeb” … Next >> Next … Na \u00faltima tela Selecione a opi\u00e7\u00e3o “Generate web.xml deployment descriptor”. >> Finish <\/b><\/p>\n\r\npackage br.com.feltex.entidade;\r\n\r\nimport java.io.Serializable;\r\nimport java.util.Date;\r\n\r\n\/**\r\n * \r\n * Classe de entidade que possui os atributos do aluno \r\n *\r\n *\/\r\npublic class Aluno implements Serializable {\r\n\tprivate static final long serialVersionUID = -309513637403441918L;\r\n\r\n\tprivate Long matricula;\r\n\r\n\tprivate String nome;\r\n\r\n\tprivate String telefone;\r\n\r\n\tprivate String email;\r\n\r\n\tprivate Date dataCadastro;\r\n\r\n\tpublic Aluno() {}\r\n\r\n\tpublic Aluno(Long matricula) {\r\n\t\tsuper();\r\n\t\tthis.matricula = matricula;\r\n\t}\r\n\r\n\tpublic Aluno(Long matricula, String nome) {\r\n\t\tsuper();\r\n\t\tthis.matricula = matricula;\r\n\t\tthis.nome = nome;\r\n\t}\r\n\r\n\tpublic Date getDataCadastro() {\r\n\t\treturn dataCadastro;\r\n\t}\r\n\r\n\tpublic String getEmail() {\r\n\t\treturn email;\r\n\t}\r\n\r\n\tpublic Long getMatricula() {\r\n\t\treturn matricula;\r\n\t}\r\n\r\n\tpublic String getNome() {\r\n\t\treturn nome;\r\n\t}\r\n\r\n\tpublic String getTelefone() {\r\n\t\treturn telefone;\r\n\t}\r\n\r\n\tpublic void setDataCadastro(Date dataCadastro) {\r\n\t\tthis.dataCadastro = dataCadastro;\r\n\t}\r\n\r\n\tpublic void setEmail(String email) {\r\n\t\tthis.email = email;\r\n\t}\r\n\r\n\tpublic void setMatricula(Long matricula) {\r\n\t\tthis.matricula = matricula;\r\n\t}\r\n\r\n\tpublic void setNome(String nome) {\r\n\t\tthis.nome = nome;\r\n\t}\r\n\r\n\tpublic void setTelefone(String telefone) {\r\n\t\tthis.telefone = telefone;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String toString() {\r\n\t\treturn \"Aluno [matricula=\" + matricula + \", nome=\" + nome\r\n\t\t\t\t+ \", telefone=\" + telefone + \", email=\" + email\r\n\t\t\t\t+ \", dataCadastro=\" + dataCadastro + \"]\";\r\n\t}\r\n}\r\n<\/pre>\n
\r\n\r\npackage br.com.feltex.dao;\r\n\r\nimport java.sql.Connection;\r\nimport java.sql.DriverManager;\r\n\r\n\/**\r\n * Classe respons\u00e1vel pela Conex\u00e3o com o Banco de dados. \u00c9 utilizada por outras\r\n * classes de persist\u00eancia de dados.\r\n * \r\n *\/\r\npublic class DAO {\r\n\tpublic Connection getConexao() {\r\n\t\tConnection conexao = null;\r\n\t\tString usuario = \"postgres\";\r\n\t\tString senha = \"teco01\";\r\n\t\tString nomeBancoDados = \"bdacademicnet\";\r\n\r\n\t\ttry {\r\n\t\t\tClass.forName(\"org.postgresql.Driver\");\r\n\t\t\tconexao = DriverManager.getConnection(\"jdbc:postgresql:\/\/localhost:5432\/\" + nomeBancoDados,\r\n\t\t\t\t\t usuario, senha);\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t\treturn conexao;\r\n\t}\r\n}\r\n<\/pre>\n
\nNela encontramos os m\u00e9todos de persist\u00eancia (
\nalterar – altera\u00e7\u00e3o de um registro no banco de dados
\nexcluir – exclui um registro no banco de dados
\nexiste – Verifica a exist\u00eancia de uma matr\u00edcula informada no banco de dados
\ninserir – incluir\u00e1 os dados de um aluno no banco de dados
\nlistar – retorna todos os registros existentes no banco de dados
\nconsultar – retorna um registro identificado com a matr\u00edcula informada
\n)<\/p>\n\r\npackage br.com.feltex.dao;\r\n\r\nimport java.sql.Connection;\r\nimport java.sql.PreparedStatement;\r\nimport java.sql.ResultSet;\r\nimport java.sql.Statement;\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\nimport br.com.feltex.entidade.Aluno;\r\n\r\n\/**\r\n * \r\n * Classe de Persist\u00eancia de dados dos objetos de Aluno\r\n * \u00e9 \"filha\" da Classe DAO. \r\n *\r\n *\/\r\n\r\npublic class AlunoDAO extends DAO {\r\n\r\n\tpublic void alterar(Aluno aluno) {\r\n\t\ttry {\r\n\t\t\tConnection conexao = getConexao();\r\n\r\n\t\t\tPreparedStatement pstmt = conexao\r\n\t\t\t\t\t.prepareStatement(\"Update tbaluno SET nome = ?, telefone = ?, email = ?, datacadastro = ?\"\r\n\t\t\t\t\t\t\t+ \" WHERE matricula = ? \");\r\n\t\t\tpstmt.setString(1, aluno.getNome());\r\n\t\t\tpstmt.setString(2, aluno.getTelefone());\r\n\t\t\tpstmt.setString(3, aluno.getEmail());\r\n\t\t\tpstmt.setDate(4, new java.sql.Date(aluno.getDataCadastro().getTime()));\r\n\t\t\tpstmt.setLong(5, aluno.getMatricula());\r\n\t\t\tpstmt.execute();\r\n\t\t\tpstmt.close();\r\n\t\t\tconexao.close();\r\n\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic void excluir(Aluno aluno) {\r\n\t\ttry {\r\n\t\t\tConnection conexao = getConexao();\r\n\t\t\tPreparedStatement pstm = conexao\r\n\t\t\t\t\t.prepareStatement(\"Delete from\ttbaluno where matricula = ? \");\r\n\t\t\tpstm.setLong(1, aluno.getMatricula());\r\n\t\t\tpstm.execute();\r\n\t\t\tpstm.close();\r\n\t\t\tconexao.close();\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic boolean existe(Aluno aluno) {\r\n\t\tboolean achou = false;\r\n\t\ttry {\r\n\t\t\tConnection conexao = getConexao();\r\n\t\t\tPreparedStatement pstm = conexao\r\n\t\t\t\t\t.prepareStatement(\"Select * from tbaluno where matricula =\t?\");\r\n\t\t\tpstm.setLong(1, aluno.getMatricula());\r\n\t\t\tResultSet rs = pstm.executeQuery();\r\n\t\t\tif (rs.next()) {\r\n\t\t\t\tachou = true;\r\n\t\t\t}\r\n\t\t\tpstm.close();\r\n\t\t\tconexao.close();\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t\treturn achou;\r\n\t}\r\n\r\n\tpublic void inserir(Aluno aluno) {\r\n\t\ttry {\r\n\t\t\tConnection conexao = getConexao();\r\n\t\t\tPreparedStatement pstm = conexao\r\n\t\t\t\t\t.prepareStatement(\"Insert into\ttbaluno (matricula, nome, telefone, email, datacadastro) values\t(?,?,?,?,?)\");\r\n\t\t\tpstm.setLong(1, aluno.getMatricula());\r\n\t\t\tpstm.setString(2, aluno.getNome());\r\n\t\t\tpstm.setString(3, aluno.getTelefone());\r\n\t\t\tpstm.setString(4, aluno.getEmail());\r\n\t\t\tpstm.setDate(5, new java.sql.Date(aluno.getDataCadastro()\r\n\t\t\t\t\t.getTime()));\r\n\t\t\tpstm.execute();\r\n\t\t\tpstm.close();\r\n\t\t\tconexao.close();\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic List
\r\npackage br.com.feltex.servlet;\r\n\r\nimport java.io.IOException;\r\nimport java.text.DateFormat;\r\nimport java.text.SimpleDateFormat;\r\nimport java.util.ArrayList;\r\nimport java.util.Date;\r\nimport java.util.List;\r\n\r\nimport javax.servlet.RequestDispatcher;\r\nimport javax.servlet.ServletException;\r\nimport javax.servlet.annotation.WebServlet;\r\nimport javax.servlet.http.HttpServlet;\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\n\r\nimport br.com.feltex.dao.AlunoDAO;\r\nimport br.com.feltex.entidade.Aluno;\r\n\r\n@WebServlet(\"\/AlunoServlet\")\r\npublic class AlunoServlet extends HttpServlet {\r\n\tprivate static final long serialVersionUID = 1L;\r\n\r\n\tprotected void doGet(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response) throws ServletException, IOException {\r\n\t\tdoPost(request, response);\r\n\t}\r\n\r\n\tprotected void doPost(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response) throws ServletException, IOException {\r\n\t\tString acao = request.getParameter(\"acao\");\r\n\t\tString destino = \"sucesso.jsp\";\r\n\t\tString mensagem = \"\";\r\n\t\tList
4. Cria\u00e7\u00e3o das p\u00e1ginas <\/h2>\n
\r\n\r\n\r\n\r\n
Seja bem vindo ao sistema AcademicNet!<\/H1>\r\n\t
\r\n\t Nesta vers\u00e3o utilizaremos as tecnologias: JSP + JSTL + Servlet + JDBC + PostGreSQL.\r\n\t<\/H2>\r\n\t \r\n\t \r\n\t <\/a>\t\t \r\n\t<\/div>\t\r\n http:\/\/www.feltex.com.br<\/a>\t\t\t\r\n<\/body>\r\n<\/html>\r\n\r\n<\/pre>\n
\r\n \r\n\r\n\r\n
Seja bem vindo ao sistema AcademicNet!<\/H1>\r\n\t\tManter Aluno<\/a>
\r\n\t\tListar Alunos<\/a>
\r\n\t<\/div>\r\n<\/body>\r\n<\/html>\r\n<\/pre>\n\r\n