Precisa de um freelancer, códigos-fonte e exemplos completos?
Bem-vindo(a) ao meu site. Além de realizar alguns serviços como freelancer eu tenho alguns códigos-fonte e exemplos completos de Java, Delphi, PHP, Python, C/C++, Hibernate, JPA, Spring, JSP, Servlets, Ruby, Ruby On Rails e muitas outras linguagens e frameworks. Veja como falar comigo clicando aqui.
 
Arquivo de Códigos - Página Inicial
Códigos-fonte
» Códigos-fonte e exemplos completos
Linguagens
» ActionScript
» Adobe AIR
» Adobe Flex
» AJAX
» C
» C#
» C++
» CSS
» Delphi
» DHTML - Dynamic HTML
» HTML/XHTML
» Java
» JavaFX
» JavaScript
» Java Servlets
» JSP - Java Server Pages
» Perl
» PHP
» PHP-GTK
» Python
» Ruby
» Tcl/Tk
» VB.NET
Bancos de Dados
» IBM DB2
» MySQL
Frameworks
» CodeIgniter
» jQuery
» JSF - Java Server Faces
» Qt
» Ruby On Rails
» Struts
» Struts 2
» wxWidgets
» Zend Framework
Container/Servidor
» Apache Tomcat
» Apache Web Server
Ferramentas
» Apache Ant
» iTextSharp (iText#)
Referências
» CSS1 e CSS2
» JavaScript
Serviços On-Line
» Qual é meu IP?
» Tabela Cores HTML I
» Tabela Cores HTML II
» Lista de Mime Types
» Códigos Teclas Virtuais
Usuários On-Line
Visitantes: 62
PHP
O que há de novo no PHP 5?
40 dicas e truques sobre como trabalhar com datas e horas em PHP
60 dicas e truques sobre como trabalhar com strings e caracteres em PHP
PHP e a Orientação a Objetos - POO (Curso Completo)

DHTML
Curso completo de DHTML para iniciantes

CSS
Como definir uma imagem de fundo fixa na página
Definindo uma imagem de fundo para botões HTML
Você está aqui: Inicio -> Tutoriais -> AJAX
Desenvolvendo um sistema de pesquisa de alunos por matrícula usando AJAX e JSP
1 - Desenvolvendo um sistema de pesquisa de alunos por matrícula usando AJAX e JSP (Usando o método GET)

Em artigos anteriores fizemos um estudo bem detalhado de AJAX e do objeto XMLHttpRequest. Chegou a hora de construir algo mais útil. A aplicação que desenvolveremos permitirá pesquisar um aluno baseado em seu número de matrícula. Além disso, os dados serão obtidos a partir de uma chamada a uma página JSP e o método usado para a requisição HTTP será GET (Mais adiante veremos como usar POST).

Os nomes e matrículas dos alunos serão armazenados em um objeto da classe Hashtable da linguagem Java. Esta classe permite associar valores a chaves, ou seja, ideal para o projeto proposto. Em outros artigos você aprenderá a obter um arquivo XML a partir das informações em um banco de dados.

A listagem seguinte apresenta o código completa para o documento JSP que será usado no exemplo:

Código completo para pesquisar.jsp:

<%@ page import="java.util.*" %>
<%
  // recebe a matrícula a ser pesquisada
  String mat = request.getParameter("matricula");
  String aluno = null;

  // Cria a tabela Hash
  Hashtable tabela = new Hashtable();

  // adiciona os valores desejados
  tabela.put("547961-4", "Osmar J. Silva");
  tabela.put("545844-7", "Dyego Fernandes de Sousa");
  tabela.put("768212-3", "Francisco Coelho Cito Feitosa");

  // Varre a tabela procurando a matrícula fornecida
  Iterator it = tabela.keySet().iterator();
  while(it.hasNext()){
    Object key = it.next();
    String chave = (String)(key);

    if(chave.equals(mat)){
      aluno = (String)(tabela.get(key));
    }
  }

  // constrói o XML e o envia como resposta
  StringBuffer xml = new StringBuffer();
  xml.append("<?xml version=\"1.0\" ?>");
  xml.append("<alunos>");

  if(aluno != null){
    xml.append("<aluno>" + aluno + "</aluno>");
  }
  else{
    xml.append("<mensagem>erro</mensagem>");
  }

  xml.append("</alunos>");

  response.setContentType("text/xml");
  response.setHeader("Cache-Control", "no-cache");
  response.getWriter().write(xml.toString());
%>


A análise linha a linha deste código está além do escopo do artigo. Os pontos importantes a serem considerados são:

A página JSP deverá ser chamada com o parâmetro matricula contendo o valor da matrícula a ser pesquisada. Por exemplo, desejando pesquisar a matrícula 547961-4, a chamada correta deverá ser:

http://localhost:8080/pesquisar.jsp?matricula=547961-4

Se o aluno for encontrado, a página devolverá um arquivo XML com o seguinte conteúdo:

<?xml version="1.0" encoding="iso-8859-1" ?>
<alunos>
  <aluno>Osmar J. Silva</aluno>
</alunos>


Se o aluno não for encontrado o resultado será:

<?xml version="1.0" encoding="iso-8859-1" ?>
<alunos>
  <mensagem>erro</mensagem>
</alunos>


A página HTML que servirá para fazer a consulta dos alunos se parecerá com a figura seguinte:


O formulário a ser usado foi construído com o seguinte código HTML:

<table width="287" border="0" cellspacing="0" cellpadding="4">
<form name="cadastro" action="javascript:void%200"
onsubmit="pesquisar()">
  <tr>
    <td width="72">Matrícula:</td>
    <td width="199"><input name="matricula" type="text"
      id="matricula"></td>
  </tr>
  <tr>
    <td>Nome:</td>
    <td><input name="nome" type="text" readonly id="nome"
       size="40"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" name="Submit" value="Pesquisar!"></td>
  </tr>
</form>
</table>


Este formulário possui um detalhe que o diferencia daqueles usados em aplicações web convencionais: o valor informado para a propriedade action:

action="javascript:void%200"

Como a página não será atualizada, é preciso um mecanismo que permita simular o envio do formulário, mas sem realmente faze-lo na verdade. A forma mais usual é fornecer um URL JavaScript que não retorna nada:

javascript:void 0

e, como o espaço entre URLs deve ser informado como %20, o resultado é este valor estranho à primeira vista.

A conexão com o servidor é feita quando o formulário é submetido (o que é apenas uma simulação, já que a aplicação continua na mesma página) através de uma função delegada ao seu evento onsubmit:

onsubmit="pesquisar()"

O código completo para a página HTML está disponível nas linhas seguintes:

Código completo para alunos.htm

<html>
<head>
  <title>Cadastro de Alunos</title>
  <style type="text/css">
    body, td {font: 70% Verdana}
  </style>
</head>
<body>
<strong>Cadastro de Alunos</strong><br>
<br>
<table width="287" border="0" cellspacing="0" cellpadding="4">
<form name="cadastro" action="javascript:void%200"
    onsubmit="pesquisar()">
  <tr>
    <td width="72">Matrícula:</td>
    <td width="199"><input name="matricula" type="text"
        id="matricula"></td>
  </tr>
  <tr>
    <td>Nome:</td>
    <td><input name="nome" type="text" readonly id="nome"
        size="40"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" name="Submit" value="Pesquisar!"></td>
  </tr>
</form>
</table>

<br>
<span id="status">Status: Pronto</span><br>

<script type="text/javascript">
  var http;

  function pesquisar(){
    http = obterObjRequisicao();

    if(http){
      var mat = document.cadastro.matricula.value;
      var url = "http://localhost:8080/
          pesquisar.jsp?matricula=" + escape(mat);
      http.onreadystatechange = processar;
      http.open("GET", url, true);
      http.send(null);
    }

    return false;
  }

  function processar(){
    var docXML;

    if(http.readyState == 4){
      if(http.status == 200){
        docXML = http.responseXML;
        analisarDados(docXML);
      }
      else{
        window.alert('Erro. Não foi possível realizar a operação');
      }
    }
  }

  function obterObjRequisicao(){
    if(window.XMLHttpRequest){
      return new XMLHttpRequest();
    }
    else if(window.ActiveXObject){
      return new ActiveXObject("Microsoft.XMLHTTP");
    }

    return null;
  }

  function analisarDados(xml){
    var txtStatus = document.getElementById("status");
    var cont = xml.getElementsByTagName('aluno');
    
    if(cont.length > 0){ // encontrou o aluno
      txtStatus.innerHTML = "Status: Aluno
          encontrado com sucesso!";
      var nome_aluno = cont[0].childNodes[0].nodeValue;
      document.cadastro.nome.value = nome_aluno;
    }
    else{ // não encontrou
      txtStatus.innerHTML = "Status: Aluno não encontrado.";
      document.cadastro.matricula.value = "";
      document.cadastro.nome.value = "";
      document.cadastro.matricula.focus();
    }
  }
//-->
</script>

</body>
</html>


2 - Usando POST

Com o objetivo de demonstrar como o objeto XMLHttpRequest efetua de forma diferenciada as requisições GET e POST, decidiu-se implementar uma nova versão da aplicação prática demonstrada neste artigo, desta vez usando o método POST.

As diferenças entre as duas aplicações ocorrerão somente no trecho de código que efetua a requisição ao servidor. A versão com POST deve se basear no modelo a seguir:

if(http){
  var mat = document.cadastro.matricula.value;
  var url = "http://localhost:8080/estudos/pesquisar.jsp";
  http.onreadystatechange = processar;
  http.open("POST", url, true);
  http.setRequestHeader("Content-Type", "
    application/x-www-form-urlencoded; charset=UTF-8");
  http.send("matricula=" + escape(mat));
}


As diferenças podem ser resumidas da seguinte forma:

1) Não há mais os parâmetros no endereço da página que sofrerá a requisição;
2) O método de envio é definido como POST:

