Web sites dinâmicos com Ajax + JSP + MySQL
Não é feitiçaria, é Metodologia (essa foi de doer)! Este artigo contém informações de utilização do Ajax aliados ao JSP e MySQL. Devo advertir que não é meu objetivo ensinar JSP ou MySQL e que o principal foco deste artigo é o AJAX (Asynchronous JavaScript And XML) e seus recursos, como o XMLHttpRequest.
Parte 2: Construindo uma página de inserção de dados
Criei uma página simples para facilitar o entendimento. Nela, temos um formulário com alguns campos, que irão enviar os parâmetros para a página que fará a inserção no banco de dados. Antes de proceder, é melhor que já tenha construído o seu banco de dados, no MySQL.
Crie um banco de dados no MySQL. Meu banco chama-se "projeto2", a tabela chama-se "geral2" e os campos são: codigo (auto incremento), nome, endereco, cidade, telefone, login e senha.
Você pode alterá-los, contanto que modifique as variáveis corretamente, tanto no Ajax quanto no HTML e JSP.
Esta página chama-se "formulario.jsp" e, após o clique no botão "Gravar", deverá enviar os parâmetros para a página "grava_usuario.jsp" e limpar os dados dom campos, preparando para uma nova inserção.
Crie um banco de dados no MySQL. Meu banco chama-se "projeto2", a tabela chama-se "geral2" e os campos são: codigo (auto incremento), nome, endereco, cidade, telefone, login e senha.
Você pode alterá-los, contanto que modifique as variáveis corretamente, tanto no Ajax quanto no HTML e JSP.
Esta página chama-se "formulario.jsp" e, após o clique no botão "Gravar", deverá enviar os parâmetros para a página "grava_usuario.jsp" e limpar os dados dom campos, preparando para uma nova inserção.
<html>
<head>
<title>Teste</title>
<script>
function verificacampos()
{
var nome = document.getElementById("nome").value;
var senha = document.getElementById("senha").value;
var login = document.getElementById("login").value;
if (senha == "" || login == "" || nome == "")
{
alert('É necessário digitar os campos Nome, Login e Senha corretamente');
return false;
}
else
{
salvar()
}
}
//esta é a função Ajax. Sem ela, nada acontece.
function openAjax() {
var ajax;
try{
ajax = new XMLHttpRequest(); // XMLHttpRequest para Firefox, Safari, dentre outros.
}catch(ee){
try{
ajax = new ActiveXObject("Msxml2.XMLHTTP"); // Para o Internet Explorer
}catch(e){
try{
ajax = new ActiveXObject("Microsoft.XMLHTTP"); // Para o Internet Explorer
}catch(E){
ajax = false;
}
}
}
return ajax;
}
function salvar()
{
var nome = document.getElementById('nome').value; //Note que as variáveis são resgatadas pela função getElementById.
var endereco = document.getElementById('endereco').value;
var cidade = document.getElementById('cidade').value;
var telefone = document.getElementById('telefone').value;
var login = document.getElementById('login').value;
var senha = document.getElementById('senha').value;
var exibeResultado = document.getElementById('exibeResultado');
var ajax = openAjax(); // Inicia o Ajax.
ajax.open("GET", "grava_usuario.jsp?nome=" + nome +"&endereco=" + endereco + "&cidade=" + cidade + "&telefone=" + telefone +"&login=" + login + "&senha="+ senha, true); // Envia o termo da busca como uma querystring, nos possibilitando o filtro na busca.
ajax.onreadystatechange = function()
{
if(ajax.readyState == 1) // Quando estiver carregando, exibe: carregando...
{
exibeResultado.innerHTML = "Inserindo";
}
if(ajax.readyState == 4) // Quando estiver tudo pronto.
{
if(ajax.status == 200)
{
var resultado = ajax.responseText;
exibeResultado.innerHTML = resultado;
}
else
{
exibeResultado.innerHTML = "Erro nas funções do Ajax";
}
}
}
ajax.send(null); // submete
document.getElementById("nome").value= "";//limpa os campos
document.getElementById("endereco").value= "";
document.getElementById("senha").value= "";
document.getElementById("login").value= "";
document.getElementById("cidade").value= "";
document.getElementById("telefone").value= "";
document.getElementById("nome").setFocus=true;
}
</script>
<link rel="stylesheet" type="text/css" href="tabelacss.css"/>
</head>
<body>
<table id="tabela_especial" align="center" width="900">
<tr>
<td>
<table border="1" align="center" width="790">
<tr>
<td id="fundo_branco">New Brejos' PUserName_Senha_Administrador </td>
</tr>
<tr>
<td align="left">
<table align=center width="790">
<tr>
<td>
<form name="formgrava" action="grava_usuario.jsp">
<table width="560">
<tr>
<td align="right">Nome:</td><td><input type="text" id="nome" size="30" name="nome"></td>
</tr>
<tr>
<td align="right">Endereço:</td><td><input type="text" id="endereco" size="30" name="endereco"></td>
</tr>
<tr>
<td align="right">Cidade:</td><td><input type="text" id="cidade" size="30" name="cidade"></td>
</tr>
<tr>
<td align="right">Telefone:</td><td><input type="text" id="telefone" size="30" name="telefone"></td>
</tr>
<tr>
<td align="right">Login:</td><td><input type="text" id="login" size="30" name="login"></td>
</tr>
<tr>
<td align="right">Senha:</td><td><input type="password" id="senha" size="30" name="senha"></td>
</tr>
<tr><br></tr>
<tr>
<td align="left"><td><input type="button" size="30" name="gravar" id="gravar" value="Gravar" onclick="verificacampos()">
<input type="button" size="30" name="cancelar" value="Cancelar">
</tr>
</form>
</table></td>
</tr>
</td>
</tr>
</table><tr></tr>
<table>
<tr align="left">
<td align="left"><font color="lightgray">Status: </font></td><td align="left"><div id="exibeResultado" align="center"><font color="lightgray">Em espera</font></div></td>
</tr>
</table>
<tr><td align="right"><font color="#EBD8F5">Inserção usando AJAX</font></td></tr>
</table>
</td><br>
</tr>
</table>
</body>
</html>
<head>
<title>Teste</title>
<script>
function verificacampos()
{
var nome = document.getElementById("nome").value;
var senha = document.getElementById("senha").value;
var login = document.getElementById("login").value;
if (senha == "" || login == "" || nome == "")
{
alert('É necessário digitar os campos Nome, Login e Senha corretamente');
return false;
}
else
{
salvar()
}
}
//esta é a função Ajax. Sem ela, nada acontece.
function openAjax() {
var ajax;
try{
ajax = new XMLHttpRequest(); // XMLHttpRequest para Firefox, Safari, dentre outros.
}catch(ee){
try{
ajax = new ActiveXObject("Msxml2.XMLHTTP"); // Para o Internet Explorer
}catch(e){
try{
ajax = new ActiveXObject("Microsoft.XMLHTTP"); // Para o Internet Explorer
}catch(E){
ajax = false;
}
}
}
return ajax;
}
function salvar()
{
var nome = document.getElementById('nome').value; //Note que as variáveis são resgatadas pela função getElementById.
var endereco = document.getElementById('endereco').value;
var cidade = document.getElementById('cidade').value;
var telefone = document.getElementById('telefone').value;
var login = document.getElementById('login').value;
var senha = document.getElementById('senha').value;
var exibeResultado = document.getElementById('exibeResultado');
var ajax = openAjax(); // Inicia o Ajax.
ajax.open("GET", "grava_usuario.jsp?nome=" + nome +"&endereco=" + endereco + "&cidade=" + cidade + "&telefone=" + telefone +"&login=" + login + "&senha="+ senha, true); // Envia o termo da busca como uma querystring, nos possibilitando o filtro na busca.
ajax.onreadystatechange = function()
{
if(ajax.readyState == 1) // Quando estiver carregando, exibe: carregando...
{
exibeResultado.innerHTML = "Inserindo";
}
if(ajax.readyState == 4) // Quando estiver tudo pronto.
{
if(ajax.status == 200)
{
var resultado = ajax.responseText;
exibeResultado.innerHTML = resultado;
}
else
{
exibeResultado.innerHTML = "Erro nas funções do Ajax";
}
}
}
ajax.send(null); // submete
document.getElementById("nome").value= "";//limpa os campos
document.getElementById("endereco").value= "";
document.getElementById("senha").value= "";
document.getElementById("login").value= "";
document.getElementById("cidade").value= "";
document.getElementById("telefone").value= "";
document.getElementById("nome").setFocus=true;
}
</script>
<link rel="stylesheet" type="text/css" href="tabelacss.css"/>
</head>
<body>
<table id="tabela_especial" align="center" width="900">
<tr>
<td>
<table border="1" align="center" width="790">
<tr>
<td id="fundo_branco">New Brejos' PUserName_Senha_Administrador </td>
</tr>
<tr>
<td align="left">
<table align=center width="790">
<tr>
<td>
<form name="formgrava" action="grava_usuario.jsp">
<table width="560">
<tr>
<td align="right">Nome:</td><td><input type="text" id="nome" size="30" name="nome"></td>
</tr>
<tr>
<td align="right">Endereço:</td><td><input type="text" id="endereco" size="30" name="endereco"></td>
</tr>
<tr>
<td align="right">Cidade:</td><td><input type="text" id="cidade" size="30" name="cidade"></td>
</tr>
<tr>
<td align="right">Telefone:</td><td><input type="text" id="telefone" size="30" name="telefone"></td>
</tr>
<tr>
<td align="right">Login:</td><td><input type="text" id="login" size="30" name="login"></td>
</tr>
<tr>
<td align="right">Senha:</td><td><input type="password" id="senha" size="30" name="senha"></td>
</tr>
<tr><br></tr>
<tr>
<td align="left"><td><input type="button" size="30" name="gravar" id="gravar" value="Gravar" onclick="verificacampos()">
<input type="button" size="30" name="cancelar" value="Cancelar">
</tr>
</form>
</table></td>
</tr>
</td>
</tr>
</table><tr></tr>
<table>
<tr align="left">
<td align="left"><font color="lightgray">Status: </font></td><td align="left"><div id="exibeResultado" align="center"><font color="lightgray">Em espera</font></div></td>
</tr>
</table>
<tr><td align="right"><font color="#EBD8F5">Inserção usando AJAX</font></td></tr>
</table>
</td><br>
</tr>
</table>
</body>
</html>
Note que os campos estão com "name" e com "ID". O campo "name" não é necessário, mas o campo "ID" é extremamente necessário. Note também que a Div "exibeResultado" é necessária, pois o Ajax utiliza-a para exibir os resultados da inserção.
Próximo passo: A página JSP que irá inserir os dados.
Só gostaria que fosse em PHP :P
Pra ajudar um pouco, aqui vai uma possibilidade query pro MySQL para uso com o artigo:
CREATE DATABASE `projeto2` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `projeto2`;
CREATE TABLE `geral2` (
`codigo` int(6) NOT NULL auto_increment,
`nome` varchar(30) collate latin1_general_ci default NULL,
`endereço` varchar(40) collate latin1_general_ci default NULL,
`cidade` varchar(20) collate latin1_general_ci default NULL,
`telefone` varchar(15) collate latin1_general_ci default NULL,
`login` varchar(15) collate latin1_general_ci default NULL,
`senha` varchar(15) collate latin1_general_ci default NULL,
KEY `codigo` (`codigo`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Sim, o campo telefone como string foi proposital, já que não teve um tratamento para telefones do tipo (83) 555-4568