Aulas 25 e 26 Exemplo de Aplicação usando JSP e MySQL Nova Odessa, 18 de abril de 2012. 1. Introdução O presente documento descreve a aplicação de acesso a Banco de Dados usando JSP, desenvolvida para a disciplina de Tópicos Avançados. 2. Aplicação de Exemplo A aplicação de exemplo conta com diversos arquivos JSP: index.jsp, formulario.jsp, analisadados.jsp, gravadados.jsp, listacompleta.jsp, consulta.jsp, processaconsulta.jsp e acessobd_v2.jsp. Como pré-requisitos do sistema, o servidor Tomcat precisa estar instalado (Glassfish ou JBoss também servem, porém são mais pesados), e o Conector J (driver de conexão jdbc com o mysql) disponível no caminho de projeto do Netbeans. 3. Códigos Fonte Os códigos fonte dos arquivos da aplicação de exemplo estão descritos a seguir. index.jsp <%@page contenttype="text/html" pageencoding="iso-8859-1" <html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>cadastro de Clientes</title></head> <body bgcolor="f0f0f0"> <table width="70%" border="0" align="center" cellspacing="15" cellpadding="5" bgcolor="d0d0d0"> <tr><td colspan="3" bgcolor="909090" align="center"><b><font color="white">cadastro de Clientes</font></b></td></tr> <tr><td width="33%" align="center"><a href="formulario.jsp">novo Cadastro</a></td> <td width="34%" align="center"><a href="consulta.jsp">consulta por Nome ou CPF</a></td> 1 de 15
<td width="33%" align="center"><a href="listacompleta.jsp">listagem Completa de Clientes</a></td> </tr></table></body></html> formulario.jsp <%@page contenttype="text/html" pageencoding="iso-8859-1" <html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>cadastro de Cliente</title></head> <body bgcolor="f0f0f0"> <form action="analisadados.jsp" name="form1" method="post"> <table width="70%" border="0" align="center" cellspacing="10" cellpadding="5" bgcolor="d0d0d0"> <tr><td colspan="2" bgcolor="909090" align="center"><b><font color="white">dados Pessoais do Cliente</font></b></td></tr> <tr><td width="30%" align="right"><b>nome Completo: </b></td><td width="70%"><input type="text" name="nome" size="60"></td></tr> <tr><td width="30%" align="right"><b>endereço: </b></td><td width="70%"><input type="text" name="endereco" size="60"></td></tr> <tr><td width="30%" align="right"><b>rg: </b></td><td width="70%"><input type="text" name="rg" size="60"></td></tr> <tr><td width="30%" align="right"><b>cpf: </b></td><td width="70%"><input type="text" name="cpf" size="60"></td></tr> <tr><td width="30%" align="right"><b>telefone: </b></td><td width="70%"><input type="text" name="telefone" size="60"></td></tr> <tr><td width="30%" align="right" bgcolor="d0d0d0"><b>e-mail: </b></td><td width="70%"><input type="text" name="email" size="60"></td></tr> <tr><td colspan="2" align="center"><table width="100%" border="0" align="center"> <tr><td width="33%" align="center"><input type="button" value="limpar" style="height: 25px; width: 100px"></td> 2 de 15
<td width="34%" align="center"><input type="button" value="cancelar" style="height: 25px; width: 100px"></td> <td width="33%" align="center"><input type="submit" value="enviar" style="height: 25px; width: 100px"></td></tr> </table></td></tr></table></form></body></html> analisadados.jsp <%@page contenttype="text/html" pageencoding="iso-8859-1" <%@include file="acessobd_v2.jsp" <html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>confirmação de Dados</title></head> <body bgcolor="f0f0f0"> <% String nome = request.getparameter("nome"); String endereco = request.getparameter("endereco"); String rg = request.getparameter("rg"); String cpf = request.getparameter("cpf"); String telefone = request.getparameter("telefone"); String email = request.getparameter("email"); session.setattribute("nome",nome); session.setattribute("endereco",endereco); session.setattribute("rg",rg); session.setattribute("cpf",cpf); session.setattribute("telefone",telefone); session.setattribute("email",email); <form action="gravadados.jsp" name="form2" method="post"> 3 de 15
<table width="70%" border="0" align="center" cellspacing="10" cellpadding="5" bgcolor="d0d0d0"> <tr><td colspan="2" bgcolor="909090" align="center"><b><font color="white">dados Pessoais do Cliente - Confirmação</font></b></td></tr> <tr><td width="30%" align="right"><b>nome Completo: </b></td><td width="70%"><%= nome </td> </tr> <tr><td width="30%" align="right"><b>endereço: </b></td><td width="70%"><%= endereco </td> </tr> <tr><td width="30%" align="right"><b>rg: </b></td><td width="70%"><%= rg </td></tr> <tr><td width="30%" align="right"><b>cpf:</b></td><td width="70%"><%= cpf </td></tr> <tr><td width="30%" align="right"><b>telefone: </b></td><td width="70%"><%= telefone </td> </tr> <tr><td width="30%" align="right" bgcolor="d0d0d0"><b>e-mail: </b></td><td width="70%"><%= email </td></tr> <tr><td colspan="2" align="center"> <table width="100%" border="0" align="center"> <tr><td width="33%" align="center"><input type="button" value="voltar" style="height: 25px; width: 100px"></td> <td width="34%" align="center"><input type="button" value="cancelar" style="height: 25px; width: 100px"></td> <td width="33%" align="center"><input type="submit" value="confirmar" style="height: 25px; width: 100px"></td></tr> </table></td></tr></table></form></body></html> gravadados.jsp <%@page contenttype="text/html" pageencoding="iso-8859-1" <%@include file="acessobd_v2.jsp" <html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>cadastro de Cliente</title></head> 4 de 15
<body bgcolor="f0f0f0"> <%! String pedidosql; <% conectabd(); pedidosql = "insert into pessoa values(null,'"+session.getattribute("nome") +"','"+session.getattribute("endereco")+"','"+session.getattribute("rg") +"','"+session.getattribute("cpf")+"','"+session.getattribute("telefone") +"','"+session.getattribute("email")+"')"; inserepedido(pedidosql); fechaconexao(); <table width="70%" border="0" align="center" cellspacing="10" cellpadding="5" bgcolor="d0d0d0"> <tr><td colspan="2" bgcolor="909090" align="center"><b><font color="white">cadastro de Cliente</font></b></td></tr> <tr><td align="left"><b>dados Gravados com Sucesso!</b></td></tr> <tr><td align="left">mensagem do Banco de Dados: <font color="green"><%= mensagem </font></td> </tr></table></body></html> listacompleta.jsp <%@page contenttype="text/html" pageencoding="iso-8859-1" <%@include file="acessobd_v2.jsp" <html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>listagem Completa</title></head> <body bgcolor="f0f0f0"> <h2>listagem Completa de Clientes</h2> <p>esta página realiza a consulta de todos os elementos existentes na tabela "pessoa".</p> 5 de 15
<%! ResultSet rs; String consulta; String nome; String rg; String cpf; String endereco; String email; <% consulta = "select * from pessoa;"; conectabd(); out.println(mensagem); out.println("<br>"); rs = realizaconsulta(consulta); while(rs.next()){ nome = rs.getstring("nome"); rg = rs.getstring("rg"); cpf = rs.getstring("cpf"); endereco = rs.getstring("endereco"); email = rs.getstring("email"); out.println("<br>"); out.println("nome: "+nome + " RG: " + rg + " CPF: "+ cpf + " Endereço: " + endereco + " E-Mail: " + email); </body></html> fechaconexao(); 6 de 15
consulta.jsp <%@page contenttype="text/html" pageencoding="iso-8859-1" <html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>consulta de Clientes</title></head> <body bgcolor="f0f0f0"> <form action="processaconsulta.jsp" name="form4" method="post"> <table width="70%" border="0" align="center" cellspacing="10" cellpadding="5" bgcolor="d0d0d0"> <tr><td colspan="2" bgcolor="909090" align="center"><b><font color="white">consulta de Clientes</font></b></td></tr> <tr><td width="30%" align="right"><b>nome Completo: </b></td><td width="70%"><input type="text" name="nome" size="60"></td></tr> <tr><td width="30%" align="right"><b>cpf: </b></td><td width="70%"><input type="text" name="cpf" size="60"></td></tr> <tr><td colspan="2" align="justify"><font color="red">obs.:</font> A consulta pode ser realizada preenchendo-se o campo "Nome Completo" e/ou o campo "CPF". Caso ambos os campos sejam preenchidos, a associação entre os dois campos será do tipo "AND".</td></tr> <tr><td colspan="2" align="justify"><font color="red">obs.2:</font> Se ambos os campos "Nome Completo" e "CPF" forem deixados em branco, a consulta retornará a listagem completa de Clientes existentes na Base de Dados.</td></tr> <tr><td colspan="2" align="center"> <table width="100%" border="0" align="center"> <tr><td width="33%" align="center"><input type="button" value="limpar" style="height: 25px; width: 100px"></td> 7 de 15
<td width="34%" align="center"><input type="button" value="cancelar" style="height: 25px; width: 100px"></td> <td width="33%" align="center"><input type="submit" value="consultar" style="height: 25px; width: 100px"></td> </tr></table></td> </tr></table></form></body></html> processaconsulta.jsp <%@page contenttype="text/html" pageencoding="iso-8859-1" <%@include file="acessobd_v2.jsp" <html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>resultado da Consulta</title></head> <body bgcolor="f0f0f0"> <%! ResultSet rs; String consulta, nome; String rg, cpf; String endereco, telefone; String email; boolean nomeval = false; boolean cpfval = false; public String criatabelaresposta(string nome, String endereco, String rg, String cpf, String telefone, String email){ StringBuffer strbuf = new StringBuffer(); strbuf.append("<table width='100%' border='0' align='center' cellspacing='10' cellpadding='5' bgcolor='d0d0d0'>"); 8 de 15
strbuf.append("<tr><td colspan='2' bgcolor='909090' align='center'><b><font color='white'>dados Pessoais do Cliente</font></b></td></tr>"); strbuf.append("<tr><td width='30%' align='right'><b>nome Completo: </b></td><td width='70%' bgcolor='f0f0f0'>"+nome+"</td></tr>"); strbuf.append("<tr><td align='right'><b>endereço: </b></td><td bgcolor='f0f0f0'>"+endereco+"</td></tr>"); strbuf.append("<tr><td align='right'><b>rg: </b></td><td bgcolor='f0f0f0'>"+rg+"</td></tr>"); strbuf.append("<tr><td align='right'><b>cpf: </b></td><td bgcolor='f0f0f0'>"+cpf+"</td></tr>"); strbuf.append("<tr><td align='right'><b>telefone: </b></td><td bgcolor='f0f0f0'>"+telefone+"</td></tr>"); strbuf.append("<tr><td align='right'><b>e-mail: </b></td><td bgcolor='f0f0f0'>"+email+"</td></tr>"); strbuf.append("</table>"); return strbuf.tostring(); <table width='70%' border='0' align='center' cellspacing='10' cellpadding='5' bgcolor='d0d0d0'> <tr><td colspan='2' bgcolor='909090' align='center'><b><font color='white'>consulta na Tabela de Clientes</font></b></td></tr> <tr><td colspan='2' align='left'><b>valores usados na consulta</b></td></tr> <tr><td align='right' width='30%'>nome: </td><td align='left' width='70%' bgcolor='f0f0f0'><%= request.getparameter("nome") </td></tr> <tr><td align='right'>cpf: </td><td align='left' bgcolor='f0f0f0'><%= request.getparameter("cpf") </td></tr> <tr><td colspan='2' align='left'><b>consulta a ser realizada</b></td></tr> <% nome = request.getparameter("nome"); 9 de 15
cpf = request.getparameter("cpf"); if(nome!= null && nome!= ""){ nomeval = true; // out.println("campo Nome não é nulo nem vazio. <br>"); else{ // out.println("campo Nome é nulo ou vazio. <br>"); if(cpf!= null && cpf!= ""){ cpfval = true; // out.println("campo CPF não é nulo nem vazio. <br>"); else{ // out.println("campo CPF é nulo ou vazio. <br>"); if(nomeval && cpfval){ consulta = "select * from pessoa where nome='" + nome + "' and cpf='" + cpf + "';"; else{ if(nomeval){ consulta = "select * from pessoa where nome='" + nome + "';"; else{ consulta = "select * from pessoa where cpf='" + cpf + "';"; 10 de 15
<tr><td colspan='2' align='left'><font color="blue"><%= consulta </font></td></tr> <tr><td colspan='2' align='left'><b>mensagem do banco de dados</b></td></tr> <% conectabd(); rs = realizaconsulta(consulta); if(rs == null){ <tr><td colspan='2' align='left'><font color='blue'>resultset de resposta é nulo... </font></td></tr> <% else{ rs.last(); int numrows = rs.getrow(); // Contagem do Número de Linhas do ResultSet <tr><td colspan='2' align='left'><font color='blue'>número de Linhas do ResultSet: <%= numrows </font></td></tr> <tr><td colspan='2' align='left'><b>resposta do banco de dados</b></td></tr> <tr><td colspan='2'> <% rs.beforefirst(); String tabela; while(rs.next()){ nome = rs.getstring("nome"); rg = rs.getstring("rg"); cpf = rs.getstring("cpf"); endereco = rs.getstring("endereco"); 11 de 15
telefone = rs.getstring("telefone"); email = rs.getstring("email"); tabela = criatabelaresposta(nome, endereco, rg, cpf, telefone, email); out.println(tabela); </td></tr> <% // fim do else fechaconexao(); </table></body></html> acessobd_v2.jsp <%@ page contenttype="text/html" pageencoding="utf-8" language="java" import="java.sql.*" <html><body> <%! Connection con; Statement stm; String mensagem; public void conectabd(){ try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/topicosSI","root","root9"); stm = con.createstatement(); mensagem = "Conexão efetuada com sucesso. "; 12 de 15
catch (Exception e) { mensagem = "Não foi possível conectar ao banco. Erro: " + e.getmessage(); public void inserepedido(string pedido){ try{ stm.executeupdate(pedido); catch(sqlexception e){ mensagem = e.tostring(); catch(nullpointerexception npe){ mensagem = npe.tostring(); public ResultSet realizaconsulta(string consulta){ ResultSet rs = null; try{ rs = stm.executequery(consulta); catch(sqlexception e){ mensagem = e.tostring(); finally{ return rs; 13 de 15
public void fechaconexao(){ try{ stm.close(); con.close(); catch(sqlexception sqle){ mensagem = sqle.tostring(); </body></html> <!-- Criação da Tabela pessoa no Banco de Dados topicossi create table pessoa( pessoaid INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(40) NOT NULL, endereco VARCHAR(70), rg VARCHAR(20), cpf VARCHAR(20), telefone VARCHAR(20), email VARCHAR(40)); --> 14 de 15
4. Referências Projeto "CadastroSI", pasta em NetBeansProjects. 15 de 15