http.open("POST", url, true);

3) O cabeçalho Content-Type da requisição agora é definido como sendo dados de um formulário:

http.setRequestHeader("Content-Type", "
application/x-www-form-urlencoded; charset=UTF-8");


4) Os parâmetros da requisição são enviados no método send():

http.send("matricula=" + escape(mat));
 
 
Arquivo de Códigos - Página Inicial
Veja dicas, truques e anotações de iTextSharp
Baixando, instalando e testando o iTextSharp no Visual Studio .NET 2005
Criando um documento PDF passo-a-passo usando iTextSharp e Visual C# 2005
Veja dicas, truques e anotações de outras linguagens
Java - Listar dados de uma tabela MySQL em uma JTable
Java - Excluir um diretório
Ruby On Rails - Como verificar se um ítem existe na sessão
Java - Entendendo a interface Set<E>
JavaScript - Verificar se cookies estão habilitados no navegador
PHP - Remover espaços na frente e no fim de uma string
Python - Como obter os segundos como um decimal no intervalo 00-59
C# (CSharp) - Como marcar ou desmarcar uma CheckBox via código
PHP - Usando a função array_walk() para aplicar uma função a cada um dos elementos de um array
PHP - Acessandos os elementos de um array de índice numérico usando o laço for

       

http://www.arquivodecodigos.net
:: Arquivo de Códigos - Softwares e Consultoria em Programação ::
Todo o conteúdo deste site, quando não devidamente observado, pertence a seus idealizadores e não
poderá ser usado para outras finalidades senão estudo e aprimoramento de técnicas de programação.
Certifique-se de ler as notas legais antes de proceder com o acesso e leitura do
conteúdo disponibilizado nestas páginas.

Fale Conosco: (62) 3261-7018 / (62) 8185-0734

Desenvolvedor Responsável: Osmar J. Silva

Página Inicial Contatos Pesquisar Mapa do Site